Questions sur la sauvegarde du combobox

alladin90 Messages postés 91 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 7 août 2016 - 21 oct. 2013 à 13:49
copperncius Messages postés 16 Date d'inscription vendredi 13 décembre 2013 Statut Membre Dernière intervention 30 août 2014 - 14 déc. 2013 à 17:34
Bonjour,
Je suis débutant et j'aimerais savoir comment pouvoir sauvegarder les combobox_items dans un seul champ d'une database access et aussi pouvoir modifier( c'est à dire pouvoir ajouter d'autres items plus tard)
Je m'éxplique:
Mon application consiste à faire remplir une combobox par des chiffres in runtime puis stocker ces valeurs. pour celà , je me sert de ce code qui n'a pas marché.
 Dim ConStr As String = _
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & _
Application.StartupPath & "\data.mdb"

Dim Conn As New OleDbConnection(ConStr)
Dim cmd As New OleDb.OleDbCommand
For i = 0 To ComboBox1.Items.Count
con.Open()
Dim sqls As String = "INSERT INTO Table1(nom,prenom,age, versement)" & _
"values ('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & ComboBox1.Items.ToString(i) & "') "
cmd = New OleDbCommand(sqls, con)
cmd.ExecuteNonQuery()
Next
con.Close()

Dim ConStr As String = _
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & _
Application.StartupPath & "\data.mdb"

Dim Conn As New OleDbConnection(ConStr)
Dim cmd As New OleDb.OleDbCommand
For i = 0 To ComboBox1.Items.Count
con.Open()
Dim sqls As String = "INSERT INTO Table1(nom,prenom,age, versement)" & _
"values ('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & ComboBox1.Items.ToString(i) & "') "
cmd = New OleDbCommand(sqls, con)
cmd.ExecuteNonQuery()
Next
con.Close()

Voici mon souci pour l'instant. Cependant j'ai d'autres soucis que j'aimerai les soulever plutard.
merci

6 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
21 oct. 2013 à 16:48
Bonjour
d'abord utilise des requetes parametrées
est ce que tous les champs de table1 sont des texte ?
le champ age est text ? pas numérique ?
essaie

    Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & _
Application.StartupPath & "\data.mdb"
Dim Conn As New OleDbConnection(ConStr)
Dim cmd As New OleDb.OleDbCommand
Conn.Open()
cmd.CommandText = "INSERT INTO Table1(nom,prenom,age, versement) VALUES (?,?,?,?);"
For i = 0 To ComboBox1.Items.Count
cmd.Parameters.Add("?", OleDbType.BSTR).Value = TextBox1.Text
cmd.Parameters.Add("?", OleDbType.BSTR).Value = TextBox2.Text
cmd.Parameters.Add("?", OleDbType.BSTR).Value = iTextBox3.Text
cmd.Parameters.Add("?", OleDbType.BSTR).Value = ComboBox1.Items.ToString(i)
cmd.ExecuteNonQuery()
Next
Conn.Close()
0
alladin90 Messages postés 91 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 7 août 2016
Modifié par alladin90 le 21/10/2013 à 17:57
Merci de votre réponse
J'ai éssayé le code mais il me renvoi cette érreur:
ExecuteNonQuery : la propriété Connection n'a pas été initialisée.
Je dois noter que je n'ai rien changé dans le code.
Je ne sais pas si je dois remplacé les (????) par des valeurs.
Pour les champs, ils sont de type text
Merci
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
21 oct. 2013 à 20:45
Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & _
Application.StartupPath & "\data.mdb"
Dim Conn As New OleDbConnection(ConStr)
Dim cmd As New OleDb.OleDbCommand
Conn.Open()
cmd.CommandText = "INSERT INTO Table1(nom,prenom,age, versement) VALUES (?,?,?,?);"
For i = 0 To ComboBox1.Items.Count
cmd.Parameters.Add("?", OleDbType.BSTR).Value = TextBox1.Text
cmd.Parameters.Add("?", OleDbType.BSTR).Value = TextBox2.Text
cmd.Parameters.Add("?", OleDbType.BSTR).Value = iTextBox3.Text
cmd.Parameters.Add("?", OleDbType.BSTR).Value = ComboBox1.Items.ToString(i)
cmd.Connection = Conn
cmd.ExecuteNonQuery()
Next
Conn.Close()


expliquation
? ce sont les parametres ,aussi l'ordre est important selon ta requete
cmd.Parameters.Add("?", OleDbType.BSTR).Value = TextBox1.Text
la on definit le type du parametre est lui assigne sa valeur
0
alladin90 Messages postés 91 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 7 août 2016
21 oct. 2013 à 23:32
C'est toujours le méme message d'érreur
ExecuteNonQuery : la propriété Connection n'a pas été initialisée
Mais j'ai pu contourné le probleme en se servant du code de genre:
dsNewRow.Item("versement") = dsNewRow.Item("versement") & "|" & CStr(ComboBox1.Items(i))

Mon deuxieme souci est que j'aimerai affiché les combo_items d'une maniere verticale pour pouvoir les calculer car avec ce code ils sont stockés dans le champ de cette façon : 100|200|50
Pou les récupérer dans la combobox , ils sont affichés
horizontalement.100 200 50
ComboBox1.DisplayMember = "versement"

