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;
ちなみにフリーズが発生するPCで、その操作を別のアプリ、たとえば、
コマンドライン isql 等 で実行した場合、正しく動作しますか?
あと、関係ないかもしれませんが、
・Firebird は Ver.1.5.6ですか?
・Delphi 6 は Update2 + RTL アップデート が適用済みですか?
・Delphi 6 の IBX のバージョンは6.11ですか?
それと、
特定のPCでlocalhostのGDBへのアクセスが遅い原因は?
https://www.petitmonte.com/bbs/answers?question_id=8280
では、
>原因はInterbaseが起動していたため
とありますが、GDS32.DLL が Firebirdのものではなく、InterBaseのものだったり、はないですか?
あと、
特定のPCでlocalhostのGDBへのアクセスが遅い原因は?
https://www.petitmonte.com/bbs/answers?question_id=8280
で、DEKOさんが書かれていますが、まだ、拡張子がGDBのままであれば、FDB 等に変更してみるのも
よいかもしれません。
ツイート | ![]() |