• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESS2010でSELECTの問題)

ACCESS2010でSELECTの問題

このQ&Aのポイント
  • ACCESS初心者の方が、既にレコードが存在するテーブルでDBを更新モードで開いてSELECT句を実行すると、更新モードから読み込みモードになり、更新や追加ができない問題が発生します。
  • LockTypeの値が実行前は「3」(更新可)であるのに対し、実行後は「1」(更新不可)となっていることが確認されています。
  • 解決策としては、ADODB.RecordsetオブジェクトのLockTypeプロパティを設定することで、問題を回避することができます。

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

  • ベストアンサー
回答No.2

途中から失礼します。 これ、ADOに参照設定をしていますよね? こんな感じでどうでしょ。 Sub test() Dim rs_issues As ADODB.Recordset Dim adoCn As ADODB.Connection 'ADOコネクションオブジェクト Dim sSql As String Set adoCn = New ADODB.Connection adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ "データベース名" Set rs_issues = New ADODB.Recordset rs_issues.CursorLocation = adUseClient sSql = "SELECT * FROM T_issues WHERE i_チケット番号=123456" rs_issues.Open sSql, adoCn, adOpenDynamic, adLockOptimistic Debug.Print rs_issues.LockType '(1)LockType=3 rs_issues!あれ = "昼飯" rs_issues!いつ = Now rs_issues.Update rs_issues.Close: Set rs_issues = Nothing Set adoCn = Nothing End Sub

その他の回答 (1)

  • okgoo3
  • ベストアンサー率74% (20/27)
回答No.1

本来 Command オブジェクトや Connection オブジェクトの Excecute メソッドは Access でいう所のアクション クエリのようにレコード操作のためにあり、基本的に結果のレコードセットを返さない事を想定しています。 そのため Execute で返された Recordset オブジェクトは読み取り専用となります。 https://msdn.microsoft.com/ja-jp/library/cc376797.aspx

takechan1117
質問者

お礼

ご回答ありがとうございます。 参考でお知らせいただいた情報は、今回調べた最中に読む機会がありましたが、よく理解できませんでした。 追加の質問で申し訳ないのですが、 テーブルが読み取り専用になった後、テーブルをクローズし、更新モードでオープンすれば読み込んだレコードセットに対して書き込みはできるのでしょか。 よろしくおねがいします。

関連するQ&A