Merci
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 22/10/2013 à 00:28
dsNewRow.Item("versement") = dsNewRow.Item("versement") & "|" & CStr(ComboBox1.Items(i))

d'où surgit le dsNewRow et quelle rapport avec ExecuteNonQuery : la propriété Connection n'a pas été initialisée ?

cela devrait aller

Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & _
Application.StartupPath & "\data.mdb"
Dim Conn As New OleDbConnection(ConStr)
Dim cmd As New OleDb.OleDbCommand
try
Conn.Open()
cmd.Connection = Conn
cmd.CommandText = "INSERT INTO Table1(nom,prenom,age, versement) VALUES (?,?,?,?);"

For i = 0 To ComboBox1.Items.Count
cmd.Parameters.Add("?", OleDbType.BSTR).Value = TextBox1.Text
cmd.Parameters.Add("?", OleDbType.BSTR).Value = TextBox2.Text
cmd.Parameters.Add("?", OleDbType.BSTR).Value = iTextBox3.Text
cmd.Parameters.Add("?", OleDbType.BSTR).Value = ComboBox1.Items.ToString(i)
cmd.ExecuteNonQuery()
Next
Conn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try


Mon deuxieme souci est que j'aimerai affiché les combo_items d'une maniere
c'est une autre question donc il vaut mieux poster un nouveau post
0
alladin90 Messages postés 91 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 7 août 2016
22 oct. 2013 à 01:01
Merci pour votre intéret
Malheureusement le code n'a pas marché comme il le faut.
Le code fait des enregisrement egal ou superieur au nombre des items du combobox.
C'ést à dire supposant il y'a trois items dans la combobox, je trouve quatre enregistrements qui se sonts enregistrés dans la bd.
Autre chose les items de la combobox sont des chiffres, mais dans la colonne "versement", je trouve des lettres (s ou y).
0

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

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
22 oct. 2013 à 13:15
erreur de ma part

au lieu de
For i = 0 To ComboBox1.Items.Count 

il faut
For i = 0 To ComboBox1.Items.Count -1 


Autre chose les items de la combobox sont des chiffres, mais dans la colonne "versement", je trouve des lettres (s ou y).

et il faut que je devine le rapport entre s y et les chiffres ?
0
alladin90 Messages postés 91 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 7 août 2016
22 oct. 2013 à 13:39
Merci et éxcusez moi de mon dérangement
J'ai éssayé de changer les valeurs de "for" avant de poster ma réponse mais en vain.
Maintenant avec
For i = 0 To ComboBox1.Items.Count -1

je trouve le nombre d'enregistrement dans la bd égal au nombre d'items entrés dans la combobox.
Pour la colonne 'versement'' j'ai supprimé "Tostring"

cmd.Parameters.Add("?", OleDbType.BSTR).Value = ComboBox1.Items.ToString(i)

Le résultat est que je trouve q'un seul item enregistré dans la bd (le premier).
Cordialement
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
22 oct. 2013 à 14:09
mal lu le post initial

ah tu veux un seul enregistrement et le problème est ta combobox
pas trop compris pourquoi se servir d'un combo s'il faut lire tout le combo
pour former le string
le problène est plutot dans ta bdd avec le champ versement car je ne pense pas que c'est correct qu'un champ a plusieurs données dans le meme enregistrement
pour chaque versement il faut un enregistrement
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
22 oct. 2013 à 14:58
aussi après reflextion je n'aurais pas constuit les tableaux ainsi
mais plutot

un tableau Client avec les champs
id numéro d'identité servant de clé primaire
nom prenom addresse telephone mobile age

Les versements un autre tableau
avec les champs suivants
idclient provenant du tableau Client
montant
date
0
alladin90 Messages postés 91 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 7 août 2016
22 oct. 2013 à 15:19
merci de vos suggestions
Moi je voulais pas compliquer ma petite application avec plusieurs tableaux et relations et ensuite une complexité des codes.
Ce que je cherche:
Des textboxes qui comportene: nom- prenom- age- et mème date avec une combobox ou je peut totaliser les versements qui se faient par étape.
Pour l'enregistrement et l'édition (update) des textboxes, je n'ai aucun probléme.
Mon probléme se pose au niveau de la combobox. je veux savoir comment pouvoir enregistrer la combobox_items ainsi que la possibilité d'ajouter d'autres item dans (bouton_update) car comme je viens de dire les versements se faient par étape.
Ou bien je cherche un autre objet qui peut rassembler les versements tout en pouvant les calculer.
J'ai choisi la combobox puisque je sais la maniere de calculer les items si ils sont affichés verticalement.
Mon français peut avoir des érreurs, veuillez m'éxcuser
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
22 oct. 2013 à 15:43
Moi je voulais pas compliquer ma petite application avec plusieurs tableaux et relations et ensuite une complexité des codes.

ce n'est compliqué et c'est plus juste pas besoin de jongler et de spliter
avec le combo
0
copperncius Messages postés 16 Date d'inscription vendredi 13 décembre 2013 Statut Membre Dernière intervention 30 août 2014
14 déc. 2013 à 17:34
la question n'est pas tres claire
mais tu peux sauvegarder plusiers elements dans un champ de ta table en les séparrant avec un ";", a la récuperant executer un split avec le delimiteur ";" qui te rends tout les variables dans un array
0
Rejoignez-nous