- ベストアンサー
AccessでDoCmd.FindRecordがオートナンバーを間違える
- AccessでDoCmd.FindRecordを使用してオートナンバーを検索すると、桁数の少ない数字の場合に正しく検索できない現象が発生します。
- この現象は、オートナンバーの列を一旦削除して再度設けることで一時的に解決しますが、データ更新をすると再度同じ問題が発生します。
- 具体的な原因や解決策は不明ですが、オートナンバーの桁数に注意して使用するか、他の方法でデータを検索することを検討する必要があります。
- みんなの回答 (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の並びがランダム)場合には、思っていたのと 違う結果が表示されることになります。
お礼
回答ありがとうございます。 なるほど!「acAnywhere」や「acEntire」にはそんな意味があったのですね。 コピーしてきて動けばそれで大丈夫と思ってしまうので、そこを注目していませんでした。 ありがとうございました。