Insertが遅いのを早くしたい


高村紗枝  2003-02-04 20:36:54  No: 2791  IP: [192.*.*.*]

こんにちは

今、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  IP: [192.*.*.*]

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

編集    削除
高村紗枝  2003-02-21 18:04:39  No: 2793  IP: [192.*.*.*]

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

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

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

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

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

編集    削除
えび  2003-02-21 22:12:55  No: 2794  IP: [192.*.*.*]

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

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


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

編集    削除