2009-10-06 8 views
2

Ainsi, j'apprends Access 2007, Visual Basic et SQL en même temps. Pas idéal.Une requête SQL simple dans Access échoue avec une erreur de point virgule manquante

J'ai ce code attaché à un bouton dans une interface standard générée par un assistant. J'essaye de copier une ligne de tblA à tblB. Chaque fois que le code est exécuté, j'obtiens le message "Erreur d'exécution '3137' Point-virgule manquant (;) à la fin de l'instruction SQL."

Je suppose qu'il s'attend à ce que l'instruction SQL se termine plus tôt, avant le WHERE? Mais sans le WHERE, comment est-ce que j'attacherais l'addition à un ID de ligne particulier?

Private Sub buttonAdd_Click() 
Dim strSQL As String 
strSQL = "INSERT INTO [tblB]" & _ 
    "VALUES (ID, [Name], [Some value], [Some other value])" & _ 
    "SELECT * FROM tblA" & _ 
    "WHERE ID = '" & Me.ID & "' " & _ 
    ";" 

DoCmd.RunSQL strSQL 
End Sub 

Répondre

3

La syntaxe est incorrecte, vous devez supprimer le mot clé "VALUES".
Cela suppose que ID, [Nom], [Une certaine valeur] et [Une autre valeur] sont des noms de colonne de tblB (une certaine hésitation de ma part avec les deux derniers noms ayant "valeur").
Les VALEURS() syntaxe SQL est utilisée pour fournir des valeurs immédiates, mais puisque vous obtenez les valeurs de tblA, la requête devrait ressembler à:

strSQL = "INSERT INTO [tblB] " & _ 
    "(ID, [Name], [Some value], [Some other value]) " & _ 
    "SELECT * FROM tblA " & _ 
    "WHERE ID = '" & Me.ID & "' " & _ 
    ";" 

Modifier: J'ai aussi ajouté des espaces entre les jetons. Bonne prise Nick D, merci de l'avoir remarqué!

0

mjv est correct. Vous devez supprimer le mot-clé VALUES et vous devez mettre des espaces entre les mots-clés, à savoir:

"SELECT * FROM tblA" & _ 
"WHERE ID = '" & Me.ID & "' " & _ 

ci-dessus sera rejoint comme "...FROM tblAWHERE ID..."

+0

Bonne prise, Nick, j'ai raté ce « détail ». Travail en équipe! – mjv

+0

le travail d'équipe peut faire des merveilles ;-) –

2

Vous avez mis les noms de champs dans la clause de valeurs et non après la table nom, et il manque un espace entre tbla et where. La clause de valeur suivie par select et l'espace manquant peuvent provoquer le message d'erreur par eux-mêmes.

strSQL = "INSERT INTO [tblB] (ID, [Name], [Some value], [Some other value])" & _ 
    "SELECT * FROM tblA " & _ 
    "WHERE ID = '" & Me.ID & "'" 

Le point-virgule à la fin est non exigée de nos jours. Vous en avez seulement besoin pour séparer les requêtes si vous exécutez plus d'une requête à la fois.

En outre, si le champ d'identification est numérique, vous ne devriez pas avoir apostrophes autour de la valeur:

strSQL = "INSERT INTO [tblB] (ID, [Name], [Some value], [Some other value])" & _ 
    "SELECT * FROM tblA " & _ 
    "WHERE ID = " & Me.ID 
Questions connexes