プロが教える店舗&オフィスのセキュリティ対策術

はじめてaccess2000でファイルを作成する初心者です。
名前(ID)を入力すると、
その方の情報(メインフォーム)と、
情報の変更履歴(サブフォーム)が表示される、
フォームを作成しています。

最初、別のフォームにテキストボックスを作成し、
そこにIDを入力後、ボタンをクリックすると、
クエリ(テーブル)に存在するIDは表示されますが、
存在しない場合は、「存在するIDはありません」
というメッセージを表示し、
メイン・サブフォームの画面には移動しないように
したいのです。
※現在は空のメイン・サブフォームが表示されます。

ちなみに、IDに重複はありませんので、
情報(メインフォーム)は1件しか表示しませんが、
変更履歴(サブフォーム)はIDによって
複数のレコードが存在する場合があります。

説明がわかりにくくて申し訳ありませんが、
回答をお願いいたします。
accessに関する知識がほとんどありませんので、
簡単にできる方法を教えていただけるとうれしいです。

A 回答 (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

先ずは、このように至極簡単なテーブル構造とデータでテストされたら宜しいと思います。
    • good
    • 0
この回答へのお礼

何度もアドバイスありがとうございます。
見よう見まねですが、やっとできました!
期日がせまっておりましたので、とても助かりました。

中身の意味はまだまだ理解できないところがありますが、
次回は、少しでもわかるように勉強したいと思います。

お礼日時:2008/01/30 00:07

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に相当するコードの修正が必要です。

先ずは、質問をこの範囲に限定することですね。
そして、一歩、一歩です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/26 10:56

>Excelもマクロまでの知識ぐらいしかありません。


ExcelのマクロはVBAですよ

>削除・追加をしないように設定したら、
どこでどのようにやっているのかの情報が何もないので回答できません
    • good
    • 0

回答ではありませんが


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

簡単に出来る方法はありません


VBAが必要です
Accessは初めてでも、Excel等でVBAの経験があるのならできますよ

この回答への補足

Excelもマクロまでの知識ぐらいしかありません。
VBAの経験がなければ、無理なのでしょうか。。。

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

補足日時:2008/01/09 23:39
    • good
    • 0

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