Probleme insertion données

[Résolu]
Signaler
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014
-
Messages postés
540
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
1 février 2013
-
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

Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

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
Messages postés
2813
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
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.
Messages postés
2813
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
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.
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

merci bien pour ton aide,je teste le code et je te donnerai le résultat
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

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
Messages postés
2813
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
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.
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

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
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

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
Messages postés
2813
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
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.
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

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
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

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
Messages postés
2813
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
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.
Messages postés
2813
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Dim requete As String = "INSERT INTO Customer VALUES (" & _
                                      Client.TextBox16.Text & "','" & _
Il manque un ' avant ce premier champ
Messages postés
2813
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
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.
Messages postés
540
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
1 février 2013
2
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
Messages postés
2813
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
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.
Messages postés
540
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
1 février 2013
2
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...
Messages postés
2813
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
38
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.
Messages postés
540
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
1 février 2013
2
ICONIC FIGURE
c'est vrai!!
j'avais pas fait attention sur la catégorie...