【问题标题】:Assign Recordset to Variable in VBA在 VBA 中将记录集分配给变量
【发布时间】:2020-01-01 02:27:58
【问题描述】:

我正在尝试从记录集中分配变量值并将值插入 Access 表中。我还需要在插入之前清除表格并插入新的数据集。记录集来自 SQL Server 中的存储过程。以下似乎不起作用:

Dim conn As ADODB.Connection, cmd As ADODB.Command, rst As 
ADODB.Recordset
Dim Itm As String, JobNo As Integer, RevNo As Integer, DUStatus As Date, LDUStatus As Date, UTrigger As String


Set conn = New ADODB.Connection
conn.ConnectionString = "Provider='sqloledb';Data Source=SERVER;Initial Catalog='Database';Integrated Security='SSPI';"
conn.Open


Set cmd = New ADODB.Command
With cmd
    .ActiveConnection = conn
    .CommandText = "rg_ItemsQuerySP"
    .CommandType = adCmdStoredProc

    .Parameters.Append .CreateParameter("@JobNo", adInteger, adParamInput, , TempJobNo)
    .Parameters.Append .CreateParameter("@RevNo", adInteger, adParamInput, , TempRevNo)
End With

Set rst = cmd.Execute

If rst.EOF Then Exit Function
rst.MoveLast
rst.MoveFirst
    With rst
      Do While Not .EOF

            Itm = rst.Fields("Item")
            JobNo = rst.Fields("Job No")
            RevNo = rst.Fields("Revision No")
            DUStatus = rst.Fields("DateUpdatedStatus")
            LDUStatus = rst.Fields("LastDateUpdatedStatus")
            UTrigger = rst.Fields("UpdateTrigger")

        DoCmd.RunSQL ("INSERT INTO ItemsQuerySP_Temp values " & Itm & ", " & JobNo & ", " & RevNo & ", " & DUStatus & ", " & LDUStatus & ", " & UTrigger & ";")
        rst.MoveNext
    Loop
    End With

   conn.Close
   Set conn = Nothing

【问题讨论】:

  • 您的问题是什么?您发布代码而没有告诉我们您面临的问题或问题。
  • 除非您的所有值都是数字,否则其中一些需要引号。而且我认为您还需要值列表周围的括号。

标签: sql vba ms-access recordset


【解决方案1】:

您的问题可能是字符串变量周围缺少引号,这会引发 SQL 错误。由于您使用 ADO 参数,因此请继续通过 QueryDef 使用参数,避免字符串连接(即 & 符号)或标点符号(即引号):

SQL (以下另存为 MS Access 保存的查询,根据需要调整类型:TextLongDouble 等) p>

PARAMETERS PrmItm Text, PrmJobNo Text, PrmRevNo Text, 
           PrmDUStatus Text, PrmLDUStatus Text, PrmUTrigger Text;
INSERT INTO ItemsQuerySP_Temp 
VALUES(PrmItm, PrmJobNo, PrmRevNo, 
       PrmDUStatus, PrmLDUStatus, PrmUTrigger)

VBA (相关部分)

Dim qdef AS QueryDef

' ... same as above...
Set qdef = CurrentDb.QueryDefs("mySavedQuery") 

With rst
   Do While Not .EOF

        ' BIND PARAMETERS
        qdef!PrmItm = rst.Fields("Item")
        qdef!PrmJobNo = rst.Fields("Job No")
        qdef!PrmRevNo = rst.Fields("Revision No")
        qdef!PrmDUStatus= rst.Fields("DateUpdatedStatus")
        qdef!PrmLDUStatus = rst.Fields("LastDateUpdatedStatus")
        qdef!PrmUTrigger = rst.Fields("UpdateTrigger")

        ' EXECUTE ACTION
        qdef.Execute dbFailOnError
        .MoveNext
   Loop
End With

Set qdef = Nothing

【讨论】:

  • 它似乎在工作,但是在将数据插入 ItemsQuerySP_Temp 表时进入了无限循环。它无限地插入相同的记录。可能出了什么问题?
  • 你必须合并Recordset.MoveNext。见编辑。我没有意识到我把它漏掉了。
  • 现在很好用!谢谢!
  • 很高兴听到!不要忘记 StackOverflow 的说法 thanks
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 2013-02-05
  • 2022-06-14
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多