• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessで、DoCmd.FindRecordがオートナンバーを間違える)

AccessでDoCmd.FindRecordがオートナンバーを間違える

このQ&Aのポイント
  • AccessでDoCmd.FindRecordを使用してオートナンバーを検索すると、桁数の少ない数字の場合に正しく検索できない現象が発生します。
  • この現象は、オートナンバーの列を一旦削除して再度設けることで一時的に解決しますが、データ更新をすると再度同じ問題が発生します。
  • 具体的な原因や解決策は不明ですが、オートナンバーの桁数に注意して使用するか、他の方法でデータを検索することを検討する必要があります。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

【解決法】 FindRecordメソッドの引数に指定している「acAnywhere」を、「acEntire」に 変更してください。 【説明】 テーブルなどでCtrlキー+Fキーの同時押しをすると、検索用のダイアログが 表示されますが、そこに『検索条件』という枠があると思います。 FindRecordメソッドの第2引数(Match引数)は、ここでの指定に相当します。 具体的には、  acAnywhere = フィールドの一部分  (=Excelの検索のオプションで「セル内容が完全に同一であるものを検索   する」のチェックをオフにした場合と同様)  acEntry = フィールド全体  (=Excelの検索のオプションで上記のチェックをオンにした場合と同様)  acStart = フィールドの先頭 です。 ご質問のコードでは「acAnywhere」が指定されていますので、「3」を指定した 場合には、「3」も「13」も「35」も「213」も条件を満たすことになります。 従って、レコードの表示順などによって、検索結果が変わることになります。 ですので、完全一致での結果を求める場合は、「acEntire」を指定します。 (なお、この引数を省略した場合も、acEntireを指定したのと同じになります:  つまり「DoCmd.FindRecord intNo」でもOk、と) ※フォームを開いた直後に、ご質問のコードを実行すると、先頭レコードから   検索されるので、『txtNo』で昇順で並べ替えられていればご希望の結果に   なるはずですが、逆に降順で並べ替えられていたり、他のフィールドで   並べ替えされている(=txtNoの並びがランダム)場合には、思っていたのと   違う結果が表示されることになります。

yuky-4126
質問者

お礼

回答ありがとうございます。 なるほど!「acAnywhere」や「acEntire」にはそんな意味があったのですね。 コピーしてきて動けばそれで大丈夫と思ってしまうので、そこを注目していませんでした。 ありがとうございました。