Probleme insertion données

Résolu
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014 - 13 juin 2010 à 18:46
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 - 16 juin 2010 à 01:48
bonjour, je travaille sur un projet avec une base access 2007 mon problème est que le message afficher est insertion avec succès alors qu'on ouvrant la base je ne trouve aucun enregistrement le premier champ dans ma table est un auto incrément,voici le code :

Public Class personne

Public Sub ajouter()
Dim contact_name As String
Dim name As String
Dim adress As String
Dim product As String
Dim ref As String
Dim country As String
Dim phone As Integer
Dim mobile As Integer
Dim payment As String
Dim contact_title As String
Dim city As String
Dim box As String
Dim mail As String
Dim fax As Integer
Dim business As String
Dim logo As String
Dim cnx As New OleDbConnection
cnx.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\iheb\Desktop\WindowsApplication1\WindowsApplication1\bin\Debug\Thamer database.accdb;"

Try
cnx.Open()
name = Client.TextBox1.Text
contact_name = Client.TextBox2.Text
adress = Client.TextBox3.Text
product = Client.TextBox4.Text
ref = Client.TextBox5.Text
country = Client.ComboBox1.Text
phone = Client.TextBox7.Text
mobile = Client.TextBox8.Text
payment = Client.TextBox9.Text
contact_title = Client.TextBox10.Text
city = Client.TextBox11.Text
box = Client.TextBox12.Text
mail = Client.TextBox13.Text
fax = Client.TextBox14.Text
business = Client.PictureBox1.ImageLocation
logo = Client.PictureBox2.ImageLocation
Dim requete As String = "insert into Customer values('" & Nothing & "','" & Client.TextBox1.Text & "','" & Client.TextBox2.Text & "','" & Client.TextBox10.Text & "','" & Client.TextBox3.Text & "','" & Client.TextBox11.Text & "','" & Client.TextBox12.Text & "','" & Client.TextBox4.Text & "','" & Client.TextBox5.Text & "','" & Client.ComboBox1.Text & "','" & Client.TextBox7.Text & "','" & Client.TextBox8.Text & "','" & Client.TextBox14.Text & "','" & Client.TextBox9.Text & "','" & Client.TextBox13.Text & "','" & Client.TextBox15.Text & "','" & Client.PictureBox1.ImageLocation & "','" & Client.PictureBox2.ImageLocation & "' )"
Dim command = New OleDbCommand(requete, cnx)
MsgBox("contact ajouté avec succès", MsgBoxStyle.Information, "Ajout")
Catch ex As Exception
cnx.Close()
MsgBox(ex.Message, MsgBoxStyle.Critical, "exception")
Exit Sub
End Try
End Sub
End Class

merci bien pour votre aide

20 réponses

joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
14 juin 2010 à 00:10
merci pour votre aide tous, d'habitude je programme avec php c'est pour ça que je me suis un peu trompé car en php avec mysql on peut insérer les données sans spécifier les champs,voila le code qui marche:

