2017-02-22 7 views
0

私はプールでファミリーパスとメンバーの使用状況を追跡するためのデータベースを用意しています。 3つのテーブルがあり、1つは家族の詳細、1つは個々のメンバー、もう1つはチェックインの追跡用です。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について十分な知識がありません。まず配列を作成する必要がありますか?ループを実行するために私の関係からデータをどのように準備するのですか?

+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-自動化されたデータエントリのために使用されることはありませんので、この場合には、それをバーコードを含む未結合のテキストボックスを作成することを前提としてい。この特定の自動化については、チェックインとは別に、非結合形式を検討してください。

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 
関連する問題