質問
MS SQL Server 2000 テーブルにリンクされたフォームにレコードを追加しようとすると、MS Access ADP で次のエラーが発生します。
実行時エラー「31004」:
(AutOnumber)フィールドの値は、保存される前に取得することはできません。
このアクションを実行する前に、(AutOnumber)フィールドを含むレコードを保存してください。注記: 取得した 実際にはエラーのスペルが間違っています。
これが何を意味するか知っている人はいますか?
Web 検索を行ったところ、専門家のみがアクセスできる特定のサイトでのみ答えを見つけることができました。
解決
まず第一に、Experts-Exchange を FireFox で見る場合は、ページの下部にブロックされていない回答が表示されます。
次に、マスター フォームの自動番号/キー フィールドを使用しているサブフォームがフォーム上にありますか?メイン フォームを保存する前に、そのサブフォーム上のデータを保存する (つまり、独自のキーを持つ) 必要がありますか。A と B のデッドロックに陥り、先にお互いを救わなければならない可能性があります。
それ以外は、自動番号フィールドを保存するときに、何らかの方法でそのフィールドにアクセスする必要があります。私が提案できる最善の方法は、コードを 1 行ずつステップ実行することです。
他のヒント
レコードを保存する前に、Identity フィールドの値を変数または他のものに割り当てようとしていますか?
何らかの理由で、アプリはレコードが保存される前に ID フィールドの値を読み取ろうとしており、これにより ID フィールドが生成されます。つまり、行が保存されるまで、自動番号フィールドの値は存在しません。
より詳細に解決するには、より多くのコードを確認するか、このエラーに至る手順について詳しく知る必要があると思います。
データをどのように管理しているか、そして正確に何を行っているかを示すために、コードを数行追加する必要があります。しかし、レコードセットの更新に関連する問題が疑われます。自動採番値がいつ作成されたかを特定できますか?フォーム上のコントロールで使用できますか?新しいレコードを追加するときにこの値がどのように生成されるかを確認するために、この値を表示するコントロールを追加できますか?基になるレコードセットは適切に更新されていますか?いくつかのフォームイベントに me.recordset.update のようなものを追加できますか?OnCurrentのものを試してみます...