アプリ版:「スタンプのみでお礼する」機能のリリースについて

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)の重複をチェックしなくなってしましまいました。
うまく説明できたが心配ですが、根本的に何か違っていますでしょうか?

A 回答 (3件)

>同じクエリーで(2)も(1)と同様なVBAを組んだところ・・


クエリにではなくテーブルを参照するようにすれば良いと思います。
DCount("*", "納品伝票テーブル", "[伝票番号]=Forms![注文フォーム]![伝票番号]")>=1
のようにでも変更してテーブルを見にいくようにすれば両方ともいけると思いますが。

#1の方がテーブルにまかせ・・「重複を許さないインデックス」を付けましょう。
と回答がありますが通常はテーブルに主キーを設定しておくのですが、設定していないのでしょうか?顧客コードと伝票番号は主キーの設定をして重複しないようにしておいてください。テーブル側でも重複されないようチェックされます。
2000ならテーブルの主キーの設定をすれば伝票番号のコントロールで入力し重複があれば伝票番号のコントロールから移動する際(Enterキー押下等)メッセージが出ると思いますが。
顧客コードはコンボボックスにして顧客管理テーブルを参照するようにすれば顧客管理テーブルにあるレコードしか表示されません。そのコンボボックスから顧客コードを選び住所等を顧客管理テーブルから持ってくるようにすれば簡単だと思います。

この回答への補足

>DCount("*", "納品伝票テーブル", "[伝票番号]=Forms![注文フォーム]![伝票番号]")>=1
のようにでも変更してテーブルを見にいくようにすれば両方ともいけると思いますが。
初歩的な質問ですが、この記述をフォームのテキストの更新後処理にすればいいってことですか?
今手元にファイルないので明日にでも実行してみます。
主キーは設定していますよ。同じコード入力してエンター押すと、納品伝票の内容が表示されてしまいます。何か根本的に間違ってるのかなー。

補足日時:2005/09/13 00:36
    • good
    • 0
この回答へのお礼

ありがとうございます。テーブルを見に行くようにしたら、できました。もうひと工夫して完成させようと思います。
また分からないこと質問しますのでよろしくお願いします。

お礼日時:2005/09/13 10:54

フォームのレコードソースに質問者さんのようなクエリを使う必要性は感じられません。



私自身はあまりフォームにテーブル等をリンクさせませんが、あえてリンクするとすれば、この場合は納品伝票テーブルでしょう。

顧客の情報は、フォーム上の顧客番号を元に顧客管理テーブルから引っ張ってくれば良いだけです。
    • good
    • 0
この回答へのお礼

ありがとうございます。クエリーにこだわり過ぎたようです

お礼日時:2005/10/04 01:02

「重複が許されないもの」をチェックするにはVBAなどで、コードを記述するよりもデータベースに任せるできだと考えます。

その方が
1.楽である
2.確実である
3.高速である
からです。
顧客コード、伝票番号などは「重複を許さないインデックス」を付けましょう。それともなにかそうすることに不都合があるのでしょうか?

この回答への補足

「重複を許さないインデックス」はテーブルのインデックスですよね?そうすると、重複する伝票番号入力した際に、以前の内容が表示されますよね?(私の理解不足でしたらごめんなさい)
できれば、入力フォームに入れた際に「すでに入力されている」表示したいのですが。顧客コードは登録がないときに「登録ありません」などと、表示できればと思っています。
クエリー使っては無理でしょうか?

補足日時:2005/09/12 18:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す