2008-10-10 4 views
3

J'essaye de créer un jeu d'enregistrements dans Access VBA qui me montrera tous les enregistrements dans une table liée à l'enregistrement actuel d'un formulaire. Mon code actuel ressemble à ceci:Création d'un jeu d'enregistrements dans VBA avec l'instruction SQL

Private Sub Form_Load() 

    Dim rst As Recordset 

    Set rst = CurrentDb.OpenRecordset("Select [ID], [Ln] From [Order Detail] Where ((([Order Detail].[ID]) = [Forms]![Order Data Entry Header]![ID]))") 

    rst.MoveLast 
    Forms![Order Data Entry Header].LineNum = rst![Ln] 

End Sub 

que je fais cela pour que lors de l'ajout de nouveaux enregistrements peuvent être numérotés de manière séquentielle après le nombre le plus élevé. Quand je cours le formulaire il obtient "Erreur d'exécution: '3061' Trop peu de paramètres. sur la première ligne.

Toute aide serait appréciée.

Répondre

7

Le problème est que la chaîne que vous voyez là est exactement ce qui est transmis au pilote.

Vous devez « construire » la chaîne, comme ceci:

Set rst = CurrentDb.OpenRecordset("Select [ID], [Ln] From [Order Detail] Where ((([Order Detail].[ID]) = " & [Forms]![Order Data Entry Header]![ID] & "))") 

Watch pour vous assurer que [Formulaires] [Ordre tête de saisie de données] [ID] est contenu en toute sécurité, puisque vous êtes! construire une instruction SQL.

+1

En d'autres termes, vous devez résoudre toutes les références aux objets Access avant de transmettre le code SQL à la méthode OpenRecordset. –

Questions connexes