Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1571 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Probleme base access avec vb.net

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Probleme base access avec vb.net

n°1151321
joe361
Posté le 16-07-2005 à 16:54:23  profilanswer
 

Bonjour,
je galere un peu. J'ai suivi la doc du lien :
http://plasserre.developpez.com/v6-2.htm
sur un formulaire j'ai inséré un datagrid et un bouton, j'arrive a recupérer les infos de ma base access sur le datagrid mais pas a modifier ma base access avec les infos du datagrid....
Si quelqu'un peut m'aider, car vb.net commence a m'énerver un peu!;-)
 
 
Public Class test
 
    'declaration des variables
 
    Dim memoire As New DataSet() 'creation du dataset
    Dim NewLigne As DataRow
    Dim cnx As OleDbConnection
    Dim base As String
    Dim liaison As New OleDbDataAdapter
 
    Sub chargement()
        Try
         
            Dim BdProvider = "Microsoft.Jet.Oledb.4.0"
            Dim BdPathDirectory = "C:\Documents and Settings\test.mdb"
 
            base = "provider=" & BdProvider & "; " & _
             "data source= " & BdPathDirectory
 
            'declaration de la connection
            cnx = New OleDbConnection(base)
            cnx.Open() 'ouverture de la connection
 
            'Dim requete = "SELECT Couple.[Nom couple], Couple.Abscisse FROM Couple"
            Dim requete = "SELECT Couple.* FROM Couple"
            liaison = New OleDbDataAdapter(requete, base)
 
            'charge la table en mémoire
            liaison.Fill(memoire, "Couple" )
 
            Dim vue As New DataView(memoire.Tables("Couple" ))
            DataGridView1.DataSource = vue
 
            cnx.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text)
        End Try
 
    End Sub
 
 
    Private Sub test_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        chargement()
 
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            cnx.Open()
            NewLigne = memoire.Tables("Couple" ).NewRow
            NewLigne(0) = "tata"
            NewLigne(1) = "toto"
 
            ' Création de la nouvelle ligne  
            memoire.Tables("Couple" ).Rows.Add(NewLigne) 'ca creer bien la nouvelle ligne ds le datagrid...apres ca ne mache pas!
 
 
            Dim CmdBuild As OleDbCommandBuilder
            CmdBuild = New OleDb.OleDbCommandBuilder(liaison)
 
            ' liaison = New OleDbDataAdapter("SELECT Couple.[Nom couple], Couple.Abscisse FROM Couple", base)
            liaison = New OleDbDataAdapter("SELECT Couple.* FROM Couple", base)
 
            liaison.InsertCommand = CmdBuild.GetInsertCommand()
            liaison.Update(memoire, "Couple" )
            cnx.Close()
 
 
 
            chargement()
            'DataGridView1.Refresh()
        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text)
        End Try
    End Sub
End Class

mood
Publicité
Posté le 16-07-2005 à 16:54:23  profilanswer
 

n°1153479
ricil78
N'est pas pitou qui veut !
Posté le 19-07-2005 à 11:33:20  profilanswer
 

Citation :

     
      Dim vue As New DataView(memoire.Tables("Couple" ))  
      DataGridView1.DataSource = vue  


 
Bonjour je suis trés loin d'être un spécialiste du Datagrid mais il y a un truc qui m'interpèle dans ton code
c'est que tu utilises un DataView
Un DataView sert seulement à visualiser des infos et non à les modifier.
Essaie de voir en utilisant un dataset
 
Bon courage !

n°1153486
FlorentG
Unité de Masse
Posté le 19-07-2005 à 11:35:51  profilanswer
 

Non. Le DataView modifie le truc associé. D'ailleurs le DataGrid crée automatiquement un DataView si on lui file un DataTable par exemple. Le problème dans notre cas, c'est qu'il n'y a ni requête de mise à jour, ni requête de suppression, c'est logique.

n°1153745
ricil78
N'est pas pitou qui veut !
Posté le 19-07-2005 à 14:52:44  profilanswer
 

Encore moi ! :hello:  
 
Tiens joe361 puisque tu connais déjà le site regarde quelques pages plus loin  
 
http://plasserre.developpez.com/v6-5.htm
 
et regarde la rubrique Ouverture et Modifier un enregistrement.
 
