ACCESS初心者です。
既にレコードが存在すテーブルで、DBを更新モードで開き、SELECT句を実行すると、更新モードから読み込みモードになり、更新/追加ができなく困っています。
以下にサンプルコーディングを掲載します。
SQLを実行する前と、実行後に
LockType
を表示したところ、
実行前は「3」更新可
実行後は「1」更新不可
となります。
どのようにすれば「LockType」が変らないようにできるでしょうか。
よろしくお願いします。
----------------------------------------------------------------------------------------------------------------------
Dim cmd As New ADODB.Command
Dim rs_issues As ADODB.Recordset
Dim adoCn As Object 'ADOコネクションオブジェクト
Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクト
adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" &
"データベース名"
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = adoCn
Set rs_issues = New ADODB.Recordset
rs_issues.Open "T_issues", db, adOpenDynamic, adLockOptimistic
cmd.CommandText = "SELECT *FROM T_issues WHERE i_チケット番号=123456"
Debug.Print rs_issues.LockType '(1)LockType=3
Set rs_issues = cmd.Execute
Debug.Print rs_issues.LockType '(1)LockType=1
途中から失礼します。
これ、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
お礼
ご回答ありがとうございます。 参考でお知らせいただいた情報は、今回調べた最中に読む機会がありましたが、よく理解できませんでした。 追加の質問で申し訳ないのですが、 テーブルが読み取り専用になった後、テーブルをクローズし、更新モードでオープンすれば読み込んだレコードセットに対して書き込みはできるのでしょか。 よろしくおねがいします。