web-dev-qa-db-fra.com

Comment insérer des valeurs dans la table de base de données à l'aide de VBA en accès MS

J'ai commencé à utiliser l'accès récemment. J'essaie d'insérer quelques lignes dans la base de données; Cependant, je suis bloqué car il y a une erreur: 

Trop peu de paramètres.

J'ai un test de table avec une seule colonne nommée start_date. Je veux insérer toutes les dates entre deux dates, par exemple, si je considère le 1/7/2014 au 3/7/2014, j'ai besoin de dates comme le 1/7/2014,2/7/2014,3/7/2014 dans mon tableau, mais le problème pour insérer le code que j'ai utilisé est le suivant 

Private Sub createRec_Click()
Dim StrSQL As String
Dim InDate As Date
Dim DatDiff As Integer
Dim db As database
InDate=Me.FromDateTxt
'here I have used a code to find out the difference between two dates that i've not written
For i = 1 To DatDiff
StrSQL = "INSERT INTO Test (Start_Date) VALUES ('" & InDate & "' );"
StrSQL = StrSQL & "SELECT 'Test'"
db.Execute StrSQL
db.close
i=i+1
next i
End Sub

Mon code jette une erreur dans la ligne Db.Execuite StrSQL Car trop peu de paramètres . J'espère que quelqu'un pourra m'aider avec ce problème . Merci à l'avance

5
shravya

puisque vous avez mentionné que vous êtes un nouvel utilisateur, il fallait que je vous invite à supprimer les erreurs du code (la boucle incomplète et l'instruction SQL). Sinon, vous aurez sûrement besoin de la boucle for pour insérer des dates dans une certaine plage.

Utilisez maintenant le code ci-dessous pour insérer les valeurs de date dans votre tableau. J'ai testé le code et ça marche. Vous pouvez l'essayer aussi. Après cela, ajoutez votre boucle for en fonction de votre scénario.

Dim StrSQL As String
Dim InDate As Date
Dim DatDiff As Integer

InDate = Me.FromDateTxt

StrSQL = "INSERT INTO Test (Start_Date) VALUES ('" & InDate & "' );"

DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
DoCmd.SetWarnings True
10
user3267567

Vous ne pouvez pas exécuter deux instructions SQL en une seule comme vous le faites.

Vous ne pouvez pas "exécuter" une requête de sélection.

db est un objet et vous ne l'avez défini sur rien: (par exemple, set db = currentdb)

Dans VBA, les types entiers peuvent contenir jusqu'à 32 767 - je serais tenté d'utiliser Long.

Vous voudrez peut-être préciser un peu la date que vous insérez:

INSERT INTO Test (Start_Date) VALUES ('#" & format(InDate, "mm/dd/yyyy") & "#' );"
1
Lord Peter
  1. Supprimez cette ligne de code: For i = 1 To DatDiff. Une boucle For doit avoir le mot NEXT
  2. En outre, supprimez cette ligne de code: StrSQL = StrSQL & "SELECT 'Test'" car cela fait en sorte que Access regarde votre instruction SQL finale comme ceci; INSERT INTO Test (Start_Date) VALUES ('"& InDate &"'); SELECT 'Test' Notez que le point-virgule au milieu de l'instruction SQL (doit toujours être à la fin. Ce n'est en fait pas obligatoire. peut aussi l'omettre). de plus, il n'y a pas d'espace entre le point-virgule et la clé Word SELECT

en résumé: Supprimez ces deux lignes de code ci-dessus et votre instruction insert fonctionnera correctement. Vous pouvez le modifier ultérieurement pour l'adapter à vos besoins spécifiques. Et au fait, parfois, vous devez joindre des dates avec des signes de livres comme #

0
user3267567