Toujours sur la base de leur exemple aprés le code ouverture rajoute cela :  
 

Code :
  1. DataGrid1.SetDataBinding(ObjetDataSet, "FICHEPATIENT" )


 
Le code de la rubrique "Modifier un enregistrement" tu peux le mettre dans un bouton que tu peux intituler "Enregister".
 
Et il marche autant pour les ajouts, supression, etc.
 
J'espère que ça t'aidera !
 
 
 


Message édité par ricil78 le 19-07-2005 à 14:56:28
n°1154043
joe361
Posté le 19-07-2005 à 19:12:37  profilanswer
 

Apres le dernier post, j'ai ete pris d'une grande joie...mais rien ne ce passe quand je mets le code suivant dans le boution OK:
cnx.Open()
 
            DataGrid1.SetDataBinding(memoire, "Couple" )
            cnx.Close()  
Pourquoi? Suis je condanné a utiliser des requetes sql!

n°1154047
ricil78
N'est pas pitou qui veut !
Posté le 19-07-2005 à 19:17:17  profilanswer
 

Vu que tu as du modifier ton code peux tu le remettre en entier STP
 
et verrai si je peux faire quelque chose pour toi  :)

n°1154052
joe361
Posté le 19-07-2005 à 19:18:50  profilanswer
 

ps: je n'ai bien sûr pas utiliser les codes de mon premier post a savoir :
liaison.InsertCommand = CmdBuild.GetInsertCommand()
je charge mon formulaire : avec la methode suivante :
Private Sub taffichageDBCouple(ByVal requete As String, ByVal table As String, ByVal DataGridViewName As DataGrid)
        Try
            'On parametre la chaine de connection pour la base de donnée  
            base = "provider=" & BdProvider & "; " & _
             "data source= " & BdPathDirectory
 
            'declaration de la connection
            cnx = New OleDbConnection(base)
            cnx.Open() 'ouverture de la connection
 
            'lien entre la base et la requète
            liaison = New OleDbDataAdapter(requete, base)
 
            'charge la table en mémoire
            liaison.Fill(memoire, table)
 
            Dim vue As New DataView(memoire.Tables(table))
            DataGridViewName.DataSource = vue
            cnx.Close()
 
        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text)
        End Try
    End Sub
 
puis je modifie mon datagrid...et j'appuis sur mon bouton "OK"...et rien ne se passe...

n°1154057
ricil78
N'est pas pitou qui veut !
Posté le 19-07-2005 à 19:33:25  profilanswer
 

Désolé mais je comprend pas ce que tu fait
 
Si tu fait comme il dise sur la page http://plasserre.developpez.com/v6-5.htm
dans les rubriques que j'ai déjà citer dans mes postes précedents (Ouverture et Modifier un enregistrement)
 
-> il y a un dataset et non un dataview
 
-> la requete il la transmet à un objet OleDbCommand et non à un OleDbDataAdapter
 
-> Ce code doit être mis dans le code de chargement et non celui de validation

Code :
  1. DataGrid1.SetDataBinding(memoire, "Couple" )


 
etc...


Message édité par ricil78 le 19-07-2005 à 19:33:48
n°1154382
joe361
Posté le 20-07-2005 à 10:05:58  profilanswer
 

En fait ce que j'ai fais semble être la même chose (c'est issue d'une source". Ayant le doute j'ai fait comme tu m'as dis mais j'ai encore la même erreur! erreur de syntaxe dans l'instruction insert into!!!!
 
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
   
        Try
            ' Extraire l'enregistrement courant
            ObjetDataRow = ObjetDataSet.Tables("Couple" ).Rows(2)
 
            'Modifier les valeurs des champs en  récupérant le contenu des TextBox
            ObjetDataRow("Nom couple" ) = "tata"
            ObjetDataRow("Abscisse" ) = "titititit"
 
            'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
 
            'Mise à jour
            ObjetDataAdapter.Update(ObjetDataSet, "Couple" )
 
            'On vide le DataSet et on le 'recharge' de nouveau.
            ObjetDataSet.Clear()
            ObjetDataAdapter.Fill(ObjetDataSet, "Couple" )
            ObjetDataTable = ObjetDataSet.Tables("Couple" )
 
        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text)
        End Try
    End Sub
 
 
