2017-02-22 70 views
0

我有一個數據庫,用於跟蹤我們游泳池的家庭通行證和會員使用情況。我有三張桌子,一張是家庭詳情,一張是每個會員,另一張是跟蹤簽到。如何在VBA中的MS Access數據庫關係中聲明FOR EACH循環?

有連接每個單獨記錄的關係是適當的家庭關係。每個人都會得到一張通過條形碼掃描器掃描並通過簡單形式進行檢查的通行證,我想爲按鈕編寫一個循環,以便在每個家庭成員出現在一起時檢查每個成員,而不是每個人個人掃描他們的卡。

DoCmd.OpenForm "CheckIn" 

Dim person As ? 
Dim family As ? 

FOR EACH person IN family 

    Forms!CheckIn![PASSHOLDER] = Me![BARCODE] 
    Forms!CheckIn![CHECKINTIME] = Now() 
    DoCmd.GoToRecord , , acNewRec 

NEXT 

DoCmd.Close acForm, "CheckIn", acSaveYes 

問題是我不知道如何做到這一點的VBA VBA。我需要先創建一個數組嗎?我如何從我的關係中準備我的數據以執行我的循環?

+0

'對於對象中的每個對象'暗淡的對象 – 0m3r

回答

0

你能試試嗎?它可以工作:)(無代碼的其餘部分,不知道究竟是什麼家庭很難說):

DoCmd.OpenForm "CheckIn" 

Dim person As variant 
Dim family As variant 

'you should assign person to something actually. 

    FOR EACH person IN family 

     Forms!CheckIn![PASSHOLDER] = Me![BARCODE] 
     Forms!CheckIn![CHECKINTIME] = Now() 
     DoCmd.GoToRecord , , acNewRec 

    NEXT 

    DoCmd.Close acForm, "CheckIn", acSaveYes 

這是你如何遍歷集合:

https://msdn.microsoft.com/en-us/library/y0e76axa(v=vs.100).aspx

1

假設表格之間的規範化結構如下,只需使用SQL。召回表格只是表格的直觀表示,通常用於數據管理(添加,編輯,保存,刪除)。既然你知道什麼添加,使用後端查詢自動化數據輸入。

家庭詳細

FamilyID ... 

個人會員

MemberID, FamilyID ... 

MemberID, PASSHOLDER, CHECKINTIME ... 
在VBA

因此,如果按一個家庭檢查按鈕並運行追加查詢其刷新後將作爲個人記錄顯示在CheckIn窗體。這假定一些家庭標識符文本框駐留在表格中WHERE子句中使用,在這種情況下,使它的未結合的文本框包括條碼因爲這些字段將不被用於用戶數據輸入SQL自動化數據輸入 。即使考慮一個除了實際CheckIn以外的未綁定形式。

Private Sub FamilyCheckinCommand_Click() 

    If Not IsNull(Forms!CheckIn![FamilyID]) Then 
     strSQL = "INSERT INTO CheckIn (MemberID, PASSHOLDER, CHECKINTIME)" _ 
        & " SELECT m.MemberID,'" & Forms!CheckIn![BarCode] & "', Now()" _ 
        & " FROM IndividualMembers m" _ 
        & " WHERE m.FamilyID = " & Forms!CheckIn![FamilyID] 

     ' RUNS QUERY 
     CurrentDb.Execute strSQL, dbFailOnError 

     ' REFRESHES FORM 
     Me.Form.Requery 
    Else 
     Msgbox "Please enter a family!", vbExclamation, "MISSING FAMILY" 
    End If 

End Sub