access2000を使って簡単な注文用のフォームを作っています。VBAは初心しゃです。
テーブルとしては、納品伝票(伝票番号、顧客コード)、顧客管理(顧客コード)を作り( )ないのものでリレーション組んでます。
クエリーでリレーションを組み、それを元にフォームを作りました。
希望としては(1)伝票番号の重複がないようにする。
(2)顧客コードから住所を表示させる、顧客コードが登録されていないときにはメッセージを出し、正しい顧客コード(顧客コードのみ)を入力させる。
(1)はクエリーでテキストのデータを条件にし、フォームのVBAで
Private Sub 伝票番号_AfterUpdate()
If DCount("伝票番号", "Q_納品伝票") >= 1 Then
MsgBox "すでに登録されています"
Me.Undo
DoCmd.GoToControl "顧客名"
DoCmd.GoToControl "伝票番号"
End If
End Sub
で上手くできましたが、同じクエリーで(2)も(1)と同様なVBAを組んだところ(顧客デーブルの顧客コードに重複があるときをチェックさせる)、(1)の重複をチェックしなくなってしましまいました。
うまく説明できたが心配ですが、根本的に何か違っていますでしょうか?
No.2ベストアンサー
- 回答日時:
>同じクエリーで(2)も(1)と同様なVBAを組んだところ・・
クエリにではなくテーブルを参照するようにすれば良いと思います。
DCount("*", "納品伝票テーブル", "[伝票番号]=Forms![注文フォーム]![伝票番号]")>=1
のようにでも変更してテーブルを見にいくようにすれば両方ともいけると思いますが。
#1の方がテーブルにまかせ・・「重複を許さないインデックス」を付けましょう。
と回答がありますが通常はテーブルに主キーを設定しておくのですが、設定していないのでしょうか?顧客コードと伝票番号は主キーの設定をして重複しないようにしておいてください。テーブル側でも重複されないようチェックされます。
2000ならテーブルの主キーの設定をすれば伝票番号のコントロールで入力し重複があれば伝票番号のコントロールから移動する際(Enterキー押下等)メッセージが出ると思いますが。
顧客コードはコンボボックスにして顧客管理テーブルを参照するようにすれば顧客管理テーブルにあるレコードしか表示されません。そのコンボボックスから顧客コードを選び住所等を顧客管理テーブルから持ってくるようにすれば簡単だと思います。
この回答への補足
>DCount("*", "納品伝票テーブル", "[伝票番号]=Forms![注文フォーム]![伝票番号]")>=1
のようにでも変更してテーブルを見にいくようにすれば両方ともいけると思いますが。
初歩的な質問ですが、この記述をフォームのテキストの更新後処理にすればいいってことですか?
今手元にファイルないので明日にでも実行してみます。
主キーは設定していますよ。同じコード入力してエンター押すと、納品伝票の内容が表示されてしまいます。何か根本的に間違ってるのかなー。
ありがとうございます。テーブルを見に行くようにしたら、できました。もうひと工夫して完成させようと思います。
また分からないこと質問しますのでよろしくお願いします。
No.3
- 回答日時:
フォームのレコードソースに質問者さんのようなクエリを使う必要性は感じられません。
私自身はあまりフォームにテーブル等をリンクさせませんが、あえてリンクするとすれば、この場合は納品伝票テーブルでしょう。
顧客の情報は、フォーム上の顧客番号を元に顧客管理テーブルから引っ張ってくれば良いだけです。
No.1
- 回答日時:
「重複が許されないもの」をチェックするにはVBAなどで、コードを記述するよりもデータベースに任せるできだと考えます。
その方が1.楽である
2.確実である
3.高速である
からです。
顧客コード、伝票番号などは「重複を許さないインデックス」を付けましょう。それともなにかそうすることに不都合があるのでしょうか?
この回答への補足
「重複を許さないインデックス」はテーブルのインデックスですよね?そうすると、重複する伝票番号入力した際に、以前の内容が表示されますよね?(私の理解不足でしたらごめんなさい)
できれば、入力フォームに入れた際に「すでに入力されている」表示したいのですが。顧客コードは登録がないときに「登録ありません」などと、表示できればと思っています。
クエリー使っては無理でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- その他(データベース) accessについて 2 2022/05/31 16:58
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) Excel 指定した固有番号で、複数の行を削除する方法は? 2 2022/03/30 15:18
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- 経営情報システム 個人で運送業を営んでいます。 請求書作成のアプリ(ソフト)ないでしょうか?顧客は100件ほど、締日が 3 2022/05/20 20:36
- Excel(エクセル) 関数の式を教えてください 2 2022/04/04 11:15
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- スーパー・コンビニ ファミリーマートでバイトしてるものです。配達のやつで、たまにファミマの伝票では無い伝票を持ってくるお 2 2022/05/29 13:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access VBAでクエリーのレコー...
-
ADOでレコードを閉じるタイミン...
-
データベースの1要素に複数デー...
-
Accessで名寄せグループの関係...
-
Access フォームのデータがテー...
-
ACCESS で マクロの中でフィ...
-
ワードでの単純作業の効率化に...
-
(ACCESS)連番取得について
-
Accessデータベースで行と列を...
-
シングルクォーテーションとダ...
-
Access [SQL]月別ので最新日付...
-
Access 既に開いているフォー...
-
Access IF文でテーブルに存在し...
-
「直需」の意味を教えてください
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Accessでテーブル名やクエリ名...
-
Accessのリンクテーブルのパス...
-
APN設定について教えていただけ...
-
ExcelのデータをコピーでACCESS...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースの1要素に複数デー...
-
Access IF文でテーブルに存在し...
-
Access VBAでクエリーのレコー...
-
別のDBからテーブルをコピーす...
-
ACCESS で マクロの中でフィ...
-
ワードでの単純作業の効率化に...
-
Access 既に開いているフォー...
-
Access フォームのデータがテー...
-
ワードで保存するファイル名の...
-
シングルクォーテーションとダ...
-
Access レコードロックについて...
-
顧客IDを入力すると顧客名や住...
-
Accessで名寄せグループの関係...
-
Accessデータベースで行と列を...
-
ADOでレコードを閉じるタイミン...
-
Access 縦(行)のデータを横(列)...
-
ファイルメーカーの集計につい...
-
Access 新規入力画面にするコー...
-
Access クエリ このレコードセ...
-
Access2013VBA 複数のテーブル...
おすすめ情報