> 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. 



--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---

Ответить