chargement avec la methode suivante :
Private Sub taffichageDBCouple(ByVal requete As String, ByVal table As String, ByVal DataGridViewName As DataGrid)
        Try
            ObjetDataSet = memoire
 
            ''Initialisation de la chaîne de paramètres pour la connexion
            strConn = "Provider=" + BdProvider + ";" & "Data Source= " + BdPathDirectory + ";"
 
            'Initialisation de la chaîne contenant l'instruction SQL
            strSql = requete
 
            'Instanciation d'un Objet Connexion
            ObjetConnection = New OleDbConnection()
 
            'Donner à la propriété ConnectionString les paramètres de connexion
            ObjetConnection.ConnectionString = strConn
 
            'Ouvrir la connexion
            ObjetConnection.Open()
 
            'Instancer un objet Commande
            ObjetCommand = New OleDbCommand(strSql)
 
            'Instancer un objet Adapter
            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
 
            'initialiser l'objet Command
            ObjetCommand.Connection() = ObjetConnection
 
            'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
            ObjetDataAdapter.Fill(ObjetDataSet, "Couple" )
 
            'Mettre dans un Objet DataTable une table du DataSet
            ObjetDataTable = ObjetDataSet.Tables("Couple" )
 
            DataGridViewName.SetDataBinding(ObjetDataSet, "Couple" )
 
        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text)
        End Try
    End Sub

n°1154383
FlorentG
Unité de Masse
Posté le 20-07-2005 à 10:07:39  profilanswer
 

Et elle a quelle gueule ta requête ? :heink:

mood
Publicité
Posté le 20-07-2005 à 10:07:39  profilanswer
 

n°1154418
ricil78
N'est pas pitou qui veut !
Posté le 20-07-2005 à 10:18:05  profilanswer
 

Le truc c'est qu'il n'y a pas d'instruction insert into.
 
Pour aller plus vite voici mon code, Si l'utilisateur rajoute une ligne, Supprime, modifie.
Un clic sur le bouton enregistrer et le tour est joué.
 
voici mon code abréger:
 
Chargement :

Code :
  1. 'Te passe les détails de la connexion
  2.            'Paramètre la requete récupère les nom de fichiers
  3.             With MyDbCommand
  4.                 .Connection = TonObjetConnexion
  5.                 .CommandType = CommandType.Text
  6.                 .CommandText = "ICI TA REQUETE D'AFFICHAGE (SELECT...)"
  7.             End With
  8.             'Instancer un objet Adapter
  9.             MyDbDataAdapter = New OleDbDataAdapter(MyDbCommand)
  10.             'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
  11.             MyDbDataAdapter.Fill(MyDataSet, "MA_TABLE" )
  12.             'Mettre dans un Objet DataTable une table du DataSet
  13.             MyDataTable = MyDataSet.Tables("MA_TABLE" )
  14.             UnDataGrid.SetDataBinding(MyDataSet, "MA_TABLE" )


 
Bouton "Enregistement des modifications" :  
 

Code :
  1. 'Pour modifier les valeurs changées dans le DataAdapter
  2.             MyDbCommandBuilder = New OleDbCommandBuilder(MyDbDataAdapter)
  3.             'Mise à jour
  4.             MyDbDataAdapter.Update(MyDataSet, "MA_TABLE" )
  5.             'On vide le DataSet et on le 'recharge' de nouveau.
  6.             MyDataSet.Clear()
  7.             'Remplit le dataset
  8.             MyDbDataAdapter.Fill(MyDataSet, "MA_TABLE" )
  9.             MyDataTable = MyDataSet.Tables("MA_TABLE" )


 
Tiens moi au courant
 
 bye

n°1154423
FlorentG
Unité de Masse
Posté le 20-07-2005 à 10:19:27  profilanswer
 

