
access2003でSQLServer2008へのリンクテーブルを作成し、
vbaでadoを使ってデータ更新処理をしようとしています。
以下のように記述していますが、
実行後、BやCのテーブルが開かなくなります。
(正確にはインサートしたデータが表示されるであろうページがロックされているような動きです。)
また、その状態からAccessを一旦終了し、再度起動すると、データがインサートされていない状態です。
コミットが効いてないように感じます。
こちら原因としてどんなことが考えられるでしょうか?
ちなみにDAOで動かしても同様でした。
宜しくお願い致します。
以下 コード============================
Set cn = CurrentProject.Connection
Set rst = New ADODB.Recordset
cn.BeginTrans
rst.Open "select key from A", cn, adOpenForwardOnly, adLockReadOnly
Do Until rst.EOF
cne.Execute "insert into B ( aa, bb) select aa, bb from A where key = " & rst!key & " "
cne.Execute "insert into C ( aa, bb) select aa, bb from A where key = " & rst!key & " "
rst.MoveNext
Loop
rst.Close
cn.CommitTrans
cn.Close
set rst = Nothing
set cn = Nothing
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
シロウトなので、詳しいことは知らないので憶測だけど
コミットするまではメモリ上で処理しているんじゃないかな?
お返事遅くなり申し訳ありません。
回答ありがとうございます。
メモリ上というところは理解しているつもりなのですが、
コミットしても反映せず、ロールバックしてもテーブルロックがかかったままになり、
Accessを終了して再度起動するしか解除できなくなってしまいます。
とりあえずはロックタイプの指定を変えることで対処しましたが、
未だに動きが理解できてません・・・
No.1
- 回答日時:
adLockReadOnly
でインサートできるわけないよね。
この回答への補足
ありがとうございます!結果としてご指摘の通り、
rst.Open strSql, cn, adOpenKeyset, adLockOptimistic
でできました!
が、府に落ちてません。。。
まず、adLockReadOnlyが読み取り専用(コピーのようなもの?)で開くということなので
そのレコードセットに対する編集ができないのは分かるのですが
コネクションのExecuteでも書き込みできないのでしょうか?
そもそもExecute自体は通っていましたが、Execute直後からテーブルがロックされ
コミットでも解放されないという現象が不可解に思います。
ちなみにトランザクションを使わない場合、インサートできていたのですが
このプログラムの記述自体が何か不都合な書き方なのでしょうか?
可能性のレベルでも良いのでご指摘頂けますとありがたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
AccessVBAコミットとロールバックの位置
その他(プログラミング・Web制作)
-
クエリ表示と、ADOで抽出したレコードセットが違う
Access(アクセス)
-
ODBCの接続に失敗しました(3146)について
その他(Microsoft Office)
-
-
4
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
5
ODBCリンクの際にACCESSでは読み取り専用にしたい!
Oracle
-
6
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
7
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
8
「RunSQL」と「Execute」の違い
Access(アクセス)
-
9
Access サブフォームでの選択行の取得
その他(データベース)
-
10
更新不可能なクエリに対して更新クエリを実行する方法
Access(アクセス)
-
11
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA セル間のリンク修正につい...
-
VBAでCOPYを繰り返すと、処理が...
-
vba textboxへの入力について教...
-
複数のExcelファイルをマージす...
-
【マクロ】開いているブックの...
-
VBA ユーザーフォーム ボタンク...
-
Excelのマクロについて教えてく...
-
WindowsのOutlook を VBA から...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
ワードの図形にマクロを登録で...
-
Excelのマクロについて教えてく...
-
VBAの質問(Msgboxについて)です
-
えくせるのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
vbaにてseleniumを使用したedge...
-
Excel 範囲指定スクショについ...
-
ExcelのVBAコードについて教え...
-
【マクロ】並び替えの範囲が、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gitでコミットするタイミングが...
-
access adoのトランザクション
-
集計
-
Accessのマクロでモジュールを...
-
Statement ignored というエラー
-
Access VBAで行ラベルが定義さ...
-
sqlplusでヘッダーが付かない
-
キャッシュを使わずにSELECTを...
-
callで順に実行されるプロシー...
-
ODBCリンクの際にACCESSでは読...
-
SQLserver算術オーバーフロ...
-
sqlplusのspoolで空白行出現
-
重複するIDのデータを1行にま...
-
Accessの数値から時間に変換す...
-
SQL文のエラー
-
PL/SQLでSPOOLさせたいのですが...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
【Excel VBA】 WorksheetやRa...
-
ストアドプロシジャからストア...
-
OutlookVBAで作成したマクロに...
おすすめ情報