Vba Access Query或按钮,用于将数据从一个查询填充到另一个查询,而无需主键

Vba Access Query或按钮,用于将数据从一个查询填充到另一个查询,而无需主键,vba,ms-access,Vba,Ms Access,我有一个数据库,里面有两个表,一个叫做面试,另一个叫做礼品卡 访谈表是一个访谈列表,其中包含很多变量,包括: ClientID、InterviewType、ConductedInterview、StatusID和InterviewDate 礼品卡表是礼品卡的库存表,包括: GiftcardNumber、CardType、Assigned、DateAdd和ClientID 我正在尝试设计一个表单(?可能是按钮),可以批量分配一张可用的礼品卡到完成的面试中 基本上,对于表中符合条件(Intervie

我有一个数据库,里面有两个表,一个叫做面试,另一个叫做礼品卡

访谈表是一个访谈列表,其中包含很多变量,包括: ClientID、InterviewType、ConductedInterview、StatusID和InterviewDate

礼品卡表是礼品卡的库存表,包括: GiftcardNumber、CardType、Assigned、DateAdd和ClientID

我正在尝试设计一个表单(?可能是按钮),可以批量分配一张可用的礼品卡到完成的面试中

基本上,对于表中符合条件(InterviewType=1和ConductedInterview=1以及StatusID=2或4)的每次面试,我需要为该面试分配一个可用的卡号(由CardType=1和Assigned=0确定)。然后需要将面试的ClientID复制到Giftcard表上的ClientID字段

我想不出来。面试中的客户ID是作为面试本身的一部分填写的。但是Giftcard表上的ClientID字段是空的,直到将特定卡分配给该ClientID。使问题进一步复杂化的是,我需要始终首先分配最旧的礼品卡。这由DateAdded字段确定,然后在每个日期内由GiftcardNumber字段按升序排序

我需要能够批量分配所有的卡,理想情况下,一按按钮。我们一次分配数百张礼品卡


有什么想法或建议吗?谢谢。

我的方法是使用两个记录集

第一种是基于
访谈
表,选择符合指定标准的记录。第二种是基于
Giftcards
表,再次选择符合要求的记录,在两个字段上排序。然后,您将遍历这两个记录集,直到处理完第一个记录集中的所有记录

可能是这样的(由于我没有填充完整的数据集,所以没有进行完全测试):

您可能希望向
rsInterview
添加额外字段,以便更新礼品卡的分配,并且您可能还希望向该记录集中添加排序顺序,以便此处也有分配顺序。此外,
rsGiftcard
中的
Assigned
字段也可能需要更新


关于,

为什么要标记MySql?好的,所以您的代码运行良好,我非常感谢。我确实做了一些修改以适应语言。但效果很好。我考虑了你关于礼品卡分配的评论。我真正想做的是,每当一张卡片被分配到一个收据表时,添加一个新的记录,其中包含来自面试表和礼品卡表的信息。但是我想不出来。有什么想法吗?我真的很感谢你的帮助。请问一个新问题,说明你做了什么,以及你到底想做什么。
Sub sAssignGiftCards()
    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 ClientID FROM Interviews " _
        & " WHERE InterviewType=1 " _
        & " AND ConductedInterview=1 " _
        & " AND StatusID IN(2,4);"
    Set rsInterview = db.OpenRecordset(strSQL)
    If Not (rsInterview.BOF And rsInterview.EOF) Then
        strSQL = "SELECT ClientID FROM Giftcards " _
            & " WHERE CardType=1 " _
            & " AND Assigned=0 " _
            & " ORDER BY DateAdded ASC, GiftcardNumber ASC;"
        Set rsGiftcard = db.OpenRecordset(strSQL)
        If Not (rsGiftcard.BOF And rsGiftcard.EOF) Then
            Do
                rsGiftcard.Edit
                rsGiftcard!ClientID = rsInterview!ClientID
                rsGiftcard.Update
                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
End Sub