Rechercher : dans
Par :

[Access] Problème de requête SQL

Dernière réponse le 18 aoû 2008 à 15:54:10 LiMpi, le 14 aoû 2008 à 14:10:16 
 Signaler ce message aux modérateurs

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 :]

Meilleures réponses pour « [Access] Problème de requête SQL » dans :
SQL - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
SQL - Sous-requêtes VoirExpression des sous-requêtes Effectuer une sous-requête consiste à effectuer une requête à l'intérieur d'une autre, ou en d'autres termes d'utiliser une requête afin d'en réaliser une autre (on entend parfois le terme de requêtes en...
Exécution de requêtes avec JDBC VoirExécution d'une requête SQL Pour exécuter une requête SQL, il s'agit dans un premier temps de créer un objet Statement, pouvant être obtenu à partir de l'objet Connection. Un objet ResultSet permettra de récupérer les données en provenance de...

1

Nixial, le 14 aoû 2008 à 14:22:25
  • +1

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 !

Répondre à Nixial

2

LiMpi, le 14 aoû 2008 à 15:06: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

Répondre à LiMpi

3

Nixial, le 14 aoû 2008 à 15:16:32

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 !

Répondre à Nixial

4

LiMpi, le 14 aoû 2008 à 15:22:03

:(

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 ?

Répondre à LiMpi

5

Nixial, le 14 aoû 2008 à 15:28:55

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 .

Répondre à Nixial

6

LiMpi, le 14 aoû 2008 à 15:41:47

...

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.

Répondre à LiMpi

7

Nixial, le 14 aoû 2008 à 15:44:25

Bon ok tant mieux, bonne chance pour la suite !

Répondre à Nixial

8

LiMpi, le 14 aoû 2008 à 15:47:50

Merci de ton aide :)

Mais mon problème est pas résolu, ca marche toujours pas :p

Répondre à LiMpi

9

LiMpi, le 15 aoû 2008 à 23:21:05

Up :(

Répondre à LiMpi

10

LiMpi, le 18 aoû 2008 à 09:08:57

...

Répondre à LiMpi

11

Nixial, le 18 aoû 2008 à 09:26:53
  • +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 ?

Répondre à Nixial

12

 LiMpi, le 18 aoû 2008 à 15:54:10

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)

Répondre à LiMpi