- ベストアンサー
Access2003 フォームでの入力制限
- Access2003のフォームで、数量の入力に制限を設ける方法について教えてください。
- VBAを使用して数量の値が0以上100未満でない場合にエラーを表示するようにしていますが、マスターテーブルを参照して制限する方法はありますか?
- マスターテーブルに「数量」と「金額」の上下限が設定されており、フォームのテキストボックスに入力された値が制限を超えている場合にエラーを表示させたいです。そのためにはADOを使用する必要がありますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
色々方法はあると思います。 以下に何個か(テーブルを見るので、フォームの変更は不要です) 1)フォームのデザイン画面で、入力規則/エラーメッセージを設定しておく 2)フォームを起動した時に、入力規則/エラーメッセージを設定する。 共通して、以下を前提とします。 テーブル名を「TA」と仮定します。 フォーム上の数量入力用のテキストボックスの名前を「txt数量」と仮定します。 フォーム上の金額入力用のテキストボックスの名前を「txt金額」と仮定します。 1) 以下の式を「txt数量」の入力規則に設定します。 DLookUp("項目","TA","項目='数量' AND 下限 <= " & [txt数量] & " AND 上限 > " & [txt数量]) Is Not Null エラーメッセージに、 範囲内で入力してください なお、上記 DLookup 部分を、「txt数量」の更新前処理で判別してもよいと思います。 「txt金額」への設定は、上記「数量」部分を「金額」に変更して同様に行います。 2) フォームの「読み込み時」に以下のVBAを記述します。 Private Sub Form_Load() Dim rs As New ADODB.Recordset Dim ctl As Control rs.Open "TA", CodeProject.Connection, adOpenForwardOnly, adLockReadOnly While (Not rs.EOF) Select Case rs("項目") Case "数量": Set ctl = Me.txt数量 Case "金額": Set ctl = Me.txt金額 Case Else: Set ctl = Nothing End Select If (Not ctl Is Nothing) Then ctl.ValidationRule = ">= " & rs("下限") & " AND < " & rs("上限") ctl.ValidationText = rs("下限") & " から " & rs("上限") & " 未満の範囲で入力してください" End If rs.MoveNext Wend rs.Close Set ctl = Nothing End Sub 上記は ADO での例になっていますが、 DAO でも (処理的にはほとんど変更はないと思います) また、範囲外のエラーの表示は、2)の方が数値も一緒に表示しています。 参考にする等、自己責任にてお願いします。
その他の回答 (3)
- 30246kiku
- ベストアンサー率73% (370/504)
#3です 記述間違いがありました。 > rs.Open "TA", CodeProject.Connection, adOpenForwardOnly, adLockReadOnly ↓ rs.Open "TA", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly CodeProject と CurrentProject は同じところを参照する(?)みたいですが、 一般的には、CurrentProject だと思います。 CurrentProject で覚えてください。 私のコーディングミスです。 すみませんでした。
お礼
お礼が遅くなりましてすみません。 ご丁寧にありがとうございます! 参考にさせて頂きます。
- imogasi
- ベストアンサー率27% (4737/17069)
テーブルに在る上限と下限でチェックし、人間がテーブルを見て、(プログラム等で)セットするのでなければ、そのテーブルのレコードを読まないとならないのは、当たり前です。何を悩んでいるのか。 こんなところに質問しなくても ADOでテーブルを読むコードなどは、Googleででも「ADOテーブル 読み込み」で照会すれば沢山例示のコードが出てくる。 参考までに db2の「生徒」テーブルの最初の2レコードを読み名前を取得例。 Private Sub test01() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset '接続 cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\Documents and Settings\XXXX\My Documents\db2.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open "生徒", cn MsgBox rs.Fields("氏名") rs.MoveNext MsgBox rs.Fields("氏名") rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub
お礼
ご回答ありがとうございます。 自分で参考書を見たりネットで検索しても いまいちよくわからなかったのでここで質問させて頂きました。 検索する際「ADOテーブル 読み込み」で検索すれば良かったのですね。 ずっと「フォーム 入力制限」等で検索していました。 お教え頂きありがとうございました。
- piroin654
- ベストアンサー率75% (692/917)
テーブルのデザインビューの各フィールドの 入力規則に、 数量 入力規則 >=0 And <=500 エラーメッセージ "書き直し" 金額 入力規則 >=500 And <=5000 エラーメッセージ "書き直し" のように。
お礼
ご回答ありがとうございます。 私の説明不足ですみません。 上限および下限は年に1回ほど変更があり、 その際誰でも簡単に変更ができるようにしたいのです。 ですので、各フィールドの入力規則やVBAに書いてしまうと Accessが多少なりともわかる方でないと変更ができないのです。 なのでテーブルの値を参照するような仕組みにしたいのですが… 何かいい案はありますでしょうか。
お礼
ご回答ありがとうございます。 お教え頂いた内容を参考にしつつわからないところは また地道に調べていきたいと思います! ありがとうございました。