簡體   English   中英

將記錄集分配給VBA中的變量

[英]Assign Recordset to Variable in VBA

我正在嘗試從記錄集中分配變量值,並將值插入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錯誤。 由於您使用ADO參數,因此請繼續通過QueryDef使用參數,避免字符串串聯(例如&符)或標點符號(即引號):

SQL (以下保存為MS Access保存的查詢,根據需要調整類型: TextLongDouble等)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM