access2000で存在しないデータを入力した時メッセージを表示させたい

このQ&Aのポイント
  • access2000でファイルを作成する初心者が、IDを入力する際に存在しないデータの場合にメッセージを表示させたい。
  • メインフォームと情報の変更履歴を表示するフォームを作成中。IDが存在する場合は表示されるが、存在しない場合は「存在するIDはありません」というメッセージを表示させたい。
  • IDに重複はなく、メインフォームは1件しか表示されないが、変更履歴には複数のレコードが存在することがある。accessの知識がないため、簡単な方法を教えてほしい。
回答を見る
  • ベストアンサー

access2000で存在しないデータを入力した時メッセージを表示させたい

はじめてaccess2000でファイルを作成する初心者です。 名前(ID)を入力すると、 その方の情報(メインフォーム)と、 情報の変更履歴(サブフォーム)が表示される、 フォームを作成しています。 最初、別のフォームにテキストボックスを作成し、 そこにIDを入力後、ボタンをクリックすると、 クエリ(テーブル)に存在するIDは表示されますが、 存在しない場合は、「存在するIDはありません」 というメッセージを表示し、 メイン・サブフォームの画面には移動しないように したいのです。 ※現在は空のメイン・サブフォームが表示されます。 ちなみに、IDに重複はありませんので、 情報(メインフォーム)は1件しか表示しませんが、 変更履歴(サブフォーム)はIDによって 複数のレコードが存在する場合があります。 説明がわかりにくくて申し訳ありませんが、 回答をお願いいたします。 accessに関する知識がほとんどありませんので、 簡単にできる方法を教えていただけるとうれしいです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.5

tab1: ID______fld_1 A001__AAAA A002__BBBB tab2: ID______tab1_ID____fld_1 1_______A001_______1111 2_______A001_______2222 フォーム: ID:______[A001________] fld_1:___[AAAA______] tab2: ___ID__tb1_ID_fld_1 [1____][A001][1111______] [2____][A001][2222______] tab1、tab2のテーブルからフォームを生成するとメインとサブフォームが生成されます。 あるフォームに [テキスト_ID]を配置し、それをテストして合致した場合にメイン・サブを開く。 そのサンプルコードは次のようです。 Private Sub コマンド0_Click()   Dim strID As String   If Len(Me.テキスト_ID & "") Then     strID = Me.テキスト_ID     If Nz(DLookup("ID", "tab1", "ID='" & strID & "'")) = "" Then       MsgBox "該当する[ID]はありません!", vbExclamation, " 警告"     Else       DoCmd.OpenForm "tab1", , , "ID='" & strID & "'"     End If   Else     MsgBox "先に、[ID]欄の入力を完了して下さい!", vbInformation, " お知らせ"   End If End Sub Private Sub コマンド0_Click()   Dim strID As String   If Len(Me.テキスト_ID & "") Then     strID = Me.テキスト_ID     If DCount("*", "tab1", "ID='" & strID & "'") = 0 Then       MsgBox "該当する[ID]はありません!", vbExclamation, " 警告"     Else       DoCmd.OpenForm "tab1", , , "ID='" & strID & "'"     End If   Else     MsgBox "先に、[ID]欄の入力を完了して下さい!", vbInformation, " お知らせ"   End If End Sub 先ずは、このように至極簡単なテーブル構造とデータでテストされたら宜しいと思います。

azukitty
質問者

お礼

何度もアドバイスありがとうございます。 見よう見まねですが、やっとできました! 期日がせまっておりましたので、とても助かりました。 中身の意味はまだまだ理解できないところがありますが、 次回は、少しでもわかるように勉強したいと思います。

その他の回答 (4)

noname#140971
noname#140971
回答No.4

tab1: ID__fld_1 1___aaa 2___bbb Private Sub コマンド_IDのチェック_Click()   Dim lngID As Long      lngID = Nz(Me.テキスト_ID, 0)   If lngID > 0 Then     lngID = Nz(DLookup("ID", "tab1", "ID=" & lngID), 0)     If lngID = 0 Then       MsgBox "該当する[ID]はありません!", vbExclamation, " 警告"     End If   Else     MsgBox "先に、[ID]欄の入力を完了して下さい!", vbInformation, " お知らせ"   End If End Sub とあるフォームに[テキスト_ID]を配置し[コマンド_IDのチェック]をクリックして[ID]がテーブルにあるかないかチェック。 課題1、変数宣言。 課題2、変数へのテキストボックスからの代入するコード。 課題3、If Then Else 文を使った条件分岐。 課題4、DLookup関数を使って既存[ID]を取得するコード。 課題5、MsgBox 関数を使っての告知要領。 ここでは、[ID]の型を長整数と仮定しています。 仮に、[ID]の型がテキスト型であれば、課題1、2、3、4に相当するコードの修正が必要です。 先ずは、質問をこの範囲に限定することですね。 そして、一歩、一歩です。

