UNTIL .EOFループで参照したレコードのフィールドの値が複数ある場合を検出するには

実現したいこと

会社名が2種類以上入っているとエラーを起こす仕組みを作りたい。
具体的には、UNTIL.EOFループで参照したレコードセットの会社名フィールドに1種類のみが入っている時に正常に動作するようにしたい。

前提

現在、材料を発注するシステムをACCESSVBAで製作しております。
その中で、定尺といわれるサイズが決まっているものをあらかじめ明細とは別のテーブルに置いて、そこの値を明細に登録するシステムがあります。
そのシステムは、定尺テーブルの個数フィールドに値を入力し、入力されたレコードの内容をレコード数分ループ処理で回して直接明細テーブルに入力するものです。

このシステムでの問題点として、1つの発注書は同じ会社宛にしか送付できないため、違う会社の定尺が交ざっているとエラーを起こす仕組みが必要となっていることです。
具体的には、**個数を入力したレコード全てをループで参照して、もし参照した全部のレコードの会社名フィールドが2種類以上(例えば会社名A社とB社のレコードがある)の場合にエラーメッセージが出るようにしたいと考えております。
**
レコードをループで参照して前のレコードと異なる場合を検出する、もしくはフィールドの値の種類を検出する、といったコードはどのように書けばいいのでしょうか。

抽象的な質問になってしまいますがどうぞよろしくお願いします。

発生している問題・エラーメッセージ

個数を入力したレコードの会社名が複数ある場合、一番上の会社名だけ登録される。
もし一番上の会社名が間違っていた場合、ミスを避けられない。

該当のソースコード

Private Sub 入力_Click() Dim DB As DAO.Database 'データベースへの参照を代入する変数DBを宣言する。 Dim RS0 As DAO.Recordset   'レコードセットへの参照を代入する変数RS0を宣言する。 Dim RS As DAO.Recordset 'レコードセットへ参照を代入する変数RSを宣言する。 Dim RS2 As DAO.Recordset 'レコードセットへの参照を代入する変数RS2を宣言する。 Dim RS3 As DAO.Recordset 'レコードセットへの参照を代入する変数RS3を宣言する。 Dim VSQL As String 'SQL文を代入する変数を宣言する。 Dim NRET As Long '選択文を代入する変数を宣言する。 Set DB = CurrentDb() Set RS0 = DB.OpenRecordset("Q_定尺一覧", dbOpenDynaset) 'クエリ「Q_定尺一覧」を開く。 RS0.Filter = "個数 <> NULL" '個数が空白でないレコードのみフィルターをかける。 Set RS0 = RS0.OpenRecordset Set Me.Recordset = RS0 Me.Requery 'レコードセットを更新する。 NRET = MsgBox("この内容で登録しますか?", vbYesNo + vbQuestion, "明細登録内容確認") '定尺、個数がこの内容でいいか問う。 If NRET = vbNo Then 'いいえを選択した場合中止する。 Exit Sub Else 'カレントデータベースを参照する '定尺テーブルから個数が空白じゃないレコードを選択するSQL文を変数に代入する。 VSQL = "SELECT * FROM T_定尺 WHERE 個数 <> NULL" Set RS = DB.OpenRecordset(VSQL, dbOpenDynaset) '指定したSQL文を使ってレコードセットRSを開く。 Set RS2 = DB.OpenRecordset("材料明細", dbOpenDynaset) 'テーブル「材料明細」をレコードセットRS2として開く。 Set RS3 = DB.OpenRecordset("Q_定尺一覧", dbOpenDynaset) 'クエリ「Q_定尺一覧」をレコードセットRS3として開く。 Forms!樹脂発注リスト!発注先.SetFocus 'テキストとしての値をとるためフォーカスを取得する。 Forms!樹脂発注リスト!発注先.Text = Me.会社名.Value '会社名を発注リストの発注先に入力する。 Do Until RS.EOF RS.Edit 'レコードセットRSの更新を開始する。 RS2.AddNew 'レコードセットRS2にレコードを追加する。 RS2!ID = GETID 'レコードセットRS2のIDを関数GETIDで採番する。 RS2!材料番号 = RS!材料ID 'レコードセットRSの材料IDをRS2の樹脂番号に入力。 RS2!接頭語 = RS!接頭語 '接頭語tをRS2の接頭語に入力。 RS2!厚さ = RS!厚み  'レコードセットRSの厚みをRS2の厚さに入力。 RS2!X長さ = RS!X長さ 'レコードセットRSの長さをRS2のX長さに入力。 RS2!Y長さ = RS!Y長さ 'レコードセットRSのY長さをRS2のY長さに入力。 RS2!個数 = RS!個数 'レコードセットRSの個数をRS2の個数に入力。 RS2!単価 = RS!単価 'レコードセットRSの単価をRS2の単価に入力。 RS2!発注ID = Forms!樹脂発注リスト!発注ID '樹脂発注フォームの現在の発注IDをRS2の発注IDに入力。 RS2.Update 'レコードセットRS2を更新する。 RS!個数.Value = Null 'レコードセットRSの個数を空白にする。 RS.Update 'レコードセットRSを更新する。 RS.MoveNext 'レコードセットRSの次のレコードに移動する。 Loop Set Me.Recordset = RS3 'フォームのレコードセットRS3を再設定する。 Me.Requery 'レコードセットを更新する。 RS.Close 'レコードセットRSを閉じる。 RS2.Close 'レコードセットRS2を閉じる。 DB.Close 'データベースを閉じる。 DoCmd.Close acForm, "F_おまとめ入力" 'フォーム「F_おまとめ入力」を閉じる。 DoCmd.RefreshRecord 'レコードを更新する。 End If End Sub

コメントを投稿

0 コメント