Remplir une table a travers les données de datareader

saadouli7 Messages postés 36 Date d'inscription mardi 26 avril 2011 Statut Membre Dernière intervention 18 novembre 2011 - 19 mai 2011 à 10:26
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 - 20 mai 2011 à 15:17
bonjour
j'ai le probleme suivant:
j'ai une table "table1" access dont je veut le remplir à travers des données extraits d'une autre table "enseignement" . j'ai ecris le code suivant:

cnxstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\compaq\Desktop\Emploi.mdb;"
cnx = New OleDb.OleDbConnection
cnx.ConnectionString = cnxstr
cnx.Open()
sql2 = " select jour_,salle_,HD from Enseignements where CycleAnnée_=" & ComboBox2.SelectedItem & " and filière_='" & ComboBox1.SelectedItem & "' and Groupe=" & ListBox1.SelectedItem
cmd2 = New OleDb.OleDbCommand
cmd2.CommandText = sql2
cmd2.Connection() = cnx
Dim Reader2 As OleDb.OleDbDataReader = cmd2.ExecuteReader
If (Reader2.HasRows) Then

While Reader2.Read()
sql3 = "insert into Table1 (jour_,salle_,HD) values(myReader2.GetInt16(0) , myReader2.GetString(1) , myReader2.GetInt16(2)) "
cmd3.CommandText = sql3
cmd3.Connection() = cnx
Dim dr As OleDb.OleDbDataReader = cmd.ExecuteReader
End While
End If

Reader2.Close()
l'execution passe sans message d'erreur. et j'ai bien verifier que ma datareader"reader2" contient des données, mais la table "Table1" reste vide je sais pas où le probleme. est ce que quelq'un peut m'aider
merci

5 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 mai 2011 à 11:30
Salut,

je comprends pas : pour ta requête du "select" tu fais la bonne concaténation, alors que dans ton "insert" t'écris n'importe quoi.

Et pour rappel c'est un ExecuteNonQuery qu'il faut utiliser pour un insert/update/delete, et non un ExecuteReader
0
saadouli7 Messages postés 36 Date d'inscription mardi 26 avril 2011 Statut Membre Dernière intervention 18 novembre 2011
20 mai 2011 à 12:20
bonjours
oui tu as raison j'ai corrigé cette faute.
mon nouveau code est:
While Reader2.Read()
sql3 = "insert into Table1 (jour_,salle_,HD) values('" & Reader2.GetValue(0) & "' ,'" & Reader2.GetValue(1) & "' ,'" & Reader2.GetValue(2) & "')"
cmd3 = New OleDb.OleDbCommand
cmd3.CommandText = sql3
cmd3.Connection() = cnx
cmd3.ExecuteNonQuery()
End While
mais il reste encore un probleme à l'execution la table table1 se remplit correctement avec les données selectionés mais j'ai toujours un msg d'erreur
au niveau de cmd.ExecuteNonquerry: "Type de données incompatible dans l'expression du critère".
je crois que cet erreur concerne la partie & Reader2.GetValue(2) & qui correspont à la valeur de HD qui est declaré de type réel simple.j'ai essayé de remplacé getvalue par getFloat mais ça resta la meme chose
remarque: jour_ et salle sont respectivement declarés de type entier est texte

est ce que quelqu'un a une idéé.
merci
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 mai 2011 à 14:29
Re,

à vue de nez il y a un souci pour certains enregistrements uniquement, du fait que ta table est bien remplie (ou du moins remplie jusqu'à ce que l'exception soit levée).

La valeur du champ HD dans ta table Enseignements est nullable ?
Si oui, il faut tester si la valeur est différentes de DBNull.Value, dans le cas contraire utiliser une valeur par défaut. Ou alors le remplacer par null (valeur directe, pas de quote autour) si ton champ est également nullable sur ta Table1.

Au fait, de quel type est le champ 'HD' ?
0
saadouli7 Messages postés 36 Date d'inscription mardi 26 avril 2011 Statut Membre Dernière intervention 18 novembre 2011
20 mai 2011 à 14:51
salut,
concernant HD j'ai indiqué qu'il est de type réel simple il n'est pas nullablle.
à chaque apparition de l'exeption je consulte ma table table1 je remarque qu'elle est bien remplit et sans aucun manque de données . mon probleme reste toujour concernant ce message d'erreur .j'arrive pas à determiner d'où le problème
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 mai 2011 à 15:17
Avi, j'avais zappé que tu avais donné le typage de HD ;)

Essaie alors de faire sauter les quotes autour de cette valeur dans ta requête.

Je sais que l'écriture normale pour une valeur numérique c'est sans quote, mais que certains SGBD l'acceptent quand même, donc ça se tente (fais attention au séparateur décimal par contre, le '.' (point) est fortement recommandé pour ne pas dire obligatoire. Or VB risque d'appliquer celui de ta culture soit le ',' (virgule)).
0
Rejoignez-nous