2016-08-15 7 views
0

2つのメインテーブルと、2つのテーブルからの外部キーを含むリンクテーブルを持つデータベースで作業しています。 Accessでフォームを作成し、フォームの目的はドロップダウンを使用して1つのテーブルから1つのオプションを選択し、複数の選択リストボックスを使用して、ユーザーが他のテーブルから複数のオプションを選択できるようにすることです。ユーザーはボタンをクリックすると、リストボックス内の選択されたオプションごとに、リンクテーブルにレコードを作成するコード(下記参照)が表示されます。例:VBAへのアクセス個々のレコードへの配列の変換

ユーザーがフォームに新しいレコードを作成し、ドロップダウンリストから「品質保証」を選択し、リストボックスから2つのオプションを選択します。ユーザーがボタン "cmdAddCompToCurr"をクリックすると、2つのレコードをリンクテーブルに作成する必要があります。

私がボタンをテストすると、正しくはありません。コードは、リストボックスの選択肢から作成された配列を個々のID番号に変換しません。私がリストボックスから選択する項目に関係なく、私は常にリンクされたテーブル内の同じID番号を取得します。

コード:

ます。Private Sub Command0_Click()

Dim db As DAO.Database 
Dim rs As DAO.Recordset 
Dim i As Variant 

Set db = CurrentDb() 
Set rs = db.OpenRecordset("tbl_CurCom_Link", dbOpenDynaset) 

If List89.ItemsSelected.Count = 0 Then 
    MsgBox "No components were selected" 
    GoTo Endme 

End If 

If List89.ItemsSelected.Count >= 1 Then 
    i = List89.ListCount 
    fld_ComponentID = List89.Column(0, 0) 
    fld_ComponentCode = List89.Column(1, 0) 
    fld_ComponentTitle = List89.Column(2, 0) 
    fld_CompRevision = List89.Column(3, 0) 

End If 

For Each i In List89.ItemsSelected 
    rs.AddNew 
    rs!fld_CurriculumID = fld_CurriculumID 
    rs!fld_ComponentID = fld_ComponentID 
    rs.Update 

次 Endme: End Subの

答えて

1

根本的な問題は、あなたが(外と)の前に、あなたのfld_ComponentID変数が割り当てられていているあなたforループ。つまり、ループの前に1回だけセットされ、ループのすべての反復で同じ値が使用されます。また、.Column(0, 0)にハードコードされているため、実際にを選択するかどうかにかかわらず、最初の行にあるものに設定されます。代わりに

forループ内にfld_ComponentID定義を移動し、また、それが動的に.Column(0, i)を参照する必要があり、すなわち:ちょうどあなたができる

fld_ComponentID = List89.Column(0, i) 
    rs!fld_ComponentID = fld_ComponentID 

を使用すると、変数自体が冗長になっわかりますしかし、そう:

rs!fld_ComponentID = List89.Column(0, i) 

上記のIF...END IFブロックは実際には冗長なので、完全に削除することができます。

fld_CurriculumIDはどこにも定義されていません。 Option Explicitを指定しないと、デフォルト値の変数が自動的に生成されます。ではなく、誰でも意図するものがあります。下の完全な答えについては、関連するコントロールの名前がtxtCurriculumIDと仮定しています。

いくつかの制御フローの変化の後だけでなく、あなたのサブの代わりをすることができます:

Dim db As DAO.Database 
    Dim rs As DAO.Recordset 
    Dim i As Variant 

    Set db = CurrentDb() 
    Set rs = db.OpenRecordset("tbl_CurCom_Link", dbOpenDynaset) 

    If List89.ItemsSelected.Count = 0 Then 
     MsgBox "No components were selected" 
    Else 
     For Each i In List89.ItemsSelected 
      rs.AddNew 
      rs!fld_CurriculumID = txtCurriculumID.Value 
      rs!fld_ComponentID = List89.Column(0, i) 
      rs.Update 
     Next i 
    End If 
+0

おかげで、ジョン!それは完璧に働いた! – Aaron

関連する問題