[Access] Problème de requête SQL

Résolu/Fermé
LiMpi
Messages postés
32
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
29 août 2008
- 14 août 2008 à 14:10
 LiMpi - 18 août 2008 à 15:54
Bonjour à tous :) ,

Voilà j'ai du apprendre Access et le VB sur le tas vite fait, et je me trouve maintenant confronté à un problème !

J'ai une requête SQL :

If tbl = "Accessories" Then
tbl = tblAccessories
DoCmd.RunSQL ("INSERT INTO '" & tbl & "' ID, Shortname, Hardware_category, Screen_size, Serial_Number, Marque, Model, Localisation, Hostname, Comments VALUES('', '" & Me.txtShortname & "', '" & Me.txtHardware & "', '" & Me.txtScreensize & "', '" & Me.txtSerialnumber & "', '" & Me.txtBrand & "', '" & Me.txtModel & "', '" & Me.txtLocalisation & "', '" & Me.txtHostname & "', '" & Me.txtComments & "');")
End If


Pour moi, elle est tout à fait bonne ! :p
Pourtant, j'obtiens à chaque coup cette erreur :
Runtime Error '3450'
Syntax error in query. Incomplete query clause.

J'ai essayé aussi normalement :

If tbl = "Accessories" Then
tbl = tblAccessories
DoCmd.RunSQL ("INSERT INTO '" & tbl & "' VALUES('', '" & Me.txtShortname & "', '" & Me.txtHardware & "', '" & Me.txtScreensize & "', '" & Me.txtSerialnumber & "', '" & Me.txtBrand & "', '" & Me.txtModel & "', '" & Me.txtLocalisation & "', '" & Me.txtHostname & "', '" & Me.txtComments & "');")
End If

Mais toujours le même problème.

Une idée ?

Merci;

LiMpi :]

12 réponses

Bonjour,

je ne m'y connais pas du tout en Acces, mais en SQL oui.

Je pense que ton erreur vient d'un problème de cote.

En effet tu lui mets comme code SQL : "INSERT INTO '" & tbl & "' VALUES(...

Je pense qu'il le prends comme : "INSERT INTO " et la suite il ne le voit pas à cause des cotes.

Enfin c'est une piste.

Autre piste : le point virgule à la fin, ne devrais pas être après la cote sous cette forme : "')";) ?

A voir !

Bonne chance !
1
Re toi !

Désolé j'étais parti en week end :P

Bon si ça vient de tes variables, as tu vérifié l'appel d'un variable en Acces ? Est-ce que c'est bien ' & Me.txtSerialnumber & ' ?

Avant même d'y faire appel, sont-elles créées ? contiennent-elles des informations ?
1
LiMpi
Messages postés
32
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
29 août 2008
3
14 août 2008 à 15:06
Salut :)

Ayant des notions de SQL tout comme toi, j'ai fait les mêmes réflexions.

Je ne sais pas si tu t'y connais en PHP, mais pour moi cette requête marche un peu comme la concaténation :

echo 'Salut ' . $nom . ', Ca va ?';

La requête s'arrête après le INSERT INTO, et récupère la valeure de la variable, reprend, jusqu'au prochaine arrêt, etc...


Pour le point-virgule, j'y ai aussi pensé. Mais si je le place autre part il m'attribue un belle grosse syntax error :p
0
Je pense que c'est une erreur de syntaxe pour l'insert. Si tu prends le choix de définir les champs que tu veux renseignés, il te faut des parenthèses.

Syntaxe :

INSERT INTO nom_table (Numéro Client , Nom Client , Prénom Client , Remise ) VALUES ( "160017" , "Inisan" , "Hervé" , 1 )

En gros il te manque des parenthèses pour tes champs ID, Shortname, Hardware_category ...

Test avec ça !
0

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

