- ベストアンサー
ACCESS2010でSELECTの問題
- ACCESS初心者の方が、既にレコードが存在するテーブルでDBを更新モードで開いてSELECT句を実行すると、更新モードから読み込みモードになり、更新や追加ができない問題が発生します。
- LockTypeの値が実行前は「3」(更新可)であるのに対し、実行後は「1」(更新不可)となっていることが確認されています。
- 解決策としては、ADODB.RecordsetオブジェクトのLockTypeプロパティを設定することで、問題を回避することができます。
- みんなの回答 (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)
本来 Command オブジェクトや Connection オブジェクトの Excecute メソッドは Access でいう所のアクション クエリのようにレコード操作のためにあり、基本的に結果のレコードセットを返さない事を想定しています。 そのため Execute で返された Recordset オブジェクトは読み取り専用となります。 https://msdn.microsoft.com/ja-jp/library/cc376797.aspx
お礼
ご回答ありがとうございます。 参考でお知らせいただいた情報は、今回調べた最中に読む機会がありましたが、よく理解できませんでした。 追加の質問で申し訳ないのですが、 テーブルが読み取り専用になった後、テーブルをクローズし、更新モードでオープンすれば読み込んだレコードセットに対して書き込みはできるのでしょか。 よろしくおねがいします。