azukitty
質問者

お礼

ご回答ありがとうございます。 IDはテキスト型です。 Dim lngID As Longの部分を どのように変更すればよいのでしょうか。 私の知識が全くおいついていないようで まだ、うまく動いてくれません。 せっかく回答いただいたのに、なんだか申し訳ないです。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

>Excelもマクロまでの知識ぐらいしかありません。 ExcelのマクロはVBAですよ >削除・追加をしないように設定したら、 どこでどのようにやっているのかの情報が何もないので回答できません

noname#182251
noname#182251
回答No.2

回答ではありませんが 「存在しないデータを入力した時メッセージを表示」は、私ならば基本的にやりません。不親切だからです。「有るデータから選ばせる」ように作ります。対象が多過ぎるならば、絞り込んで選べるような補助手段と組み合わせます。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

簡単に出来る方法はありません VBAが必要です Accessは初めてでも、Excel等でVBAの経験があるのならできますよ

azukitty
質問者

補足

Excelもマクロまでの知識ぐらいしかありません。 VBAの経験がなければ、無理なのでしょうか。。。 あれから情報(メインフォーム)の追加は 別の画面(テーブル)でおこなうため、 削除・追加をしないように設定したら、 「指定したレコードに移動できません。  レコードセットの最後のレコードよりも後に  移動することはできません。」と表示され、 [OK]ボタンをクリックすると、 「アプリケーションの実行エラー  マクロ名:(例:検索)  条件:True  アクション名:レコードの移動  引数:-1,,新しいレコード,」 のメッセージ後、何も表示されなくなりました。 ※IDが存在する場合は、問題なく表示されます。 この回避もVBAが必要なのでしょうか。。。

