Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルEXECUTEにはクエリ名が必要というエラーについて
記事No172281
投稿日: 2018/06/05(Tue) 16:11
投稿者ココネ
OS:windows7
Access Version:2013

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim a as long
Dim counter as long

On Error GoTo Catch 'エラーが起きたらCatchへ
cn.BeginTrans

co = DCount("人数", "テスト")

For s = 1 To co

rs.Update (名前), StrConv(名前), vbWide)

If counter = 1000 Then

cn.CommitTrans ←※1:2000件目になると"EXECUTEにはクエリ名が必要"というエラーが

counter = 0

End If

counter = counter + 1

Next s

Catch:
cn.Rollback
cn.Close: Set cn = Nothing
Resume Exit_Catch

End sub

上記のようにDcountでテーブルの人数(1万111件)を取得して、
for nextで処理を行い1000件ずつコミットしようと思ったのですが、
2000件目のコミットに進むと

※1:"EXECUTEにはクエリ名が必要"というエラーが表示されます。

上記コード以外に最終的にクエリを作成するSQLがあるのですが、
構文に間違いはありませんでした。
※for〜next、トランザクションを行わない場合、正常に処理が完了クエリの結果も書き出されます。

同様のエラーの過去ログを参照し、"DBEngine.SetOption dbMaxLocksPerFile, 20000"
もコードに書き込みましたが結果は特に変わりませんでした。

何か原因はありますでしょうか?

タイトルRe: EXECUTEにはクエリ名が必要というエラーについて
記事No172282
投稿日: 2018/06/05(Tue) 21:28
投稿者よろずや
Connection オブジェクトの Attributes プロパティによっては、CommitTrans メソッドまたは RollbackTrans メソッドを呼び出すと新規トランザクションが自動的に始まる場合があります。Attributes プロパティが adXactCommitRetaining に設定されている場合は、
CommitTrans メソッドを呼び出すと、自動的に新規トランザクションが開始されます。
Attributes プロパティが adXactAbortRetaining に設定されている場合は、
RollbackTrans メソッドを呼び出すと、自動的に新規トランザクションが開始されます。

タイトルRe^2: EXECUTEにはクエリ名が必要というエラーについて
記事No172283
投稿日: 2018/06/06(Wed) 12:15
投稿者ココネ
> Connection オブジェクトの Attributes プロパティによっては、CommitTrans メソッドまたは RollbackTrans メソッドを呼び出すと新規トランザクションが自動的に始まる場合があります。Attributes プロパティが adXactCommitRetaining に設定されている場合は、
> CommitTrans メソッドを呼び出すと、自動的に新規トランザクションが開始されます。
> Attributes プロパティが adXactAbortRetaining に設定されている場合は、
> RollbackTrans メソッドを呼び出すと、自動的に新規トランザクションが開始されます。

ご返信ありがとうございます!

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim a as long
Dim counter as long

Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset

On Error GoTo Catch 'エラーが起きたらCatchへ
cn.BeginTrans


接続はCurrentProjectオブジェクトなので、

>Connection オブジェクトの Attributes プロパティによっては、

Connection オブジェクトとは別物ということでしょうか?

タイトルRe^3: EXECUTEにはクエリ名が必要というエラーについて
記事No172284
投稿日: 2018/06/06(Wed) 19:01
投稿者よろずや
> 接続はCurrentProjectオブジェクトなので、
>
> >Connection オブジェクトの Attributes プロパティによっては、
>
> Connection オブジェクトとは別物ということでしょうか?

CommitTrans メソッドを呼び出したら、
次のトランザクションを開始しなければいけません!!
その開始方法として、BeginTransを呼び出す方法と、
自動的に次のトランザクションを開始する方法の2通りが有る為、
ネット検索の際はその辺を注意して読まないといけない、ということです。

タイトルRe^4: EXECUTEにはクエリ名が必要というエラーについて
記事No172285
投稿日: 2018/06/07(Thu) 15:59
投稿者ココネ
> > 接続はCurrentProjectオブジェクトなので、
> >
> > >Connection オブジェクトの Attributes プロパティによっては、
> >
> > Connection オブジェクトとは別物ということでしょうか?
>
> CommitTrans メソッドを呼び出したら、
> 次のトランザクションを開始しなければいけません!!
> その開始方法として、BeginTransを呼び出す方法と、
> 自動的に次のトランザクションを開始する方法の2通りが有る為、
> ネット検索の際はその辺を注意して読まないといけない、ということです。

ありがとうございます!
……結局解決出来ていないのですが、もう少し試行錯誤してみます。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る