ギリギリ行けるお一人様のライン

フォーカス取得時特定のレコードだけ更新したいため以下のコードを入力しましたが、次のようなエラーが発生してしまいます。
どのように変更すればエラーが発生せず実行できるでしょうか?

VBA
Private Sub 得意先コード_Enter()

得意先コード.Refresh

End Sub


エラー内容
コンパイルエラー:
メソッドまたはデータメンバーが見つかりません

access2021

質問者からの補足コメント

  • hectopascal 様

    丁寧なご回答ありがとうございます。
    いただいたレコードにコードを入力した際エラーが発生してしまいました。

    実行エラー3662:
    IDENTITY列を持つSQLServerテーブルにアクセスする場合
    OpenRecordsetでdbSeeChangesを使用する必要があります。

    エラーがついた場所
    Set rs = db.OpenRecordset("SELECT * FROM 見積 WHERE 得意先コード = '" & Me.得意先コード & "'", dbOpenDynaset)

    今回テーブルとして使う「見積」の主キーが「オートナンバー型」であることが原因だと思いますがどのように変更すればよいでしょうか?

      補足日時:2024/05/28 10:16
  • hectopascal 様

    丁寧なご回答ありがとうございます。
    型によってコードを変えるのはとても大切ですね..........。
    いただいたレコードにコードを入力した際再びエラーが発生してしまいました。

    Set rs = db.OpenRecordset("SELECT * FROM 見積 WHERE 得意先コード = '" & Me.得意先コード & "'", dbOpenDynaset | dbSeeChanges)
    →コンパイルエラー:
    構文エラー:

    Set rs = db.OpenRecordset("見積", dbOpenTable)
    →実行エラー 3219
    無効な処理です。

    どちらも変更したレコードにエラー線がありました。
    エラーが発生せず実行するのは厳しいでしょうか?

      補足日時:2024/05/28 17:04

A 回答 (2件)

エラー3662は、IDENTITY列(主キーがオートナンバー型)を持つSQL Serverテーブルにアクセスする際に、OpenRecordsetでdbSeeChangesを使用する必要があることを示しています。

このエラーを解決するために以下の方法を試してみてください:

レコードセットを更新可能なものに変更:IDENTITY列を持つテーブルにアクセスする場合、dbOpenDynasetではなくdbOpenDynaset | dbSeeChangesを使用する必要があります。以下のように修正してみてください:
Set rs = db.OpenRecordset("SELECT * FROM 見積 WHERE 得意先コード = '" & Me.得意先コード & "'", dbOpenDynaset | dbSeeChanges)
レコードセットの型を変更:オートナンバー型の主キーを持つテーブルにアクセスする場合、レコードセットの型を適切に設定することが重要です。dbOpenDynasetではなく、dbOpenTableを使用する方法もあります。以下のように修正してみてください:
Set rs = db.OpenRecordset("見積", dbOpenTable)
これらの修正を試してみてください。エラーが解消されると、SQL Serverテーブル「見積」にアクセスしやすくなるはずです。
    • good
    • 0

エラーの原因は、「得意先コード」オブジェクトに対して.Refreshメソッドを使用しているためです。

Accessのフォームやレポートでは、フィールドの値を更新するために.Refreshメソッドを使うことはできません。

代わりに、特定のレコードを更新する場合は、次の手順を試してみてください:

フォームのデータソースを特定のレコードに設定します。
更新したいフィールドに新しい値を代入します。
フォームのレコードを更新します(レコードセットの更新)。
例えば、得意先コードが特定のレコードを識別するキーである場合、以下のようなVBAコードを使用できます:

Private Sub 得意先コード_Enter()
Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM YourTableName WHERE 得意先コード = '" & Me.得意先コード & "'", dbOpenDynaset)

If Not rs.EOF Then
rs.Edit
' 更新したいフィールドに新しい値を設定
rs!フィールド名 = 新しい値
rs.Update
End If

rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
上記のコードは、特定の得意先コードに関連するレコードを探し、そのレコードを編集して新しい値を設定し、最後に更新します。お使いのAccessデータベースの構造や具体的な要件に合わせてコードを調整してください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A