関連するQ&A

  • ACCESS2003 サブフォームのデータ

    こんにちは。宜しくお願い致します。 ACCESS2003でDBを作成しています。 メインフォームの中にサブフォームを作っています。 それぞれのID(オートナンバー)をリレーションシップとして設定し、連動しています。 メインフォームにデータを追加する際、サブフォームにデータを入力せずに、 次のメインフォームにデータを入れた場合、 サブフォームのオートナンバーが働かず、のちのちデータを入れた際にIDが違うため情報がずれてしまいます。 例えば、 メインフォームのID1~9のサブフォームには何も書き込まずメインフォームにだけデータを入力します。 その後、メインフォームのID10にあるサブフォームにデータを書き込むと、立ち上げなおしたときに、そのサブフォームへの入力したデータがID1のデータとして出てきてしまいます。 恐らく簡単なことだとは思うのですが、なにぶん初心者なものでさっぱり分かりません。 お分かりになる方、是非ともご教授お願いいたします。

  • access フォームで情報表示かつ、データ入力業務について

     accessのフォームでデータ入力業務の場合について。  作成者が退職しており、システムにどうしても理解できない所があり、ご教授願います。  現状、お客様の情報表示(社名、住所等)かつ、お客様に関する調査結果のデータ入力を1つのフォームで表示させています。サブフォームは使用しておりません。  疑問点は、IDをテキストボックスに手入力し、エンターキーを押すと、お客様情報が表示されるという仕組みです。検索ボタン等はありません。それらしき記述もありません。 テーブル1・・・ID、お客様情報  テーブル2・・・ID、調査結果 テーブル3・・・上記全情報の保存用テーブル 選択クエリ・・・テーブル1+テーブル2(IDで結合)(IDは、テーブル2のものを使用) フォーム・・・クエリを基にしたもの。 ・テーブル1は完全にユニークなデータです。 ・テーブル2は調査結果の保存テーブルではなく、「サブフォームを使う事無く、既知の情報表示とデータ入力を1つのフォームで表示できる」ようにする為の、言わば「ダミー」のようなテーブルと思われます。テーブル2に事前に情報入力はしません(フォームで入力する事になります)。またテーブル2を後々参照する事もありません。 ・テーブル3は最終的な保存先です。フォームにはその為の保存ボタンがあります。その際にはADOを使っているようです。(ここらへんは今の私の知識の限界です。)  例えば新規IDをテーブル1に作成します。テーブル1にはデータはありますが、テーブル2にはまだ存在しない状態です。この時点で、その新規IDを抽出条件に、このクエリを実行すると、1行だけ抽出されます。普通に考えれば「抽出結果は0件」ではないかと思うのですが・・・。  新たにシステムを構築する為、この仕組みがどうしても必要なのです。  お願いします。

  • ACCESS フォーム、クエリの最前面表示について

    ACCESS フォーム、クエリの最前面表示について ACCESS2007でメインフォーム、サブフォームを作成し、各フォームはポップアップを有効にしているので、実行すると最前面に表示されますが、サブフォームから開くクエリが最背面に表示されてしまい、いちいちフォームを最小化なり、閉じたりしています。 クエリを最前面に表示させるにはどうしたらいいのでしょうか?

  • ACCESSサブフォームにデータ反映されない

    よろしくお願いします。 Access2010を使っています。 メインフォームにあるテキストボックス2つに条件を入力し、 抽出したデータをサブフォームで表示させたいと思います。 ●メインフォーム名「フォーム1」 テキストボックス2つ「tex1」「tex2」 ●データ元クエリ「q1」 フィールド名「ID1」「ID2」「Name」 ●サブフォームSQL SELECT q1.Name FROM q1 WHERE (((q1.ID1) = Forms![フォーム1]!tex1) And ((q1.ID2) = Forms![フォーム1]!tex2))); フォームを開き、tex1とtex2に入力してもサブフォーム表示が変わりません。 サブフォームをデータシートで別に開くと、データ抽出できていることは確認できました。 サブフォームのコントロールソースへSQLを入力するだけでは、 メインフォーム内でのデータは反映されないんでしょうか??

  • 入力時のエラーメッセージ

    入力時のエラーメッセージ Accessでメインフォームとサブフォームを作成しました。 その中でメインの注文書Noとサブフォームの連番の入力をするときに、エラーメッセージが必ず出ます。 OKで消すことで入力自体は出来るのですが、毎回出るので面倒です。 メッセージは[Link Master Fieids/リンク親フィールドプロパティの設定でエラー 名前が適切でありません clickが発生しました]です。 データベースの構築自体がまずいのでしょうか? やっていることは、一つしかない注文書Noと数種類の項目をメインフォームとして、サブフォームは連番(1~最大4まで)とそれぞれの連番の注文内容としています。 一つの注文書が、4品名まで記載出来るようになっており、注文者などの重複する項目をメインとして、重複しない品名などの項目をサブにしています。 データベースの作り方もよく判らないで本を読みながら作ったので、困っています。 宜しくお願いします。

  • アクセス メインフォームの条件指定にてサブフォームを表示

    アクセス初心者です。 現在アクセス2000、MEにてシステム作成中です。 業務報告書を作っています。 メインフォームに2つのタブを作成。 1つのタブに3種類のサブフォーム(別々のクエリ)を表示しています。 現在は全てのデータ件数を表示していますが、これを期間指定して、その期間だけの件数を表示させるようにしたいのです。 今まで試してみた結果です。 考え方(1)パラメータとして入力  各クエリにbetweenパラメータとして入力  ⇒これは、3つのクエリ×2があるので入力を促す同じ処理が何回も表示され、とても使えませんでした。 考え方(2)メインフォームに非連結テキストボックスを作成して、それを参照  ⇒まず、終了年月日のイベント(更新後処理)にサブフォームを再クエリ(サブフォームのクエリには、メインフォームの開始と終了範囲をbetweenにて抽出)   ⇒⇒すると、そのままでは表示されず、デザインビューの切り替えなどを行うと表示されます。 そのために、マクロ(再クエリの後)に「オブジェクトの再描画」でこのサブフォームを再表示するようにしましたが、結果は同じです。 現在このような状態です。 マクロは分りますが、VBAはほとんど分らない状態です。 質問1 パラメータ指定の場合、各クエリに1回のパラメータを伝えられる方法があるのでしょうか? 質問2 再クエリしたこのデータをきちんと表示する方法は? どんな操作方法が良いのかはわかりません。 他に簡単でわかりやすい方法があれば、教えてください。どなたかよろしくおねがいします。 また、同じようにレポートも出力します。 同様の形式です。こちらも変更の予定です。 ですから、そのことを考えると、1回のパラメータで各クエリに伝えられるのがいいのですが・・・

  • ACCESS フォームからサブフォームのデータを更新・入力したい

    ACCESS フォームからサブフォームのデータを更新・入力したい tbl_プロジェクトというテーブルにIDとプロジェクトコード、プロジェクトの基本情報を持たせ、f_プロジェクトフォームからプロジェクトコード、件名、契約日等のデータ及び、f_テーマサブフォームにテーマを入力できるようなフォームを作成しています。フォームで入力したものをそれぞれのテーブルに保存したいのですがうまくいかない部分があります。 フォームから入力すると、tbl_プロジェクトに所属する情報は更新されます。そのtbl_プロジェクトに所属するプロジェクトコードをサブフォームのtbl_テーマのプロジェクトコードにも反映したいのですがどのようにしたらよいでしょうか? そういったことは可能でしょうか?分かりにくい説明で申し訳ないですが教えていただけると助かります。よろしくお願いします! DBの構成 【テーブル】 tbl_プロジェクト (1件1件のIDとプロジェクトコードを持つ) (フィールド:P_ID、プロジェクトコード、件名、契約日など) tbl_テーマ(プロジェクト毎に関連のあるキーワードを持つ) (フィールド:P_ID、プロジェクトコード、テーマ)←これのプロジェクトコードにtbl_プロジェクトのデータが入るようにしたい。 tbl_顧客(プロジェクトを依頼した顧客情報を持つ) 【クエリ】 q_テーマ(プロジェクト、テーマ、顧客を抽出するクエリ) 【フォーム】 f_プロジェクト (プロジェクトを1件ずつ表示・参照・新規作成するフォーム) f_テーマサブフォーム (f_プロジェクトフォームのプロジェクトコードにづきテーマを          表示・入力するサブフォーム) リレーションはP_IDをキーに一対多で作成しています。

  • Access データアクセスページでサブフォーム

    タイトル、可能文字数が少なくて入れにくいですね。 と、愚痴ってしまいましたが、質問の内容は以下のとおりです。 環境: ・Win Xp Pro ・Access2002 顧客情報を表示、検索するフォーム(サブフォームあり)を作成しました。 あまりセキュリティ上、ガチガチのロックは必要ない情報ですので、DBパスワードのみ設定しています。 ただ、フォームのデザインを弄られたくないのと、利便性を考え、データアクセスページに変換しようと思っています。 ただ、上記顧客情報のフォームを、「名前をつけて保存」し、データアクセスページ形式を選択したところ、サブフォームが無視されてしまいました。 そこで、ウィザードを使って作ろうとしましたが、基になるクエリがひとつしか選択できないため、サブフォーム(別クエリが基になっており、メインフォームと顧客番号でリンクさせています)を追加できません。 ネットで調べても、あまり有意義な回答を得られませんでしたので、質問させていただきました。 ご存知のかたがいらっしゃいましたら、ご教授下さい。 よろしくお願いいたします。

  • アクセス:クエリの対象をフォーム内データに限定

    アクセス2010で住所録を作りました。 入力フォーム(メインフォーム)があり、さらにサブフォームがあります。 メインフォームの住所(A)とサブフォームにAの関連先の複数の住所(B)が入っています。 これを使用して二つのテーブルAとBを連結するクエリをつくりました。 B1住所+A住所 B2住所+A住所 B3住所+A住所 ・ ・ という感じでつなげました。 これは入力した全住所録が対象です。 この対象を、同一フォーム内の「B住所+A住所」に限定したいです。 同じフォームの中のサブフォームのデータとメインフォームのデータを連結したものを取り出すことに限りたいです。 入力フォーム内にコマンドボタンを作り、 そこから現出のメインフォームとサブフォームのデータに限定した、 クエリの結果を出したいです。 クエリの対象をフォーム内のものに限定する方法はあるでしょうか。 マクロもVBAもやったことがありません。 できるだけシンプルな方法を教えてください。 初心者ゆえにどのような表現が正しいか判断がつかず、重複している部分があります。 不首尾なところは補足いたしますので、どうぞご指摘ください。 どうか上級者の方、お助けください。

  • アクセス フィールド入力値での絞り込み

    アクセス初心者です。 現在、社員が取得した資格を管理するツールをアクセスで作成しようと考えています。 これまで、7つのテーブルを作成し、データ入力フォームを作成しました。 (1)資格取得日テーブル:いつ資格を取得したかを示す  【フィールド】取得ID(主キー)、取得社員、取得時部署、取得日 (2)取得資格テーブル:(1)において取得した資格を示す  【フィールド】取得ID、取得情報ID(主キー)、資格ID (3)資格マスタ  【フィールド】資格ID(主キー)、部署、資格分類、資格レベル、資格内容 (4)取得時の部署情報マスタ (5)社員情報マスタ (6)資格分類マスタ (7)資格レベルマスタ これまで、(1)をメインフォームとして、(2)をサブフォームとするフォームを作成し、 (2)の資格IDに対応する情報をサブフォーム上に表示させています。 資格IDを入力すると、残りの情報がコンボボックス(資格内容以外)とテキストボックス(資格内容)に表示されます。 これまでのところ、サブフォームから入力する際に、IDから入力しないと(3)の資格マスタに情報が追加されてしまいます。(ロックすれば良いのかもしれないですが) できれば、(3)で部署と資格分類と資格レベルを選ぶと対応する(3)の資格マスタのIDと資格内容が入力されるようにしたいと思っています。 何か解決策がありましたら教えていただければと思います。よろしくお願いします。