Erreur de syntaxe INSERT INTO

thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017 - 2 déc. 2011 à 13:44
thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017 - 15 déc. 2011 à 16:28
Bonjour,

J'ai une erreur au niveau du passage de la chaine de la requete SQL mais je ne vois pas trop, si quelqu'un à une idée ou un tutorial ?

    Public Sub InsertRow(ByVal insertSQL As String)
        MessageBox.Show(insertSQL)
        Using connection As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & createChemin())
            Dim command As New OleDb.OleDbCommand(insertSQL)
            command.Connection = connection
            Try
                connection.Open()
                command.ExecuteNonQuery()
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
        End Using
    End Sub




    Public Function insertUSER(ByVal username As String, ByVal mdp As String, ByVal quest As String, ByVal rep As String) As String
        Return "Insert into (`login`,`password`,`question`,`reponse`) values (" & username & "," & mdp & "," & quest & "," & rep & ")"
    End Function

11 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
2 déc. 2011 à 14:36
Bonjour,

Il faut que tu donnes le nom de la table dans laquelle tu souhaites insérer ces données :
INSERT INTO TableUtilisateur ...
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
2 déc. 2011 à 15:38
Salut

De pkus, il faut respecter les normes de syntaxe SQL :
Les noms des champs( login, password ...) n'ont pas besoin d'encadrement par '
Eventuellement, un encadrement par [ et ] si leur orthographe comporte des espaces ou des caractères autres que US.
En revanche, les données, elles, doivent être encadrées par des '
Ce qui donnerait
Return "Insert into maTable" & _
       "(login, password, question, reponse) " & _
       "values ('" & username & "','" & _
                     mdp & "','" & _
                     quest & "','" & _
                     rep & "')"

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
2 déc. 2011 à 15:39
Précision
En revanche, les données, elles, doivent être encadrées par des '
Les données de type Texte
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
2 déc. 2011 à 15:48
Oui en effet, j'ai fait comme le compilateur, je me suis arrêté à la première erreur.
0

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

Posez votre question
thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017
2 déc. 2011 à 16:53
rebonjour, merci pour votre aide mais même avec de simple cote cela marque toujours une erreur de syntaxe. Je me demande si par hazard ce ne serait pas une erreur dans ma fonction de création de tables.

    Public Sub createBase()
        Dim tblu As New ADOX.Table()
        Dim keyu As New ADOX.Key()
        'déclaration BASE
        Dim db As New ADOX.Catalog
        'création BASE
        db.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & createChemin())
        tblu.Name = "USERS"
        tblu.Columns.Append("login", ADOX.DataTypeEnum.adWChar, 15)
        tblu.Columns.Append("password", ADOX.DataTypeEnum.adWChar, 8)
        tblu.Columns.Append("question", ADOX.DataTypeEnum.adWChar, 30)
        tblu.Columns.Append("reponse", ADOX.DataTypeEnum.adWChar, 10)
        db.Tables.Append(tblu)
        keyu.Name = "cleprimaireu"
        keyu.Type = ADOX.KeyTypeEnum.adKeyPrimary
        keyu.RelatedTable = "USERS"
        keyu.Columns.Append("login")
        tblu.Keys.Append(keyu)

    End Sub
0
thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017
2 déc. 2011 à 17:35
J'ai voulu tenter autre chose :

    Public Sub InsertRow(ByVal insertSQL As String)
        MessageBox.Show(insertSQL)
        Dim con As ADODB.Connection
        Dim rs As ADODB.Recordset

        con = New ADODB.Connection
        con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & createChemin()
        con.Open()
        rs = con.Execute(insertSQL)
        rs.Fields.Refresh()
        rs = Nothing
        con.Close()
        con = Nothing
    End Sub


Mais toujours une erreur de syntaxe au niveau de rs.Fiels.Refresh() me precisant de regarder le propriété ErrorCode de l'exception
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
2 déc. 2011 à 21:45
Reprends tes manuels
Une commande Execute n'a nullement besoin de RecordSet

+
Après un .Open, il faut absolument vérifier l'état de la connexion avant de poursuivre, sinon, tu vas avoir des erreurs sur les lignes suivantes sans même soupçonner la connexion.
0
thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017
2 déc. 2011 à 22:10
voici se que j'ai après quelques recherches, le code se trouve dans un module

    Dim con As New OleDb.OleDbConnection

    Public Sub insertUser()
        con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & createChemin()
        Dim cmd As OleDb.OleDbCommand
        Dim sqlinsert As String

        sqlinsert = "INSERT INTO USERS (login, password, question, reponse) VALUES (@vlogin, @vpassword, @vquestion, @vreponse)"
        cmd = New OleDb.OleDbCommand(sqlinsert, con)
        cmd.Parameters.AddWithValue("vlogin", inscription.TBlogin.Text)
        cmd.Parameters.AddWithValue("vpassword", inscription.TBmdp.Text)
        cmd.Parameters.AddWithValue("vquestion", inscription.CBquest.Text)
        cmd.Parameters.AddWithValue("vreponse", inscription.TBrep.Text)
        cmd.Connection.Open()
        cmd.ExecuteReader()
        cmd.Connection.Close()
    End Sub
0
DevLama Messages postés 356 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 18 novembre 2021 10
5 déc. 2011 à 18:43
Bon je penses que tu dois verifier le nom de la Table,puis Ta connexion si tu utilise le vb 6:
la connexion:
dim Con As New Connection
dim Rec As New Recordset
dim SQL As New String
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & App.path & "\Nom_dela_Bdd.Accdb"
Rec.CursorLOcation=adUseClient
Rec.Open SQL,Con,adOPenDynamic,adLockOptimistic,adCmdText

'********Pour Inserer ********************
Insert Into Table(Champs1,Champs2) Value ('" & text1.text & "','" & text2.text & "')"
Con.Close
0
DevLama Messages postés 356 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 18 novembre 2021 10
5 déc. 2011 à 18:45
salut thomasaurelien
j'ai vu ton intervation mais un ADOX permet la manupilation de la Table d'une Bdd,pour Manupiler les données utilse ADO ce Mieux
0
thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017
15 déc. 2011 à 16:28
Merci a vous pour votre aide j'y suis arrivé finalement. J'ai tous repris depuis le début tranquillement.
Voici le code si cela peut aider quelqu'un.

    Public Function insert_user(ByVal login As String, ByVal mdp As String, ByVal question As String, ByVal rep As String) As Boolean

        connection()
        Try
            'Indiquer le type de commande
            Cmd.CommandType = CommandType.Text
            Cmd.CommandText = "INSERT INTO USERS (LOGIN, MDP, QUESTION, REPONSE) VALUES ('" & login & "','" & mdp & "','" & question & "','" & rep & "')"
            'on exécute la commande
            Cmd.ExecuteNonQuery()
            'Fermer la connexion
            Cnx.Close()
            Return True
        Catch ex As Exception
            MsgBox("Erreur dans l'insertion de d'un USERS" & vbCrLf & ex.Message, , "Erreur")
            Return False
        End Try

    End Function
0