掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TIBSQLでまとめてCommitするとフリーズする? (ID:46122)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Firebird1.5、Delphi6、OS(Win7 64bit,XP) TIBSQLを使用してテーブルにUPDATE文を流しています。 テーブルが11個あり、各テーブルにあるKUBUNフィールドを更新しています。 テーブル1と11だけレコード数が多いです。 for文で11個のテーブルに ibsqlClear.SQL.Text := 'UPDATE ' + cmbTable.Items[i] + ' SET KUBUN=''0'' WHERE KUBUN<>''9'' and KUBUN<>''1'''; ibsqlClear.ExecQuery; を流して最後にCommitするという記述になっているのですが、 11個目のテーブルに対してExecQueryを実行した時にフリーズしてしまします。 しかし、これを10個目のテーブルまでExecQueryを実行してCommitを行い、再度StartTransactionをしてから11個目のテーブルにExecQueryを行いCommitすると通ります。 また、PCによっては11個まとめてCommitする方でも通ります。 何かの設定でサイズ制限がありそうな感じなのですがこれは何が原因なのでしょうか。 以下に関係している部分のソースを記述しておきます。 ・11個目テーブルのExecQueryでフリーズするソース if not ibtrnDefault.InTransaction then ibtrnDefault.StartTransaction; for i := 0 to 10 do begin cmbTable.ItemIndex := i; cmbTableChange(nil); if (cmbFilterKey.Items.Count > 0) and (cmbFilterKey.Items[0] = 'KUBUN') then begin ibsqlClear.SQL.Text := 'UPDATE ' + cmbTable.Items[i] + ' SET KUBUN=''0'' WHERE KUBUN<>''9'' and KUBUN<>''1'''; ibsqlClear.ExecQuery; end; end; ibtrnDefault.Commit; ・10個のテーブルと1個のテーブルに分けてCommitするソース if not ibtrnDefault.InTransaction then ibtrnDefault.StartTransaction; for i := 0 to 9 do begin cmbTable.ItemIndex := i; cmbTableChange(nil); if (cmbFilterKey.Items.Count > 0) and (cmbFilterKey.Items[0] = 'KUBUN') then begin ibsqlClear.SQL.Text := 'UPDATE ' + cmbTable.Items[i] + ' SET KUBUN=''0'' WHERE KUBUN<>''9'' and KUBUN<>''1'''; ibsqlClear.ExecQuery; end; end; ibtrnDefault.Commit; if not ibtrnDefault.InTransaction then ibtrnDefault.StartTransaction; ibsqlClear.SQL.Text := 'UPDATE ' + cmbTable.Items[10] + ' SET KUBUN=''0'' WHERE KUBUN<>''9'' and KUBUN<>''1'''; ibsqlClear.ExecQuery; ibtrnDefault.Commit;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.