Page 575 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼フォームでNo.を入力したときそのレコードを表示したい 水無月 04/3/18(木) 14:59 ┗Re:フォームでNo.を入力したときそのレコードを表示したい クロ 04/3/18(木) 15:32 ┗Re:フォームでNo.を入力したときそのレコードを表示したい 水無月 04/3/18(木) 16:16 ┗Re:フォームでNo.を入力したときそのレコードを表示したい クロ 04/3/18(木) 16:39 ┗Re:フォームでNo.を入力したときそのレコードを表示したい 水無月 04/3/18(木) 17:18 ┗Re:フォームでNo.を入力したときそのレコードを表示したい クロ 04/3/18(木) 17:34 ┗Re:フォームでNo.を入力したときそのレコードを表示したい 水無月 04/3/19(金) 10:34 ┗Re:フォームでNo.を入力したときそのレコードを表示したい クロ 04/3/19(金) 12:02 ┗Re:フォームでNo.を入力したときそのレコードを表示したい 水無月 04/3/19(金) 13:27 ┗Re:フォームでNo.を入力したときそのレコードを表示したい クロ 04/3/19(金) 14:58 ┗Re:フォームでNo.を入力したときそのレコードを表示したい 水無月 04/3/19(金) 15:41 ┗Re:フォームでNo.を入力したときそのレコードを表示したい MJ 04/3/19(金) 15:59 ┣Re:フォームでNo.を入力したときそのレコードを表示したい 水無月 04/3/22(月) 10:32 ┗Re:フォームでNo.を入力したときそのレコードを表示したい 水無月 04/3/26(金) 9:53 ─────────────────────────────────────── ■題名 : フォームでNo.を入力したときそのレコードを表示したい ■名前 : 水無月 ■日付 : 04/3/18(木) 14:59 -------------------------------------------------------------------------
こんにちは。 私は現在、本を読んで独学でデータベースを作成しているところです。 でも、初心者で基礎がないものですから、本に書いてないことはどうしたらいいのか分からなくて、こちらに頼ることにしました。 どなたか教えてください。 フォームでコード(主キー)を入力したとき、そのコードがすでに使われているならば、レコードをフォーム上に表示したいのです。 まず取引先住所録のテーブルがあります。 その主キーはオートナンバーではなく、自分で取引先コードをつけれるようにしています。データ型は文字列で、10桁まで数字などを入力できるようにしています。 フォームは非連結で作成して、「登録」のコマンドボタンをクリックすることで登録されるようにしています。 そしてそのフォームに取引先コードを入力したときに、すでにそのコードを持つレコードが登録されているなら、そのデータをフォーム上に表示し、まだ使用されていないのなら、そのまま新規レコードとして登録したいので、何も表示しなくていいようにする方法はありませんか? 本などを読んで、DLOOKUP関数を使うのかなと思い、挑戦してみましたが、どうやって構文を書いていいのか分からず、作業がストップしてしまいました。 どうかよろしくお願いいたします。 |
検索対象テーブル:Aテーブルとします。 非連結フォーム上の取引先コードテキストボックス の更新前処理のイベントに Private Sub 取引先コード_BeforeUpdate(Cancel As Integer) Dim i As Integer If Len(Nz(Me.取引先コード, "")) = 0 Then i = 0 Else i = DLookup("取引先コード", "Aテーブル", "取引先コード = '" & Me.取引先コード & "'") If i = 0 Then Exit Sub Else MsgBox "このコードは既に使われています。", vbCritical, "警告" Cancel = True '入力された対象を選択状態にする Me.取引先コード.SelStart = 0 Me.取引先コード.SelLength = LenB(Me.取引先コード.Value) End If End If End Sub こんな感じでしょうか? |
早速のお返事ありがとうございます! すぐに入力してみました。 でも > i = DLookup("取引先コード", "Aテーブル", "取引先コード = '" & Me.取引先コード & "'") のところで実行時エラー3075というのがでます。 フォームのコードの所に「123456789」と入力してEnterを押したら出ました。 内容は「クエリ式'コード"123456789"の構文エラー:演算子がありません。」です。 データベースについて詳しくいうと テーブル名は「住所録」で、主キーは「コード」で中身は下記になります。 フィールド名 データ型 サイズ IME入力 IME変換 コード テキスト 10 オフ 無変換 会社名1 テキスト 30 オン 一般 会社名2 テキスト 20 オン 一般 フリガナ テキスト 30 半角カタカナ 一般 郵便番号 テキスト 8 オフ 無変換 住所1 テキスト 60 オン 一般 住所2 テキスト 30 オン 一般 電話番号 テキスト 12 オフ 無変換 FAX番号 テキスト 12 オフ 無変換 それでこのコードを非連結フォームに入力したとき、コードがすでに登録されている場合その他の項目も表示したいのです。 申し訳ありませんが、もう一度お教えください。 |
このコードを非連結フォームに入力するテキストボックスに書いたんですよね? 当方では大丈夫なのですが... 一応、テーブル名とフィールド名を実名にし、非連結フォームに入力するテキ ストボックス名を「txtCODE」として再度書きます。 Private Sub txtCODE_BeforeUpdate(Cancel As Integer) Dim i As Integer If Len(Nz(Me.txtCODE, "")) = 0 Then i = 0 Else 'テーブル「住所録」の「コード」フィールドと「txtCODE」が同じものの 'テーブル「住所録」の「コード」フィールドを「i」に代入 i = DLookup("コード", "住所録", "コード = '" & Me.txtCODE & "'") If i = 0 Then Exit Sub Else MsgBox "このコードは既に使われています。", vbCritical, "警告" Cancel = True '入力された対象を選択状態にする Me.txtCODE.SelStart = 0 Me.txtCODE.SelLength = LenB(Me.txtCODE.Value) End If End If End Sub |
お返事ありがとうございます。 今度は書いてくださったのをコピーして、非連結フォームの「コード」というテキストボックスの更新前処理のイベントに書き込みました。そしてtxtCODEはコードに修正しました。 その結果、次のようなエラーが出ました。 実行時エラー94 Nullの使い方が不正です。 デバッグしたらやはり > i = DLookup("コード", "住所録", "コード = '" & Me.txtCODE & "'") の部分が黄色くなりました。 この原因の心当たりはありませんでしょうか? 何度もお手数をおかけしまして申し訳ありませんが、どうぞお願いいたします。 |
ごめんなさいDLookUpだと新規の時にNullのエラーがでますので DCountでやった方がいいですね... Private Sub コード_BeforeUpdate(Cancel As Integer) Dim i As Integer '空欄判定 If Len(Nz(Me.コード, "")) <> 0 Then '有無の判定 i = DCount("*", "住所録", "コード = '" & Me.コード & "'") If i <> 0 Then MsgBox "このコードは既に使われています。", vbCritical, "警告" Cancel = True '入力された対象を選択状態にする Me.コード.SelStart = 0 Me.コード.SelLength = LenB(Me.コード.Value) End If End If End Sub これでいいと思います。 |
クロ さん、何度もお返事ありがとうございます。 今朝早速やってみました。 使用中のコードを入力すると警告のメッセージボックスが出ます。 これで重複することはなくなりました。 ありがとうございます。 それで、この警告だけではなくそのコードで登録されているレコードをフォーム上に表示することはできませんか? >Private Sub コード_BeforeUpdate(Cancel As Integer) > >Dim i As Integer >'空欄判定 >If Len(Nz(Me.コード, "")) <> 0 Then > '有無の判定 > i = DCount("*", "住所録", "コード = '" & Me.コード & "'") > If i <> 0 Then > MsgBox "このコードは既に使われています。", vbCritical, "警告" ここにフォームの会社名1にレコードの会社名1を表示するとういう文を書けばいいのでしょうか? > Cancel = True > '入力された対象を選択状態にする > Me.コード.SelStart = 0 > Me.コード.SelLength = LenB(Me.コード.Value) > End If >End If > >End Sub お手数ですが宜しくお願いいたします。 |
メッセージボックス内に表示する方法でいいでしょうか Dim i As Integer Dim str As String '空欄判定 If Len(Nz(Me.コード, "")) <> 0 Then '有無の判定 i = DCount("*", "住所録", "コード = '" & Me.コード & "'") If i <> 0 Then str = DLookup("会社名1", "住所録", "コード = '" & Me.コード & "'") MsgBox "このコードは「" & str & "」で既に使われています。", vbCritical, "警告" Cancel = True '入力された対象を選択状態にする Me.コード.SelStart = 0 Me.コード.SelLength = LenB(Me.コード.Value) End If End If |
>メッセージボックス内に表示する方法でいいでしょうか お返事ありがとうございます。 ただ私が行いたいのは、フォームにコードを入力して、すでに登録済みのレコードを表示することで、住所などが変更になったときに編集をしてもう一度登録できるようにしたいのです。 なので住所録登録用の非連結フォーム上に表示する方法を教えてください。 宜しくお願いします。 |
>ただ私が行いたいのは、フォームにコードを入力して、すでに登録済みのレコードを表示することで、住所などが変更になったときに編集をしてもう一度登録できるようにしたいのです。 >なので住所録登録用の非連結フォーム上に表示する方法を教えてください。 >宜しくお願いします。 非連結フォームのレイアウト情報もなく、私にどのように表示しろいうのでしょうか? 何故、非連結フォームを使っているでしょうかレコードソースを「住所録」にすれば 済むことでは無いでしょうか? それがダメなら「住所録」と同様のテーブル(ワークテーブル)を用意して非連結フォー ム上の「コード」を抽出条件にしたクエリを非連結フォームのレコードソースにしてみ てはどうですか?あるいはSQLで書いてもいいと思います。 |
お手数ばかりおかけしまして申し訳ありません。 確かに非連結フォームにする意味はないかもしれませんが、以前間違えたレコードに入力してしまい正しいデータが消えて困ったことがあったので、できれば登録をクリックするまでは保存するか破棄するかを選択できる余地のあるようにしたかったのです。あと勉強の意味も少しあったのですが。 >非連結フォームのレイアウト情報もなく、私にどのように表示しろいうのでしょうか? 非連結フォームはテーブルと全く同じ項目を作っています。テキストボックスの名前や書式も同じにしています。説明不足で申し訳ありません。 >それがダメなら「住所録」と同様のテーブル(ワークテーブル)を用意して非連結フォー >ム上の「コード」を抽出条件にしたクエリを非連結フォームのレコードソースにしてみ >てはどうですか?あるいはSQLで書いてもいいと思います。 これからやってみます。 ありがとうございました。 |
こんにちは。 横から失礼します。 コードの更新後処理イベントで、 下記のようにされては如何でしょう。 Dim DB As Database Dim RS As Recordset Dim strSQL As String Set DB = CurrentDb strSQL = "SELECT * FROM 住所録 WHERE コード = '" & Me![コード] & "'" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset) If RS.EOF = False Then Me![コントロール名1] = RS![フィールド名1] Me![コントロール名2] = RS![フィールド名2] Me![コントロール名3] = RS![フィールド名3] Else Me![コントロール名1] = Null Me![コントロール名2] = Null Me![コントロール名3] = Null End If でも、もっとも簡単だと思うのは、 住所蹈董璽屮襪函ト碓譽侫@璽襯氷柔「僚蚕袁織錙璽D董璽屮襪覆襪發里鰺儖佞靴董「 フォームは、このワークテーブルとの連結フォームにします。 コード入力後、ワークテーブルのレコードを削除し、 住所録テーブルに該当するレコードが存在する場合は、 追加クエリでこのレコードを、住所録テーブルからワークテーブルへ レコードを追加します。 そして、入力完了後の登録ボタンでは、 削除クエリで、住所録テーブル内の同一レコードを削除し、 追加クエリでワークテーブルから住所録テーブルへレコードを追加する。 というような感じですが、如何でしょう。 |
▼MJ さんお返事ありがとうございます。 返信遅くなり申し訳ありません。 下記の方法で上手くできました。 ありがとうございます! > Dim DB As Database > Dim RS As Recordset > Dim strSQL As String > > Set DB = CurrentDb > > strSQL = "SELECT * FROM 住所録 WHERE コード = '" & Me![コード] & "'" > Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset) > > If RS.EOF = False Then > Me![コントロール名1] = RS![フィールド名1] > Me![コントロール名2] = RS![フィールド名2] > Me![コントロール名3] = RS![フィールド名3] > Else > Me![コントロール名1] = Null > Me![コントロール名2] = Null > Me![コントロール名3] = Null > End If ワークテーブルを使う方法はまた試してみます。 本当にありがとうございました。 |
MJ さん、こんにちは。 以前はご教授ありがとうございます。それで下記の方法を自分なりに考えてやとうとしてみました。 しかし、クエリに関してもまだまだ理解が足りないため、どうやったら上手くできるか構成がまとまりません。 もう少し詳しくご説明頂くことはできませんでしょうか? どうか宜しくお願いします。 >フォームは、このワークテーブルとの連結フォームにします。 > >コード入力後、ワークテーブルのレコードを削除し、 >住所録テーブルに該当するレコードが存在する場合は、 >追加クエリでこのレコードを、住所録テーブルからワークテーブルへ >レコードを追加します。 > >そして、入力完了後の登録ボタンでは、 >削除クエリで、住所録テーブル内の同一レコードを削除し、 >追加クエリでワークテーブルから住所録テーブルへレコードを追加する。 |