Insertが遅いのを早くしたい


高村紗枝  2003-02-04 20:36:54  No: 2791

こんにちは

今、Delphi6
Paradoxを使用してプログラムを作成しています。

それで、質問なんですが、
Tlsit型であらかじめ作っておいたデータを
テーブルにインサートしているのですが
たった、30件ぐらいなのに
ものすごく時間がかかります。

これを回避させるには、いったいどうすればよいでしょうか?

ちなみに、下記のような感じでループさせています。

with QryMaster do begin
  for i := 0 to AList.Count -1 do begin
    DtA := AList.Items[i];
    Insert;
    FieldByName('A').AsInteger := DtA^.A;
    FieldByName('B').AsInteger := DtA^.B;
    FieldByName('C').AsInteger := DtA^.C;
    FieldByName('D').AsInteger := DtA^.D;
    FieldByName('E').AsInteger := DtA^.E;
    FieldByName('F').AsInteger := DtA^.F;
  end;
  post;
end;

識者の方、宜しくお願いいたします。


えび  2003-02-20 22:22:08  No: 2792

誰もレスしないみたいなので。
このソースだけだとまだ何とも言えないかな。
ちなみに何秒くらいかかってますか?
実行前はレコードは0件の状態ですか?


高村紗枝  2003-02-21 18:04:39  No: 2793

はじめまして、えびさん。

時間的には、フィールド6列のデータ30件ぐらいだと、30秒ぐらいかかります。
Insertの処理なので、実行前は、0件です。

テーブルは、サーバとか、Lanで繋がった場所にあるわけではなく、
クライアントにあります。

やりたいことは、TList型に入ってるデータを
テーブルにInsertしたいということなのです。

何卒、宜しくお願いいたします。


えび  2003-02-21 22:12:55  No: 2794

30件ぐらいのデータなら、テーブルの作り方の良し悪しは
あまり考えなくてヨシとして。

先ずは、クエリーとフィールドオブジェクトに何かイベントは
記述してありますか?
フィールドのOnChangeが他のOnchangeを呼び出して延々...
って言うのがたまに有ります。
先ずは、
DtA := AList.Items[i];
Insert;
FieldByName('A').AsInteger := DtA^.A;
FieldByName('B').AsInteger := DtA^.B;


の各行でステップ実行して、時間がかかってるところをチェック
してみましょうか。
後、データベースエクスプローラなどで直接入力した場合に
遅く感じたりしますか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加