> FieldByName. В плюсах он чуть побыстрей. Если запрос очень легкий, но
> записей много а мы бежим по всем записям и стучим к полям через
> FieldByName... в общем в этом случае то самое "чуть" побыстрей может
> сложиться в цифру 30 процентов. Почему бы и нет.
Понятно. Про тозмоза в FieldByName я как-то забыл. Давно уже в больших
циклах на автомате вот так вот поступаю:
...
var Fld : TIBXSQLVAR;
...
IBSQL.ExecQuery;
Fld := IBSQL.FieldByName('IdDat');
While not IBSQL.Eof do begin
Sum := Sum + Fld.AsXXX;
Next;
end;
Кстати втравился вот, написал тестик:
procedure TForm1.Button1Click(Sender: TObject);
var Fld : TIBXSQLVAR;
i, s : Integer;
st, en : Cardinal;
begin
s := 0;
with IBSQL do begin
ExecQuery;
Fld := FieldByName('Id');
St := GetTickCount;
for i := 0 to 1000000 do
S := S + Fld.AsInteger;
En := GetTickCount;
Label1.Caption := IntToStr(En - St);
St := GetTickCount;
for i := 0 to 1000000 do
S := S + Fields[0].AsInteger;
En := GetTickCount;
Label2.Caption := IntToStr(En - St);
St := GetTickCount;
for i := 0 to 1000000 do
S := S + FieldByName('Id').AsInteger;
En := GetTickCount;
Label3.Caption := IntToStr(En - St);
Close;
end;
end;
Результаты :
1-ый цикл - 94 тика,
2-ой цикл - 141 тик,
3-ий цикл - 4281 тик.
With b/r. Gleb.
--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---