Posez votre question
LiMpi
Messages postés
32
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
29 août 2008
3
14 août 2008 à 15:22
:(

Toujours pas !


DoCmd.RunSQL ("INSERT INTO '" & tbl & "' ( ID, Shortname, Hardware_category, Screen_size, Serial_Number, Marque, Model, Localisation, Hostname, Comments) VALUES('', '" & Me.txtShortname & "', '" & Me.txtHardware & "', '" & Me.txtScreensize & "', '" & Me.txtSerialnumber & "', '" & Me.txtBrand & "', '" & Me.txtModel & "', '" & Me.txtLocalisation & "', '" & Me.txtHostname & "', '" & Me.txtComments & "');")

Cette requête m'indique toujours "Syntax error in query. Incomplete query clause."
C'est donc bien une erreur de syntaxe ... Mais ou ?
0
Essai de mettre des valeurs en dur au lieu des variables .

du genre :

DoCmd.RunSQL ("INSERT INTO 'personnel' ( ID, Shortname, Hardware_category, Screen_size, Serial_Number, Marque, Model, Localisation, Hostname, Comments) VALUES('test', 'shortname', 'Hardware ', 'Screensize', 'Serialnumber', 'Brand ', 'Model ', 'Localisation', 'Hostname ', 'Comments');")

Si ca fonctionne, c'est que ce sont tes variables que tu ne récupères pas ou que la syntaxe de récupération n'est pas bonne.

Si ca fonctionne pas c'est qu'il y a un problème de cote .
0
LiMpi
Messages postés
32
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
29 août 2008
3
14 août 2008 à 15:41
...

Je viens de trouver une partie l'erreur (grace a toi :) )
Mais ce n'était pas ce que tu m'avais proposé.

Cette erreur là ne se trouvait ni dans la syntaxe, ni dans les variables.
En fait, l'auto incrémentation n'est apparemment pas gérée automatiquement par Access. Dans l'Insert, si je définis un nombre fixe, la requête marche parfaitement :(

Du coup j'ai remodifié ma requête de cette façon :
DoCmd.RunSQL ("INSERT INTO '" & tbl & "' (Shortname, Hardware_category, Screen_size, Serial_Number, Marque, Model, Localisation, Hostname, Comments) VALUES('" & Me.txtShortname & "', '" & Me.txtHardware & "', '" & Me.txtScreensize & "', '" & Me.txtSerialnumber & "', '" & Me.txtBrand & "', '" & Me.txtModel & "', '" & Me.txtLocalisation & "', '" & Me.txtHostname & "', '" & Me.txtComments & "');")


Avec et sans les parenthèses qui suivent '"& tbl & "'.

Je retombe sur la même erreur. On en déduis donc que ca vient de mes variables :p

Je précise que cette requête :
DoCmd.RunSQL ("INSERT INTO tblAccessories (Shortname, Hardware_category, Screen_size, Serial_Number, Marque, Model, Localisation, Hostname, Comments) VALUES('test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test');")

Marche parfaitement.
0
Bon ok tant mieux, bonne chance pour la suite !
0
LiMpi
Messages postés
32
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
29 août 2008
3
14 août 2008 à 15:47
Merci de ton aide :)

Mais mon problème est pas résolu, ca marche toujours pas :p
0
up :(
0
Je t'excuse, parce que j'ai résolu le problème :p

Voilà la bonne requête :

DoCmd.RunSQL ("INSERT INTO tblAccessories(shortname, Hardware_category, Screen_size, Serial_Number, Marque, Model, Localisation, Hostname, Comments) VALUES('" & Me.txtShortname & "', '" & Me.txtHardware & "', '" & Me.txtScreensize & "', '" & Me.txtSerialnumber & "', '" & Me.txtBrand & "', '" & Me.txtModel & "', '" & Me.txtLocalisation & "', '" & Me.txtHostname & "', '" & Me.txtComments & "');")

Donc voilà. C'est comme tu m'avais dit en fait, mais je n'utilise plus de variable pour sélectionner la table. Enfin voilà, je sais pas si c'est ca, mais maintenant ca marche :)

Par contre j'ai un autre problème :p

Voilà ma requête d'édition :

DoCmd.RunSQL "UPDATE tblAccessories SET Shortname='" & Me.Shortname & "', Hardware_category = '" & Me.Hardware_category & "', Screen_size = '" & Me.Screen_size & "', Serial_number = '" & Me.Serial_Number & "', Marque = '" & Me.Marque & "', Model = '" & Me.Model & "', Localisation = '" & Me.Localisation & "', Hostname = '" & Me.Hostname & "', Comments = '" & Me.Comments & "' WHERE ID='" & Me![ID] & "';"

Cette fois, il m'indique que le type de donnée est mauvais :/

Merci, en tout cas ! (Je mets le sujet en résolu mais bon ... voilà :p)
0