##質問内容
伝票管理システムにおいて伝票の入力フォームを作っています。
そのフォームにサブフォームを設けてありそこで商品を複数追加できるようになっています。
そこで、新規に商品を伝票に追加するときは複数を選び、選んだレコードには色を付け
追加できるようにし、また新しく新規で追加する場合は、今さっき追加したものは選べないようにしたいです。
また、すでに追加してあるものは一つだけ選べるようにし、複数選べないようにしたいので、その考え方を教えてほしいです。
##概要
サブフォームの内容は、
行番号、商品番号、商品名、数量、単価、金額といった感じです。
商品番号のテキストボックスの隣に参照ボタンがあり、商品のマスタを参照モードになって開くようになっています。
<T_Product(商品テーブル)>
フィールド名 | データ型 | 備考 |
---|---|---|
F_ProductCode | テキスト型 | 商品コード |
F_ProductName | テキスト型 | 商品名 |
F_Cost | 通貨型 | 単価 |
F_AddDate | 日付/時刻型 | 追加日 |
F_UpdateDate | 日付/時刻型 | 更新日 |
F_DeleteFlag | yes/no型 | 論理削除フラグ |
F_SelectFlag | yes/no型 | 選択フラグ |
F_SelectedFlag | yes/no型 | 選択済みフラグ |
##現状
VBA
1'---------------------------- 2'選択処理 3'---------------------------- 4 5Private Sub select_tables() 6 7 If Forms!F_ProductMaster.Caption = "商品マスタ " Then 8 9 If Me!Select = True Then 10 11 Dim SQL As String 12 13 SQL = "UPDATE T_Product SET F_SelectFlag = False WHERE F_ProductCode = """ & Me!F_ProductCode & """" 14 15 With Application.CurrentDb 16 .Execute SQL 17 End With 18 Else 19 20 Dim SQLS As String 21 22 SQLS = "UPDATE T_Product SET F_SelectFlag = True WHERE F_ProductCode = """ & Me!F_ProductCode & """" 23 24 With Application.CurrentDb 25 .Execute SQLS 26 End With 27 28 End If 29 30 End If 31 32 Me.Refresh 33 34End Sub
レコードをクリックすると選択フラグにチェックが入り、チェックが入っているものをサブフォームの方に入れるといった処理を行っています。
VBA
1 Dim RSS As DAO.Recordset 2 Dim a As String 3 4 Set DB = CurrentDb 5 Set RS = DB.OpenRecordset("T_Product", dbOpenDynaset) 6 Set RSS = DB.OpenRecordset("T_WSlip", dbOpenDynaset) 7 Set RST = DB.OpenRecordset("T_WSlipDetail", dbOpenDynaset) 8 9 a = Nz(DMax("F_LineNum", "T_WSlipDetail"), 0) 10 11 With RS 12 13 .FindFirst "F_SelectFlag = True" 14 15 Do Until RS.NoMatch 16 17 With RST 18 19 .AddNew 20 .Fields("F_SlipCode") = RSS!F_SlipCode 21 .Fields("F_LineNum") = a + 1 22 .Fields("F_Cost") = RS!F_Cost 23 .Fields("F_ProductCode") = RS!F_ProductCode 24 .Fields("F_Qty") = 1 25 .Update 26 27 End With 28 29 RS.FindNext "F_SelectFlag = True" 30 a = a + 1 31 Loop 32 33 .Close 34 35 End With 36 37 Forms!F_WSlipInput.Refresh 38 39 DoCmd.Close acForm, Me.Name 40 41End Sub
不明な点があればコメントください。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー