【问题标题】:Update Third Table While Looping Through Two Recordsets循环通过两个记录集时更新第三个表
【发布时间】:2020-12-30 00:15:47
【问题描述】:

我有以下代码(这里的一位非常有帮助的人根据上一个问题编写了该代码)。它遍历两个表以确定面试是否有效,然后遍历礼品卡表以查找未使用的卡。这一切都按预期工作。但是,我现在意识到每次分配卡片时都需要向第三个表(收据)添加一条新记录。我曾尝试在循环中使用“INSERT INTO ...”,但它从未将任何内容放入 Receipts 表中。进入 Receipts 表的数据需要从 Interviews 表和 Giftcards 表中选择。

 On Error GoTo E_Handle
        Dim db As DAO.Database
        Dim rsInterview As DAO.Recordset
        Dim rsGiftcard As DAO.Recordset
        Dim strSQL As String
  Set db = CurrentDb
            strSQL = "SELECT * FROM [SOR 2 UNPAID Intake Interviews]" _
                & " WHERE InterviewTypeId='1' " _
                & " AND ConductedInterview=1 " _
                & " AND StatusId IN(2,4,5,8)" _
                & " AND IsIntakeConducted='1' " _
                & " ORDER BY InterviewDate ASC;"
                
        Set rsInterview = db.OpenRecordset(strSQL)
            If Not (rsInterview.BOF And rsInterview.EOF) Then
                strSQL = "SELECT * FROM Giftcard_Inventory_Query" _
                    & " WHERE CardType=1 " _
                    & " AND Assigned=0 " _
                    & " AND Project=3 " _
                    & " ORDER BY DateAdded ASC, CompleteCardNumber ASC;"

                Set rsGiftcard = db.OpenRecordset(strSQL)
                    If Not (rsGiftcard.BOF And rsGiftcard.EOF) Then
                        Do
                            rsGiftcard.Edit
                            rsGiftcard!DateUsed = Format(Now(), "mm/dd/yyyy")
                            rsGiftcard!Assigned = "1"
                            rsGiftcard.Update

                            db.Execute " INSERT INTO [SOR 2 Intake Receipts] " _
                                & "(PatientID,GiftCardType,GiftCardNumber,GiftCardMailedDate,InterviewDate,CreatedBy,GpraCollectorID) VALUES " _
                                & "(rsInterview!PatientID, rsGiftcard!CardType, rsGiftcard!CompleteCardNumber, Now(), rsInterview!InterviewDate, rsInterview!CreatedBy, rsInterview!GpraCollectorID);"

                            rsGiftcard.MoveNext
                            rsInterview.MoveNext
                        Loop Until rsInterview.EOF
                    End If
                
            End If
sExit:
        On Error Resume Next
            rsInterview.Close
            rsGiftcard.Close
        Set rsInterview = Nothing
        Set rsGiftcard = Nothing
        Set db = Nothing
        Exit Sub
E_Handle:
        MsgBox Err.Description & vbCrLf & vbCrLf & "sAssignGiftCards", vbOKOnly + vbCritical, "Error: " & Err.Number
        Resume sExit

【问题讨论】:

  • 我没有看到循环中的表格收据的任何 INSERT 代码。
  • 我将代码恢复到其工作形式,并在无法使其工作时删除了 INSERT 代码。
  • 请将INSERT 代码放回您的问题中,准确的位置。
  • 根据您的要求,我重新添加了 INSERT INTO 代码。我知道我错过了一些愚蠢的东西。提前致谢。

标签: vba ms-access


【解决方案1】:

我想通了。感谢所有将我推向正确方向的人。

On Error GoTo E_Handle
        Dim db As DAO.Database
        Dim rsInterview As DAO.Recordset
        Dim rsGiftcard As DAO.Recordset
        Dim strSQL As String
        
        Set db = CurrentDb
            strSQL = "SELECT * FROM [SOR 2 UNPAID Intake Interviews]" _
                & " WHERE InterviewTypeId='1' " _
                & " AND ConductedInterview=1 " _
                & " AND StatusId IN(2,4,5,8)" _
                & " AND IsIntakeConducted='1' " _
                & " ORDER BY InterviewDate ASC;"
                       
        Set rsInterview = db.OpenRecordset(strSQL)
            If Not (rsInterview.BOF And rsInterview.EOF) Then
                strSQL = "SELECT * FROM Giftcard_Inventory_Query" _
                    & " WHERE CardType=1 " _
                    & " AND Assigned=0 " _
                    & " AND Project=3 " _
                    & " ORDER BY DateAdded ASC, CompleteCardNumber ASC;"

                Set rsGiftcard = db.OpenRecordset(strSQL)
                    If Not (rsGiftcard.BOF And rsGiftcard.EOF) Then
                        Do
                            rsGiftcard.Edit
                            rsGiftcard!DateUsed = Format(Now(), "mm/dd/yyyy")
                            rsGiftcard!Assigned = "1"
                            rsGiftcard.Update
                            
                            db.Execute " INSERT INTO [SOR 2 Intake Receipts] " _
                                & "(PatientID,GiftCardType,GiftCardNumber,GiftCardMailedDate,InterviewDate,CreatedBy,GpraCollectorID) VALUES " _
                                & "('" & rsInterview("PatientID") & "', '" & rsGiftcard("CardType") & "', '" & rsGiftcard("CompleteCardNumber") & "', Now(), '" & rsInterview("InterviewDate") & "', '" & rsInterview("CreatedBy") & "', '" & rsInterview("GpraCollectorID") & "');"
                            
                            rsGiftcard.MoveNext
                            rsInterview.MoveNext
                        Loop Until rsInterview.EOF
                    End If
                
            End If
sExit:
        On Error Resume Next
            rsInterview.Close
            rsGiftcard.Close
        Set rsInterview = Nothing
        Set rsGiftcard = Nothing
        Set db = Nothing
        Exit Sub
E_Handle:
        MsgBox Err.Description & vbCrLf & vbCrLf & "sAssignGiftCards", vbOKOnly + vbCritical, "Error: " & Err.Number
        Resume sExit

【讨论】:

猜你喜欢
  • 2016-03-15
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多