Probleme de mise a jour de base de donnée

Signaler
Messages postés
3
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 avril 2008
-
Messages postés
3
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 avril 2008
-
Bonjour,


je suis en train de programmer une application manipulant une base de donnée, mon programme arrive à la lire, le problème arrive quand je veux modifier ma base de donnée, sa me dit que la génération SQL dynamique n'est pas prise en charge pour plusieurs tables de base.
Voici mon code:


Imports System.Data.OleDb



Public






Class
ecran_principal


Private
cnx

As
OleDbConnection


'Déclaration de la variable pour la commande






Private
cmd

As
OleDbCommand


'Déclaration de la variable pour le dataadapter






Private
dta

As
OleDbDataAdapter


'Déclaration de la variable pour le dataset






Private
dts

As



New
DataSet


'Déclaration de la variable pour la requête






Private
sql

As



String






'Déclaration de la variable pour la datatable






Private
dtt

As
DataTable


'Déclaration de la variable pour le datarow






Private
dtr

As
DataRow


'Déclaration de la variable pour le Nº de l'enregistrement






Private
rownum

As



Integer






'Déclaration de la variable pour la connectionstring






Private
cnxstr

As



String






'Déclaration de la variable pour le commandbuilder






Private
cmdb

As
OleDbCommandBuilder 


Private



Sub
ecran_principal_Load(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles



MyBase
.LoadTimer.Interval = 500

Timer.Start()

 

 

precedent.Visible =


False






'ouverture de la connection(à partir du répertoire de l'application)sur la même ligne

cnxstr "provider microsoft.jet.oledb.4.0 ; data source = "
& Application.StartupPath &

"\hardcorp.mdb;"

cnx =




New
OleDbConnectioncnx.ConnectionString = cnxstr

cnx.Open()


'Création de la requête sql

sql "SELECT CLIENT.nom, CLIENT.prenom, SAV.nosav, SAV.date_depot, SAV.diagnostique, SAV.tacheafaire, SAV.important, SAV.note, MACHINE.description FROM (CLIENT INNER JOIN MACHINE ON CLIENT.noclient MACHINE.noclient) INNER JOIN SAV ON MACHINE.nomachine = SAV.nomachine;"






'Création de la commande et on l'instancie (sql)

cmd =




New
OleDbCommand(sql)


'Création du dataadapter (dta) et on l'instancie (cmd)

dta =




New
OleDbDataAdapter(cmd)


'On instancie la commande (cmd) à la connection (cnx)

cmd.Connection() = cnx







'On charge le dataset (dts) grace à la propriété fill du dataadapter (dta)

dta.Fill(dts,




"CLIENT"
)


'On charge la datatable (dtt) grace à la propriété tables du dataset (dts)

dtt = dts.Tables(




"CLIENT"
)


Me
.nomclient.Text =

CStr
(dtt.Rows(rownum).Item(

"nom"
))


Me
.prenomclient.Text =

CStr
(dtt.Rows(rownum).Item(

"prenom"
))


Me
.nosav.Text =

CStr
(dtt.Rows(rownum).Item(

"nosav"
))


Me
.datedepot.Text =

CStr
(dtt.Rows(rownum).Item(

"date_depot"
))


If
dtt.Rows(rownum).Item(

"diagnostique"
)

Is
System.DBNull.Value

Then






Me
.diagnostique.Text =

""






Else
:

Me
.diagnostique.Text =

CStr
(dtt.Rows(rownum).Item(

"diagnostique"
))


End



If






If
dtt.Rows(rownum).Item(

"note"
)

Is
System.DBNull.Value

Then






Me
.note.Text =

""






Else
:

Me
.note.Text =

CStr
(dtt.Rows(rownum).Item(

"note"
))


End



If






If
dtt.Rows(rownum).Item(

"tacheafaire"
)

Is
System.DBNull.Value

Then






Me
.tacheafaire.Text =

""






Else
:

Me
.tacheafaire.Text =

CStr
(dtt.Rows(rownum).Item(

"tacheafaire"
))


End



If






If
dtt.Rows(rownum).Item(

"important"
)

Is
System.DBNull.Value

Then






Me
.important.Text =

""






Else
:

Me
.important.Text =

CStr
(dtt.Rows(rownum).Item(

"important"
))


End



If






If
dtt.Rows(rownum).Item(

"description"
)

Is
System.DBNull.Value

Then






Me
.description.Text =

""






Else
:

Me
.description.Text =

CStr
(dtt.Rows(rownum).Item(

"description"
))


End



If

cnx.Close()


 







End



Sub






Private



Sub
suivant_Click(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
suivant.Clickcnx.Open()

precedent.Visible =


True






Me
.nomclient.Text =

""






Me
.prenomclient.Text =

""






Me
.nosav.Text =

""






Me
.datedepot.Text =

""






Me
.diagnostique.Text =

""






Me
.note.Text =

""






Me
.tacheafaire.Text =

""






Me
.important.Text =

""






Me
.description.Text =

""

rownum = rownum + 1







Me
.nomclient.Text =

CStr
(dtt.Rows(rownum).Item(

"nom"
))


Me
.prenomclient.Text =

CStr
(dtt.Rows(rownum).Item(

"prenom"
))


Me
.nosav.Text =

CStr
(dtt.Rows(rownum).Item(

"nosav"
))


Me
.datedepot.Text =

CStr
(dtt.Rows(rownum).Item(

"date_depot"
))


If
dtt.Rows(rownum).Item(

"diagnostique"
)

Is
System.DBNull.Value

Then






Me
.diagnostique.Text =

""






Else
:

Me
.diagnostique.Text =

CStr
(dtt.Rows(rownum).Item(

"diagnostique"
))


End



If






If
dtt.Rows(rownum).Item(

"note"
)

Is
System.DBNull.Value

Then






Me
.note.Text =

""






Else
:

Me
.note.Text =

CStr
(dtt.Rows(rownum).Item(

"note"
))


End



If






If
dtt.Rows(rownum).Item(

"tacheafaire"
)

Is
System.DBNull.Value

Then






Me
.tacheafaire.Text =

""






Else
:

Me
.tacheafaire.Text =

CStr
(dtt.Rows(rownum).Item(

"tacheafaire"
))


End



If






If
dtt.Rows(rownum).Item(

"important"
)

Is
System.DBNull.Value

Then






Me
.important.Text =

""






Else
:

Me
.important.Text =

CStr
(dtt.Rows(rownum).Item(

"important"
))


End



If






If
dtt.Rows(rownum).Item(

"description"
)

Is
System.DBNull.Value

Then






Me
.description.Text =

""






Else
:

Me
.description.Text =

CStr
(dtt.Rows(rownum).Item(

"description"
))


End



If






If
rownum >= dtt.Rows.Count - 1

Then

suivant.Visible =




False






End



If

cnx.Close()







End



Sub






Private



Sub
precedent_Click(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
precedent.Clickcnx.Open()

suivant.Visible =


True






Me
.nomclient.Text =

""






Me
.prenomclient.Text =

""






Me
.nosav.Text =

""






Me
.datedepot.Text =

""






Me
.diagnostique.Text =

""






Me
.note.Text =

""






Me
.tacheafaire.Text =

""






Me
.important.Text =

""






Me
.description.Text =

""

rownum = rownum - 1







Me
.nomclient.Text =

CStr
(dtt.Rows(rownum).Item(

"nom"
))


Me
.prenomclient.Text =

CStr
(dtt.Rows(rownum).Item(

"prenom"
))


Me
.nosav.Text =

CStr
(dtt.Rows(rownum).Item(

"nosav"
))


Me
.datedepot.Text =

CStr
(dtt.Rows(rownum).Item(

"date_depot"
))


If
dtt.Rows(rownum).Item(

"diagnostique"
)

Is
System.DBNull.Value

Then






Me
.diagnostique.Text =

""






Else
:

Me
.diagnostique.Text =

CStr
(dtt.Rows(rownum).Item(

"diagnostique"
))


End



If






If
dtt.Rows(rownum).Item(

"note"
)

Is
System.DBNull.Value

Then






Me
.note.Text =

""






Else
:

Me
.note.Text =

CStr
(dtt.Rows(rownum).Item(

"note"
))


End



If






If
dtt.Rows(rownum).Item(

"tacheafaire"
)

Is
System.DBNull.Value

Then






Me
.tacheafaire.Text =

""






Else
:

Me
.tacheafaire.Text =

CStr
(dtt.Rows(rownum).Item(

"tacheafaire"
))


End



If






If
dtt.Rows(rownum).Item(

"important"
)

Is
System.DBNull.Value

Then






Me
.important.Text =

""






Else
:

Me
.important.Text =

CStr
(dtt.Rows(rownum).Item(

"important"
))


End



If






If
dtt.Rows(rownum).Item(

"description"
)

Is
System.DBNull.Value

Then






Me
.description.Text =

""






Else
:

Me
.description.Text =

CStr
(dtt.Rows(rownum).Item(

"description"
))


End



If






If
rownum = 0

Then

precedent.Visible =




False






End



If

cnx.Close()







End



Sub






Private



Sub
modifier_Click(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
modifier.Clickcnx.Open()


' Extraire l'enregistrement courant

dtr = dts.Tables(




"CLIENT"
).Rows(rownum)


'Modifier les valeurs des champs en récupérant le contenu des TextBox

dtr(




"Nom"
) =

Me
.nomclient.Textdtr(


"Prenom"
) =

Me
.prenomclient.Text


'Pour modifier les valeurs changées dans le DataAdapter

cmdb =




New
OleDbCommandBuilder(dta)


'Mise à jour

dta.Update(dts,




"CLIENT"
)


'On vide le DataSet et on le 'recharge' de nouveau.

dts.Clear()


dta.Fill(dts,




"CLIENT"
)dtt = dts.Tables(


"CLIENT"
)cnx.Close()

 


End



Sub






Private



Sub
Timer_Tick(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
Timer.Tickjour.Text = Now()


End



Sub






Private



Sub
supprimer_Click(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
supprimer.Clickdts.Tables(


"CLIENT"
).Rows(rownum).Delete()cmdb =


New
OleDbCommandBuilder(dta)dta.Update(dts,


"CLIENT"
)


End



SubEnd





Class

Aidez-moi svp.

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Salut
Et si tu nous disais où ça te dit ça, sur quelle ligne.
Si tu dois coller du code, bien sur sans la forme, respecte les normes d'appellation des objets et variables.
Par exemple, le nom d'un bouton devrait commencer par cmd afin que, au premier coup d'oeil, on sache de quoi il s'agit.
Sans ces détails, si l'on veut recomposer ton projet, c'est trop fastidieux de jouer aux devinettes.
+
"quand je veux modifier ma base de donnée" : quand tu veux modifier quoi ? la structure des tables ? ajouter/supprimer des tables ? des champs ? des données ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
3
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 avril 2008

Bonjour,
 excusez moi pour le copier-coller bin voila j'ai fait une requête sur 3 tables : CLIENT, MACHINE, SAV
"SELECT CLIENT.nom, CLIENT.prenom, SAV.nosav, SAV.date_depot, SAV.diagnostique, SAV.tacheafaire, SAV.important, SAV.note, MACHINE.description FROM (CLIENT INNER JOIN MACHINE ON CLIENT.noclient MACHINE.noclient) INNER JOIN SAV ON MACHINE.nomachine SAV.nomachine;"


pour afficher les données dans les textbox il n'y a pas de problèmes, toutes les données y sont, mais quand je veux modifier une ligne des 3 tables à l'aide du bouton modifier de ma form j'obtiens à l'update que j'ais mis <dta.Update(dts, "CLIENT" )> : la génération SQL dynamique n'est pas prise en charge pour plusieurs tables de base. System.InvalidOperationException



Private



Sub
modifier_Click(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
modifier.Click


cnx.Open()










' Extraire l'enregistrement courant



dtr = dts.Tables(




"CLIENT" ).Rows(rownum)





'Modifier les valeurs des champs en récupérant le contenu des TextBox



dtr(




"Nom" ) = Me .nomclient.Text


dtr(




"Prenom" ) = Me .prenomclient.Text





'Pour modifier les valeurs changées dans le DataAdapter



cmdb =




New OleDbCommandBuilder(dta)





'Mise à jour



dta.Update(dts,




"CLIENT" )





'On vide le DataSet et on le 'recharge' de nouveau.



dts.Clear()




dta.Fill(dts,




"CLIENT" )


dtt = dts.Tables(




"CLIENT" )


cnx.Close()






 









End
Sub
Messages postés
3
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 avril 2008

Bonjour,
 excusez moi pour le copier-coller bin voila j'ai fait une requête sur 3 tables : CLIENT, MACHINE, SAV
"SELECT CLIENT.nom, CLIENT.prenom, SAV.nosav, SAV.date_depot, SAV.diagnostique, SAV.tacheafaire, SAV.important, SAV.note, MACHINE.description FROM (CLIENT INNER JOIN MACHINE ON CLIENT.noclient MACHINE.noclient) INNER JOIN SAV ON MACHINE.nomachine SAV.nomachine;"


pour afficher les données dans les textbox il n'y a pas de problèmes, toutes les données y sont, mais quand je veux modifier une ligne des 3 tables à l'aide du bouton modifier de ma form j'obtiens à l'update que j'ais mis <dta.Update(dts, "CLIENT" )> : la génération SQL dynamique n'est pas prise en charge pour plusieurs tables de base. System.InvalidOperationException



Private



Sub
modifier_Click(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
modifier.Click


cnx.Open()










' Extraire l'enregistrement courant



dtr = dts.Tables(




"CLIENT" ).Rows(rownum)





'Modifier les valeurs des champs en récupérant le contenu des TextBox



dtr(




"Nom" ) = Me .nomclient.Text


dtr(




"Prenom" ) = Me .prenomclient.Text





'Pour modifier les valeurs changées dans le DataAdapter



cmdb =




New OleDbCommandBuilder(dta)





'Mise à jour



dta.Update(dts,




"CLIENT" )





'On vide le DataSet et on le 'recharge' de nouveau.



dts.Clear()




dta.Fill(dts,




"CLIENT" )


dtt = dts.Tables(




"CLIENT" )


cnx.Close()






 









End
Sub