▼ Mr.XRAYさん
> でも,掲示板等で,ほんとにたまにですがあるんだもん.もん.
いずれにしても、アクセス時間で相当の時間がかかると思われますので
根本的解決はアクセスにかかる時間を減らすことだと思います。
TStringGridなら先ほどのTDBXReaderで速度アップは可能かと。
お手軽なTDBGridでも可能ですが、内部処理が二度手間になるので処理時間
は多少長くなるかもしれません。多分。
但し条件としてはdbExpressが使用できる環境で無いとTDBReaderは使用
できませんので、Enterprise以上が必要です。
少なくとも記載した時間分は早くなるかな!?(43秒→4.4秒)
uses
Data.DB, Data.SqlExpr, Data.DBXCommon;
procedure XXXXXX.LoadData();
var
Comm :TDBXCommand;
Reader :TDBXReader;//前方向専用リーダーです。
begin
//TSQLConnection(SQLConnection1)貼付け!?済として
Comm := SQLConnection1.DBXConnection.CreateCommand;
try
Comm.Text := 'SELECT文';
Reader := Comm.ExecuteQuery;
if Assigned(Reader) then
begin
try
//レコードが空だと最初からループしませんので、レコード有無の判定は不要です.
//TStringGridへの書込みは以下の処理をどうぞ
while Reader.Next do
begin
{
フィールドデータを呼出すにはValueを使う。
Reader.Value[].AsString; 等
[]内はフィールド名か配列値でフィールドを指定
するが、当然配列値を指定した方が早いです。
キャストするときInteger型はDataSet時と指定が
若干異なりますが問題なしです。
なので、後はDataSetと同じ感覚でどうぞ。
}
end;
//CopyReaderToClientDataSet(Reader,ClientDataSet);
{このメソッドで、TDBXReaderからClaientDataSetへ
データを一括して渡す事もできます。
なので、こちらでTDBGridも使えます。
もちろん呼出すレコードに比してそのメソッドの
処理時間はかかりますけど。}
finally
Reader.Free;
end;
end;
finally
Comm.Free;
end;
end;
これで、とっても早く処理ができます。多分。
但しDB2ではUnicodeが使えません。
|