Public Class personne

    Public Sub ajouter()
        Dim cnx As New OleDbConnection
        cnx.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\iheb\Desktop\WindowsApplication1\WindowsApplication1\bin\Debug\Thamer database.accdb;"

        Try
            cnx.Open()
            'Dim requete As String = "insert into Customer values('" & Nothing & "','" & Client.TextBox1.Text & "','" & Client.TextBox2.Text & "','" & Client.TextBox10.Text & "','" & Client.TextBox3.Text & "','" & Client.TextBox11.Text & "','" & Client.TextBox12.Text & "','" & Client.TextBox4.Text & "','" & Client.TextBox5.Text & "','" & Client.ComboBox1.Text & "','" & Client.TextBox7.Text & "','" & Client.TextBox8.Text & "','" & Client.TextBox14.Text & "','" & Client.TextBox9.Text & "','" & Client.TextBox13.Text & "','" & Client.TextBox15.Text & "','" & Client.PictureBox1.ImageLocation & "','" & Client.PictureBox2.ImageLocation & "' )"
            MsgBox(Client.TextBox1.Text)
            'Dim requete As String = "insert into customer values ('" & Client.TextBox6.Text & "','" & Client.TextBox2.Text & "')"
            Dim requete As String = "INSERT INTO Customer([Customer Name], [Contact Name], [Contact Title], Address, City, [PO Box], Products, [Customer Ref], Country, [Phone Number], [Mobile Phone], [Fax Number], [Payment Terms], [Email Address], Notes, [Customer Buisness Cards], [Cutomer Logo]) VALUES ('" & Client.TextBox1.Text & "', '" & Client.TextBox2.Text & "', '" & Client.TextBox10.Text & "', '" & Client.TextBox3.Text & "', '" & Client.TextBox11.Text & "', '" & Client.TextBox12.Text & "', '" & Client.TextBox4.Text & "', '" & Client.TextBox5.Text & "', '" & Client.ComboBox1.Text & "', '" & Client.TextBox7.Text & "', '" & Client.TextBox8.Text & "', '" & Client.TextBox14.Text & "', '" & Client.TextBox9.Text & "', '" & Client.TextBox13.Text & "', '" & Client.TextBox15.Text & "', '" & Client.PictureBox1.ImageLocation & "', '" & Client.PictureBox2.ImageLocation & "')"

            Dim cmd As OleDbCommand = New OleDbCommand(requete, cnx)
            If cmd.ExecuteNonQuery() > 0 Then
                MessageBox.Show("Contact ajouté", "Ajout", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Contact non ajouté", "Ajout", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If
        Catch ex As Exception
            If cnx.State <> ConnectionState.Closed Then cnx.Close()
            MessageBox.Show("Echec :" & ex.Message, "Ajout", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try
    End Sub
End Class

merci encore une fois
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
13 juin 2010 à 20:04
1\La syntaxe de ta requête SQL est mauvaise

2\ insert into Customer values('" & Nothing & "', <= Si ton ID est auto incrémenté alors ce code ne sert à rien, tu ne rempli pas ce champ.


3\Puis à quoi te servent toutes ces variables, si tu ne les utilises pas..?

4\Tu n'execute pas ta commande, cela ne risque pas de fonctionner.

Mon avis ? Tu tape du code à l'aveuglette sans même essayer de comprendre ce que tu fais, ni comment le code fonctionne.

Voila un exemple de syntaxe correcte :

Dim cnx As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data source=le chemin de la base\base.accdb;")
        Try
            cnx.Open()
            Dim requete As String = "INSERT INTO (LaTable Nom, Prenom, Age, Adresse) VALUES ('" & _
                                      txt_Nom.Text & "', " & _
                                      txt_Prenom.Text & "', '" & _
                                      txt_Age.Text & "', '" & _
                                      txt_Adresse.Text & "')"

            Dim cmd As OleDbCommand = New OleDbCommand(requete, cnx)
            If cmd.ExecuteNonQuery() > 0 Then
                MessageBox.Show("Contact ajouté", "Ajout", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Contact non ajouté", "Ajout", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If
        Catch ex As Exception
            If cnx.State <> ConnectionState.Closed Then cnx.Close()
            MessageBox.Show("Echec :" & ex.Message, "Ajout", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try


A toi de l'adapter à ton projet, si tu rencontre des soucis n'hésite pas à nous en faire part.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
13 juin 2010 à 20:05
Arf, un bug dans ma syntaxe SQL, je recommence :

Dim requete As String = "INSERT INTO (LaTable Nom, Prenom, Age, Adresse) VALUES ('" & _
                                      txt_Nom.Text & "', '" & _
                                      txt_Prenom.Text & "', '" & _
                                      txt_Age.Text & "', '" & _
                                      txt_Adresse.Text & "')"


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
13 juin 2010 à 20:49
merci bien pour ton aide,je teste le code et je te donnerai le résultat
0

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

Posez votre question
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
13 juin 2010 à 21:24
j'ai mis ce code comme vous m'avez déjà dis:

Dim requete As String = "INSERT INTO Customer (Customer Name, Contact Name, Contact Title, Address, City, PO Box, Products, Customer Ref, Country, Phone Number, Mobile Phone, Fax Number, Payment Terms, Email Address, Notes, Customer Buisness Cards, Cutomer Logo) VALUES ('" & _
Client.TextBox1.Text & "', '" & _
Client.TextBox2.Text & "', '" & _
Client.TextBox10.Text & "', '" & _
Client.TextBox3.Text & "', '" & _
Client.TextBox11.Text & "', '" & _
Client.TextBox12.Text & "', '" & _
Client.TextBox4.Text & "', '" & _
Client.TextBox5.Text & "', '" & _
Client.ComboBox1.Text & "', '" & _
Client.TextBox7.Text & "', '" & _
Client.TextBox8.Text & "', '" & _
Client.TextBox14.Text & "', '" & _
Client.TextBox9.Text & "', '" & _
Client.TextBox13.Text & "', '" & _
Client.TextBox15.Text & "', '" & _
Client.PictureBox1.ImageLocation & "', '" & _
Client.PictureBox2.ImageLocation & "')"

Dim cmd As OleDbCommand = New OleDbCommand(requete, cnx)
If cmd.ExecuteNonQuery() > 0 Then
MessageBox.Show("Contact ajouté", "Ajout", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show("Contact non ajouté", "Ajout", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If

il m'affiche message erreur ou niveau de syntaxe INSERT INTO
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
13 juin 2010 à 21:30
En effet, mais les noms de tes colonnes de table comportent des espaces ?

C'est pas top ca !

A chaque fois que tu devras saisir le nom de tes colonnes dans une requêtes tu devras les entourés de [].

Je te conseil donc de revoir ta table au plus vite, si ce n'est pas possible alors...

"INSERT INTO Customer ([Customer Name], [Contact Name], [Contact Title]...

Bon courage !

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
13 juin 2010 à 22:31
merci cher ami,j'ai changé les noms des champs de ma table par exemple Customer_Name mais en effectua,t l'insertion cette fois il m'affiche ce message: the INSERT INTO statments contains the following field name: 'Customer_Name' c'est à dire que pour lui ce nom de champ n'est pas juste alors qu'il l'ai,dsl si je te dérange encore
0
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
13 juin 2010 à 22:47
g mm fait des changements comme ça
Dim requete As String = "INSERT INTO Customer VALUES (" & _
                                      Client.TextBox16.Text & "','" & _
                                      Client.TextBox1.Text & "', '" & _
                                      Client.TextBox2.Text & "', '" & _
                                      Client.TextBox10.Text & "', '" & _
                                      Client.TextBox3.Text & "', '" & _
                                      Client.TextBox11.Text & "', '" & _
                                      Client.TextBox12.Text & "', '" & _
                                      Client.TextBox4.Text & "', '" & _
                                      Client.TextBox5.Text & "', '" & _
                                      Client.ComboBox1.Text & "', '" & _
                                      Client.TextBox7.Text & "', '" & _
                                      Client.TextBox8.Text & "', '" & _
                                      Client.TextBox14.Text & "', '" & _
                                      Client.TextBox9.Text & "', '" & _
                                      Client.TextBox13.Text & "', '" & _
                                      Client.TextBox15.Text & "', '" & _
                                      Client.TextBox16.Text & "', '" & _
                                      Client.TextBox16.Text & "')"

le message était echec syntax error (missing operator)in query expression
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
13 juin 2010 à 22:47
En effet il doit y avoir une erreur quelque part... Mais tu te rapproche du but.

Tu peux poster ton code actuel que je vois la requête ?


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
13 juin 2010 à 22:59
Public Class personne

    Public Sub ajouter()
        Dim cnx As New OleDbConnection
        cnx.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\iheb\Desktop\Database1.accdb;"

        Try
            cnx.Open()
            'Dim requete As String = "insert into Customer values('" & Nothing & "','" & Client.TextBox1.Text & "','" & Client.TextBox2.Text & "','" & Client.TextBox10.Text & "','" & Client.TextBox3.Text & "','" & Client.TextBox11.Text & "','" & Client.TextBox12.Text & "','" & Client.TextBox4.Text & "','" & Client.TextBox5.Text & "','" & Client.ComboBox1.Text & "','" & Client.TextBox7.Text & "','" & Client.TextBox8.Text & "','" & Client.TextBox14.Text & "','" & Client.TextBox9.Text & "','" & Client.TextBox13.Text & "','" & Client.TextBox15.Text & "','" & Client.PictureBox1.ImageLocation & "','" & Client.PictureBox2.ImageLocation & "' )"
            MsgBox(Client.TextBox1.Text)
            'Dim requete As String = "insert into customer values ('" & Client.TextBox6.Text & "','" & Client.TextBox2.Text & "')"
            Dim requete As String = "INSERT INTO Customer VALUES ('" & Client.TextBox16.Text & "','" & Client.TextBox1.Text & "', '" & Client.TextBox2.Text & "', '" & Client.TextBox10.Text & "', '" & Client.TextBox3.Text & "', '" & Client.TextBox11.Text & "', '" & Client.TextBox12.Text & "', '" & Client.TextBox4.Text & "', '" & Client.TextBox5.Text & "', '" & Client.ComboBox1.Text & "', '" & Client.TextBox7.Text & "', '" & Client.TextBox8.Text & "', '" & Client.TextBox14.Text & "', '" & Client.TextBox9.Text & "', '" &  Client.TextBox13.Text & "', '" & Client.TextBox15.Text & "', '" & Client.TextBox16.Text & "', '" & Client.TextBox16.Text & "')"

            Dim cmd As OleDbCommand = New OleDbCommand(requete, cnx)
            If cmd.ExecuteNonQuery() > 0 Then
                MessageBox.Show("Contact ajouté", "Ajout", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Contact non ajouté", "Ajout", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If
        Catch ex As Exception
            If cnx.State <> ConnectionState.Closed Then cnx.Close()
            MessageBox.Show("Echec :" & ex.Message, "Ajout", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try
    End Sub
End Class
0
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
13 juin 2010 à 23:06
le champ texte Client.TextBox16.Text est un champ vide qui a comme propriété visible=false c'est à dire un champ vide pour l'utilisé dans le champ auto incrément, le message qui s'affiche maintenant est "number of query values and destination fileds are not the same" c'est à dire que le nombre de champs de saisies et celui de la table n'est pas le même alors que c'est pas vrai g 18 champs de saisie et 18 champs dans ma table customer
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
13 juin 2010 à 23:08
Bah, c'est normale, t'as viré le nom des colonnes !

Comment veux-tu qu'il sache à quoi correspond les valeur de tes te TextBox, il va pas le deviner...

Reprend la requête plus haut

Dim requete As String = "INSERT INTO Customer (Customer Name, Contact Name,

Et modifie simplement le nom de tes champs : Customer Name en Customer_Name

Personnellement, ce n'est pas une question d'expérience ou d'apprentissage de code, c'est une question de logique, je te l'ai dis plus haut, essaye de comprendre ce que tu écris sinon t'ira pas loin et tu seras obligé de poster un message sur le forum a chaque ligne de code que tu voudras taper.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
13 juin 2010 à 23:18
le champ texte Client.TextBox16.Text est un champ vide qui a comme propriété visible=false c'est à dire un champ vide pour l'utilisé dans le champ auto incrément, le message qui s'affiche maintenant est "number of query values and destination fileds are not the same" c'est à dire que le nombre de champs de saisies et celui de la table n'est pas le même alors que c'est pas vrai g 18 champs de saisie et 18 champs dans ma table customer


Oulala oulala oulala... Qu'est ce que c'est que ca..?

L'auto incrémentation se fait au sein de ta base et non dans ton code, il suffit de définir ta clé primaire, de mettre son Type en Int et de définir la propriété AutoIncrement sur True.

En suite, tu fais ta requête insert comme je te l'ai montré sans préciser de champs ID, et ca roule tout cours, pas besoin de champs invisible et je ne sais quels autres trucs...

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 juin 2010 à 23:58
Dim requete As String = "INSERT INTO Customer VALUES (" & _
                                      Client.TextBox16.Text & "','" & _
Il manque un ' avant ce premier champ
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
14 juin 2010 à 00:34
Oui, comme je te l'ai dis plus haut quand les champs de ta table on un espace il faut les mettre entre crochets.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
15 juin 2010 à 18:50
ICONIC FIGURE
tu peux aussi le faire de manière simple pour l'insertion en utilisant ce code:
 Try
                Me.Validate()
                Me.Nom_base_de_tableBindingSource.EndEdit()
                Me.Nom_base_de_tableTableAdapter.Update(Me.Nom_base_de_donnéeDataSet.Nom_base_de_table)
                MessageBox.Show("Enregistrement Réussi!", "Réussite", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Nom_base_de_tableBindingNavigator.Enabled = True

            Catch ex As Exception
                MessageBox.Show("Enregistrement impossible, cette personne existe déja", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Me.Nom_base_de_tableBindingNavigator.Enabled = False
            End Try
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
15 juin 2010 à 23:56
tu peux aussi le faire de manière simple pour l'insertion en utilisant ce code: 


Bien entendu NSUADI, mais lui as-tu expliqué avant qu'il fallait créer un DataSet Fortement typé, qu'il fallait créer aussi des TableAdapter via des requêtes SQL dans ce DataSet et par la suite seulement lié ses contrôles aux données via leur propriété DataSource ? Il me semble que non, donc ton code ne fait qu'induire les gens en erreur.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
16 juin 2010 à 01:04
ICONIC FIGURE
Mayzz>si il utilise Vb.net,il n'aura qu'à "ajouter une nouvelle source de donnée"(indiquez sa base de données) et la configuration du dataset et autre se feront automatiquement sans trop de difficultés...
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
16 juin 2010 à 01:28
si il utilise Vb.net,il n'aura qu'à "ajouter une nouvelle source de donnée"(indiquez sa base de données) et la configuration du dataset et autre se feront automatiquement sans trop de difficultés...


Pour ceux qui en ont l'habitude, biensur que c'est simple de créer un DataSet mais pour un débutant tout ca c'est du charabia, lier les contrôle au données, comprendre le concept des DataSet et DataTable, des BindingSources et autres TableAdapter des DataSources et DataBinding, il m'a fallut 50 pages de tuto pour pouvoir expliquer comment utiliser les outils de Visual studio pour créer une "Simple" application de données alors je doute qu'un débutant comprenne le principe en 4 lignes de code vb qui ne valent rien sans explications visuelles.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
16 juin 2010 à 01:48
ICONIC FIGURE
c'est vrai!!
j'avais pas fait attention sur la catégorie...
0
Rejoignez-nous