• ベストアンサー

レコードの移動

こんにちは。お願いします。いつもスイマセン。 入力フォームの[ID]に番号を入力したら、対応するレコードに移動して欲しいのです。 ([ID]の書式は数値で、小数点以下は0。主キーにしています。) ここに番号を入れ、Enterキーを押すと、レコードが移動して欲しいです。 (オプションで、Enterキー入力後の動作は、次のフィールドにしてますけども、  このままでいいのかも試したけど分かっていません。) [ID]のテキストボックスのプロパティでは、 イベントの更新後の処理に、マクロ(レコードの検索>次を検索)を 設定しましたが、駄目です。 お分かりいただけたか不安ですが、 カーソルが、[ID]にある状態で、番号を入力して、 検索結果のレコードに移動できるように、望みたいのであります。

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

IDのテキストボックスの更新後の処理にイベントプロシジャで Private Sub ID_AfterUpdate() Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[ID] = " & Str(Me![ID]) Me.Bookmark = rs.Bookmark End Sub この記述でIDに入力したコードと同じレコードをフォームに表示することが出来ます。

yama3desu
質問者

補足

O_cyanさん、いつもお世話になるばかりでスイマセン。ありがとうございます。 お教えの通りやってみました。 実行時エラー '3022': インデックス、主キー、またはリレーションシップで値が重複しているの で、テーブルを変更できませんでした。重複する値のあるフィールドの値 を変更するか、インデックスを削除してください。または重複する値を使 用できるように再定義してください。 となりまして、デバッグを押下すると、 Me.Bookmark = rs.Bookmark を示します。 (実際は、[ID]でなく、[整理番号]としているのですが、  これは、置き換えたらいいだけですよね。) その後に、入力を続けようとすると、 Update または CancelUpdate メソッドには、対応する AddNew または Edit メソッドが必要です とのエラーが出ています。 私の設定が拙いと思うのですが、何処を見ればいいのでしょう。お願いします。

その他の回答 (2)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 横から口を挟みますが。 入力フォームということですが、[ID]もユーザーが入力するのですか? 主キーになっているのなら、普通はオートナンバーとか、自動で付けられるようにしますが。 まあ、[ID]もユーザーが入力するとして、この入力するための[ID]テキストボックスと、検索用の[ID]テキストボックス(非連結)は別にしないといけません。 入力用の[ID]に、検索するために入力したとしても、それは新規レコードの作成とか、既存レコードの変更と見なされるわけです。 で、レコード移動時に保存しようとすると、検索用に入れたIDはおそらく、既存のIDのはずですので、当然重複してエラーになります。 とにかく、検索用の[ID]テキストボックスは別に用意することです。 O_cyanさんの言うように、フォームのヘッダに検索用の[ID]テキストボックスを置くのがいいでしょう。 検索用のフォームを作るのもいいかも知れません。 あと、別の方法ですが、入力用の[ID]テキストボックスにカーソルを置いて、 メニューの[編集]→[検索]をクリックすると、検索ダイアログが表示され、IDで検索することが出来ます。 また、これとまったく同じ動作を、コマンドボタンのクリックイベントに書くことも出来ます。 この場合、フォーカスの移動も記述すれば、[ID]テキストボックスにカーソルを移動する必要もなくなります。 コードは以下のようになります。 Private Sub ID検索_Click()   Me!ID.SetFocus   '検索ダイアログボックスの表示   DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70 End Sub

yama3desu
質問者

お礼

maruru01さん、ありがとうございます。  | 入力フォームということですが、[ID]もユーザーが入力するのですか? 入力と申しますか、検索を。ということです。説明不足でスイマセン。 レコードを移動したい。そのために、ナンバーを入力したい。ということです。  | 主キーになっているのなら、普通はオートナンバーとか、自動で付けられ るようにしますが。 エッ、それは知りませんでした。オートナンバー型を数値型に変えてます。 (欠番の埋め合わせや、ナンバーと氏名が合わなくなったのを編集する為に。  後で、オートナンバーにしようと思いましたが、面倒そうなので、中止してます。)  | まあ、[ID]もユーザーが入力するとして、この入力するための[ID]テキスト  | ボックスと、検索用の[ID]テキストボックス(非連結)は別にしないといけません。 ありがとうございます。その方向でも、やってみています。が、まだ解決しません…。  | あと、別の方法ですが、入力用の[ID]テキストボックスにカーソルを置い て、  | コードは以下のようになります。 これも、使えますね。フォーカスを移動さすのは、是非取り入れようと思います。 しかし、やはり、当初からの希望を生かしたいと思いながら、 もう少し、頑張ってみます。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

#1の記述はフォームのヘッダにIDのテキストボックスがあり詳細にレコードがある様な フォームでヘッダのIDに入力したキーのレコードを検索するはずなのですが。 単票シート型でも帳票シート型のフォームでも使えるはずなんです。 IDは重複するのですか?

yama3desu
質問者

お礼

単票シート型、でもなく、帳票シート型でもありません。 Excellでセルに入力したシートをインポートして、 その後フォームを整形しました。 全てのフィールドが、詳細部分にあります。 拙いのでしょうか?今、IDをフォームヘッダに移してみましたが、変化ありません。 この辺で、最初からおかしいのかも知れません。 もう一度、最初から、ファイルを作成しなおそうかとも思います。 > IDは重複するのですか? ということでありますが、IDに同じ番号は、ありません。 オートナンバーから、数値型に変更したばかりですし、 確認もしました。やはり、分かりません。ありがとうございました。

yama3desu
質問者

補足

テーブルのデザインビューで、 標準タブのインデックスをいいえにしたり、 はい(重複なし)にしたりして、試しました。 いろいろ統一されていないせいもありますが、 実は、O_cyanさんにお教えいただいた方法で、 上手く行っています。 しかし、上手く行かない場合もあります。 その違いが分かりません。 ですので、ファイルを最初からやり直してみます。 何日か後で、又、上手く行かなかったら、質問します。 スイマセンでした。ありがとうございました。