如何使用MS访问中的VBA将值插入数据库表

时间:2014-07-30 18:38:24

标签: sql vba access-vba ms-access-2010

我最近开始使用访问权限。我试图在数据库中插入几行;但是,我被困了,因为它引发了一个错误:

  

参数太少。

我有一个表测试,其中只有一列名为start_date我想插入两个日期之间的所有日期,例如,如果我考虑2014年1月7日至2014年3月7日我需要日期为1/7 / 2014,2 / 7 / 2014,3 / 7/2014在我的表中,但我插入的代码有问题如下

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

我的代码在Db.Execuite StrSQL行中抛出一个错误 因为参数太少。 希望有人可以帮我解决这个问题。 在此先感谢

3 个答案:

答案 0 :(得分:10)

因为你提到你是一个很新的访问,我不得不邀请你先删除代码中的错误(不完整的for循环和SQL语句)。否则,您肯定需要for循环在某个范围内插入日期。

现在,请使用以下代码将日期值插入表格中。我已经测试了代码并且它有效。你也可以尝试一下。之后,添加for循环以适合您的场景

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

答案 1 :(得分:1)

你不能像你一样运行两个SQL语句。

你不能执行"选择查询。

db是一个对象,你没有把它设置为任何东西:(例如set db = currentdb)

在VBA中,整数类型最多可以容纳32767 - 我很想使用Long。

您可能希望对插入日期更具体一些:

INSERT INTO Test (Start_Date) VALUES ('#" & format(InDate, "mm/dd/yyyy") & "#' );"

答案 2 :(得分:0)

  1. 删除此行代码:对于i = 1 To DatDiff。 For循环必须包含单词NEXT
  2. 此外,删除以下代码行:StrSQL = StrSQL& "选择'测试'"因为它使Access看到你的最终SQL语句; INSERT INTO Test(Start_Date)VALUES('"& InDate&"'); SELECT' Test' 注意SQL语句中间的分号(应该总是在结尾处。它不是必需的。它也可以省略它)。分号和关键字SELECT
  3. 之间没有空格

    总结: 删除上面的那两行代码,你的insert语句将正常工作。您可以稍后修改代码以满足您的特定需求。顺便说一句,有时候,你必须用#(p /)这样的磅标记括起日期