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

ACCESSで検索フォームを作り、そこにお客様IDを入れて、ヒットした場合は、別の入力用フォームが開いて、その方のデータが表示されるようにしています。

そこで教えていただきたいことがあるのですが、今の状態ですと、対象にないお客様IDを入れた場合、新規の画面が開いてしまいます。
これを開かないようにするにはどのようにすればよろしいのでしょうか。


検索フォームがどのようにして作っているかですが、クエリを作成し、お客様IDのレコードを追加し、抽出条件に「Like [forms]![お客様検索]![お客様ID] & "*"」と入れています。フォームではお客様IDを入れて、「実行ボタン」を押すと、フォームを開くマクロが実行されるようにしています。

A 回答 (3件)

実行ボタンのクリック時イベントにフォームを開くだけではなく分岐をするように記述しなおせば良いのではないでしょうか。



If (DCount("[お客様ID]", "テーブル名", "[お客様ID] = [forms]![お客様検索]![お客様ID]) then 0
msgbox "該当するお客様IDがありません"
else
DoCmd.RunMacro "フォームを開くマクロ名", , ""
end if
のように
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。

ただ申し訳ないのですが、

>DCount("[お客様ID]", "テーブル名", "[お客様ID] = [forms]![お客様検索]![お客様ID]

の部分がうまくいきません。Dcountの検索数をメッセージボックスに表示するように変更してテストしてみたのですが、
0と表示されてしまいます。空白を入れた場合は、全件数の値が表示されます。

あと

>then 0

というのがよく意味が分からないのです。

お礼日時:2005/09/21 15:46

もうひとつの手段として、検索結果を入力するフォームの「開く時(OnOpen)」イベントで、開くのをキャンセルするという方法もあります。



Private Sub Form_Open(Cancel As Integer)

  If DCount("[お客様ID]", "お客様情報","[お客様ID]=[forms]![お客様検索]![お客様ID]") = 0 Then OpenCancel

End Sub


Private Sub OpenCancel()

  MsgBox ("該当するお客様は登録されておりません")
  DoCmd.CancelEvent
  Exit Sub

End Sub

※テーブル名又はクエリ名を「お客様情報」としています※

なお、お客様IDが主キーであれば、「Like」でのあいまい検索にはしなくていい気がしますが・・・?


あと、No.の方の「DCount(~) Then 0 MsgBox ~」は、「DCount(~)=0 Then MsgBox ~」の打ち間違いではないかと思います。

> 0と表示されてしまいます。

該当のないお客様IDを入力した(→従来、新規レコードで展開されていた場合)のであれば、「0」が返されて問題ありません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

O_cyanさんのやり方をちょっと変更したらできました。
お手数おかけしました。

お礼日時:2005/09/22 15:10

>then 0というのがよく意味が分からないのです


失礼しました。

If DCount("[お客様ID]", "テーブル名", "[お客様ID] = [forms]![お客様検索]![お客様ID])=0 then
msgbox "該当するお客様IDがありません"
else
DoCmd.RunMacro "フォームを開くマクロ名", , ""
end if
の間違えです。
    • good
    • 0
この回答へのお礼

[forms]![お客様検索]![お客様ID]を Me.お客様IDとしたところ、うまくいきました。
ありがとうございました。

お礼日時:2005/09/22 15:20

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

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