Je crois qu'on va faire un tutorial complet, parce qu'on n'est pas sortir de l'auberge là :(
 
Va falloir aborder les DbCommand avec les Parameters, et le principe de DataSet/DataAdapter...

n°1154443
joe361
Posté le 20-07-2005 à 10:25:19  profilanswer
 

Voila ma requête (lors du chargement du formulaire)
taffichageDBCouple("SELECT Couple.[Nom couple], Couple.Abscisse FROM Couple", "Couple", DataGrid1)

n°1154452
FlorentG
Unité de Masse
Posté le 20-07-2005 à 10:28:21  profilanswer
 

Nan, j'veux dire pour le DataAdapter, il lui faut des requêtes paramétrées pour la mise à jour (insert, update et delete)

n°1154465
joe361
Posté le 20-07-2005 à 10:38:14  profilanswer
 

t'es surde toi? c'est pas justement le principe des lignes suivantes :
'Pour modifier les valeurs changées dans le DataAdapter  
            MyDbCommandBuilder = New OleDbCommandBuilder(MyDbDataAdapter)  
 
            'Mise à jour  
            MyDbDataAdapter.Update(MyDataSet, "MA_TABLE" )  
 

n°1154488
FlorentG
Unité de Masse
Posté le 20-07-2005 à 10:58:42  profilanswer
 

Ah si merde pardon, il va prendre tout seul les commandes via le command builder :)

n°1154494
joe361
Posté le 20-07-2005 à 11:03:31  profilanswer
 

(mais ca marche pas!;-) )

n°1154511
FlorentG
Unité de Masse
Posté le 20-07-2005 à 11:14:32  profilanswer
 

C'est quoi l'exception exacte ?

n°1154565
joe361
Posté le 20-07-2005 à 11:44:57  profilanswer
 

"erreur de syntaxe dans l'instruction insert into"

n°1154633
FlorentG
Unité de Masse
Posté le 20-07-2005 à 12:50:59  profilanswer
 

Envoi la requête insert

n°1154720
joe361
Posté le 20-07-2005 à 14:13:21  profilanswer
 

justement c'est ca le problème.  
ce n'est pas moi qui gère les insert into,update, delete...c'est command builder...
je ne sais vraiment pas comment faire! VB/microsoft n'est pas tres avare d'exemple a ce sujet!....En attendant une aide j'essaye de faire a la mano des requetes pour supprimer/modifier/insérer des enregistrement dans ma base. C'est super long a faire...j'imagine déjà la taille du prog finale!

n°1154724
FlorentG
Unité de Masse
Posté le 20-07-2005 à 14:14:30  profilanswer
 

Ben balance-la quand-même. Indice : un p'tit espion sur le command builder ;)

n°1154779
joe361
Posté le 20-07-2005 à 14:40:01  profilanswer
 

que se soit insertcommand, delete command, update command...tout est a Nothing

n°1154781
joe361
Posté le 20-07-2005 à 14:40:34  profilanswer
 

apart command text qui est a "SELECT Couple.[Nom couple], Couple.Abscisse FROM Couple"

n°1154795
joe361
Posté le 20-07-2005 à 14:46:55  profilanswer
 

Par contre je viens de remarquer que la propriété DataAdaptateur/TablesMappinp/item a un ! rouge et sa valeure est "impossible d'afficher la propriété indexéé". je ne sais pas si c'est important

n°1154837
FlorentG
Unité de Masse
Posté le 20-07-2005 à 15:09:39  profilanswer
 

joe361 a écrit :

que se soit insertcommand, delete command, update command...tout est a Nothing


Met-le sur le command builder, mais espionne par exemple la méthode GetInsertCommand()

n°1154948
joe361
Posté le 20-07-2005 à 16:08:21  profilanswer
 

"Met-le sur le command builder, mais espionne par exemple la méthode GetInsertCommand()"...c'est a dire?
 
j'ai même rajouter la ligne insertCommand...mais les valeurs de l'espion ne change pas
'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
 
            'Mise à jour
            ObjetDataAdapter.InsertCommand = ObjetCommandBuilder.GetInsertCommand
            ObjetDataAdapter.Update(memoire, "Couple" )
Par contre je ne sais passi c'est normal mais le champs ObjetDataAdapter/defaultSourceTableName est égale a "Table"

n°1154952
FlorentG
Unité de Masse
Posté le 20-07-2005 à 16:09:24  profilanswer
 

Espionne le résultat de la méthode GetInsertCommand du command builder : tu verra ta requête INSERT ;)

n°1155031
joe361
Posté le 20-07-2005 à 16:36:57  profilanswer
 

RESULTAT : NOTHING

n°1155036
FlorentG
Unité de Masse
Posté le 20-07-2005 à 16:38:02  profilanswer
 

