【问题标题】:How to insert values into the database table using VBA in MS access如何在 MS 访问中使用 VBA 将值插入到数据库表中
【发布时间】:2014-09-22 13:04:48
【问题描述】:

我最近开始使用访问权限。我正在尝试在数据库中插入几行;但是,我被卡住了,因为它抛出了一个错误:

参数太少。

我有一个表测试,其中只有一列名为 start_date 我想插入两个日期之间的所有日期,例如,如果我考虑 1/7/2014 到 3/7/2014 我需要日期为 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 行中引发错误 因为参数太少。 希望有人可以帮助我解决这个问题。 提前致谢

【问题讨论】:

  • 日期是小数,Date + 1 是加一天。 DateDiff 是一个整数。
  • 请在运行前将 StrSql 的值贴出来。

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


【解决方案1】:

由于您提到您是新手,因此我不得不邀请您首先删除代码中的错误(不完整的 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

【讨论】:

    【解决方案2】:

    您不能像现在这样将两条 SQL 语句合二为一。

    您不能“执行”选择查询。

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

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

    您可能希望更具体地说明您要插入的日期:

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

    【讨论】:

      【解决方案3】:
      1. 删除这行代码:For i = 1 To DatDiff。 For 循环必须有单词 NEXT

      2. 另外,删除这行代码:StrSQL = StrSQL & "SELECT 'Test'",因为它使 Access 像这样查看您的最终 SQL 语句:

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

      注意 SQL 语句中间的分号(应该总是在末尾。顺便说一下,它不是必需的。你也可以省略它)。此外,分号和关键字 SELECT 之间没有空格

      总结: 删除上面的这两行代码,您的插入语句将正常工作。您可以稍后修改代码以满足您的特定需求。顺便说一句,有时,您必须将日期括在磅符号中,例如 #

      【讨论】:

      • 对不起,我必须在 end sub 之前添加 2 行它是 i=i+1 Next i
      • 如果我删除 for 循环,我如何输入 n 行,其中 n 是日期之间的天数差异。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多