Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.24;
Скачать: CL | DM;

Вниз

Что работает быстрее?   Найти похожие ветки 

 
paxer   (2003-07-03 14:36) [0]

Что работает быстрее при получении значения поля:
s:=q.Fields.FieldByNumber(NumField).AsString;
или
s:=q.Fields[FieldName]?


 
sniknik ©   (2003-07-03 14:40) [1]

s:=q.Fields[0]


 
Johnmen ©   (2003-07-03 14:42) [2]

1


 
Serginio   (2003-07-03 14:45) [3]

Fields внутри представляет собой массив филдов соответственно обращение лучше производить через индекс а не имя поля. В зависимости от количества полей происходит последовательное сравнение полей причем AnsiCompareText (если бы был бинарный поиск или хэш то не так сказывалось) и получаешь только на этом замедление в разы.


 
paxer   (2003-07-03 14:45) [4]

Противоречие. А может кто обоснует?


 
Zacho ©   (2003-07-03 14:47) [5]


> paxer (03.07.03 14:45)

А в чем противорече-то ? Я нигде не увидел :)


 
Serginio   (2003-07-03 14:51) [6]

Ты наверное перепутал
s:=q.Fields.[NumField].AsString;
или
s:=q.Fields.FieldByName(FieldName).AsString;



 
Anatoly Podgoretsky ©   (2003-07-03 14:51) [7]

paxer (03.07.03 14:36)
А повторить в длинном цикле ну ни как?


 
paxer   (2003-07-03 14:52) [8]

sniknik сказал третью версию, Johnmen сказал, что будет быстрее как в примере 1. Я и хотел, чтобы кто-то обосновал. Или при
s:=q.Fields.FieldByNumber(NumField).AsString;
происходят те же действия, как при
s:=q.Fields[NumField]?


 
paxer   (2003-07-03 14:54) [9]

Попробую повторить в длинном цикле. Но как-то когда кто-то знает теорию, то это надежней. И интересней. И полезней.


 
Zacho ©   (2003-07-03 15:00) [10]


> paxer (03.07.03 14:54)

Причем здесь теория ? Посмотри исходники.


 
Serginio   (2003-07-03 15:01) [11]

q.Fields[NumField] возвращает TField
а
s:=q.Fields.FieldByNumber(NumField).AsString;
S:=q.Fields[NumField].AsString;
строку


 
Johnmen ©   (2003-07-03 15:04) [12]

Рейтинг :
s:=qFieldName.AsString; если поле определено в списке полей
s:=q.Fields[FieldIndex];
s:=q.Fields.FieldByNumber(FieldName).AsString;
s:=q[FieldName];


 
Johnmen ©   (2003-07-03 15:07) [13]

К неточностям синтаксиса - не придираться. Это смысл.


 
Serginio   (2003-07-03 15:28) [14]

Ты наверное про это спрашиваешь:
TDataSet
property FieldValues[const FieldName: string]: Variant read GetFieldValue write SetFieldValue; default;

function TDataSet.GetFieldValue(const FieldName: string): Variant;
var
I: Integer;
Fields: TList;
begin
if Pos(";", FieldName) <> 0 then
begin
Fields := TList.Create;
try
GetFieldList(Fields, FieldName);
Result := VarArrayCreate([0, Fields.Count - 1], varVariant);
for I := 0 to Fields.Count - 1 do
Result[I] := TField(Fields[I]).Value;
finally
Fields.Free;
end;
end else
Result := FieldByName(FieldName).Value
end;

Смотри исходники.


 
paxer   (2003-07-03 15:56) [15]

2 serginio
Спасибо. Именно этого мне не хватало для понимания.


 
Anatoly Podgoretsky ©   (2003-07-03 16:04) [16]

Johnmen © (03.07.03 15:04)
Я добавлю с индексом 0
s:=qFieldName.Value



Страницы: 1 вся ветка

Текущий архив: 2003.07.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
3-77801
chexum
2003-07-02 15:53
2003.07.24
Обработка ошибок ADO


3-77754
Olivka
2003-06-29 16:11
2003.07.24
Использование макросов в FIBPlus


7-78161
Deus
2003-05-15 14:26
2003.07.24
Wipe файла...


14-78088
KPY
2003-07-08 09:34
2003.07.24
как по 50 точкам вычислить функцию


4-78200
yaJohn
2003-05-22 11:21
2003.07.24
Как узнать, где был последний клик мышью