*ouch* T'as bien mis l'espion àprès que le machin ait été créé, genre sur la ligne suivante ?

n°1155074
joe361
Posté le 20-07-2005 à 16:51:22  profilanswer
 

oui

n°1155203
joe361
Posté le 20-07-2005 à 18:29:52  profilanswer
 

Un peu de disgression,mais pas tant que ca! Avez vous une idée sur une erreur de requête :
Dim req2 = "UPDATE [Espacement couple] SET [Du couple]= '" + duCouple + "'  SET [Au couple]='" + auCouple + "'  SET [Espacement]='" + espacement + "' WHERE [Du couple]='" + duCouple + "'"
me donne l'erreure suivante :
                    "erreur de syntaxe (operateur absent) dans l'expression "0' SET [Au couple]='5' SET [Espacement] ='1".

n°1155606
FlorentG
Unité de Masse
Posté le 21-07-2005 à 10:26:58  profilanswer
 

Déjà, en .NET, on n'utilise jamais une simple concaténation pour faire une requête. On utilise toujours des requêtes paramétrées

n°1160519
joe361
Posté le 26-07-2005 à 16:39:59  profilanswer
 

mon code marche pour l'instant, mais j'aimerais bien savoir pour mes futurs développement ce qu'est une requête paramétrée?

n°1161767
FlorentG
Unité de Masse
Posté le 27-07-2005 à 16:10:29  profilanswer
 

Ah toi de le découvrir dans la MSDN ;)

n°1162835
joe361
Posté le 28-07-2005 à 11:40:13  profilanswer
 

J'ai un autre petit pb avec une requète...si quelqu'un a une idée :
 
 
Dim req1 = "INSERT INTO [Support longi] ( [Nom support longi],[Type], [codeT panneau]) VALUES ('" & nomSupportLongi & "','" & typeSupportLongi & "','" & codeSupportLongi & "') "
 
cnxClasse.executionRequete(req1)
 
Mais vb me dit :
"Vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table'Panneau'
 
J'ai donc regardé la liaison des tables (access),  en effet 'Nom Panneau' est la clef de la table panneau et [codeT panneau] est le champ  receptionnant cette clef dans ma table [Support longi] (liaison 1-n).
 
Comment puis je faire pour résoudre ce problème le plus simplement possible?
Cordialement,
 

n°1162837
FlorentG
Unité de Masse
Posté le 28-07-2005 à 11:41:02  profilanswer
 

Faut d'abord insérer dans la table Panneau, puis dans Support longi

n°1162905
joe361
Posté le 28-07-2005 à 12:27:03  profilanswer
 

Pourtant j'ai déjà un enregistrement "TOTO" clef primaire dans la table panneau....mais j'arrive pas a insérer un enregistrement dans support longi ou la clef étrangère  [codeT panneau] est "TOTO"

n°1162946
joe361
Posté le 28-07-2005 à 12:53:51  profilanswer
 

ok, ca marche!

n°1163689
joe361
Posté le 28-07-2005 à 17:32:12  profilanswer
 

Re-salut FlorentG!
J'ai un ptit problème avec mon datagrid, j'utilisais avant un dataset et j'arrivais a supprimer facilement les lignes. Mais comment fait on si on n'a pas de dataset et juste un datagrid!
 For i = 0 To DataGridGeometrie.Rows.Count - 2
            line.SetValues(i)  
            DataGridGeometrie.Rows.Remove(line)  
        Next i
 
apparament il n'a rrive pas bien a instancier ligne...
si t'as une idée, je suis preneur!
Encore merci

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Probleme base access avec vb.net

 

Sujets relatifs
[Javascript] Petit problème de fonction[access] mise en forme état
ACCESS LISTBOX d'un etat qui s'exporte pas sous excelProblème OleDb sur Base Access
Base de données MYSQL et client MS ACCESS : Problème avec champ Date[VB] Probleme d'acces a une base Access en mise a jour.
[ Access ] Problème de sécurité avec base en réseauProblème de connexion entre SQL Server et une base mixte Access/SQL
[ASP] problème d'accès à une base access depuis global.asaProbleme de maj base access en asp
Plus de sujets relatifs à : Probleme base access avec vb.net


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR