![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что работает быстрее?
paxer © (2003-07-03 14:36:00)Что работает быстрее при получении значения поля:
s:=q.Fields.FieldByNumber(NumField).AsString;
или
s:=q.Fields[FieldName]?
Anatoly Podgoretsky (2003-07-03 16:04:00) [1]Johnmen © (03.07.03 15:04)
Я добавлю с индексом 0
s:=qFieldName.Value
paxer (2003-07-03 15:56:00) [2]2 serginio
Спасибо. Именно этого мне не хватало для понимания.
Serginio (2003-07-03 15:28:00) [3]Ты наверное про это спрашиваешь:
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;
Смотри исходники.
Johnmen (2003-07-03 15:07:00) [4]К неточностям синтаксиса - не придираться. Это смысл.
Johnmen (2003-07-03 15:04:00) [5]Рейтинг :
s:=qFieldName.AsString; если поле определено в списке полей
s:=q.Fields[FieldIndex];
s:=q.Fields.FieldByNumber(FieldName).AsString;
s:=q[FieldName];
Serginio (2003-07-03 15:01:00) [6]q.Fields[NumField] возвращает TField
а
s:=q.Fields.FieldByNumber(NumField).AsString;
S:=q.Fields[NumField].AsString;
строку
Zacho (2003-07-03 15:00:00) [7]
> paxer (03.07.03 14:54)
Причем здесь теория ? Посмотри исходники.
paxer (2003-07-03 14:54:00) [8]Попробую повторить в длинном цикле. Но как-то когда кто-то знает теорию, то это надежней. И интересней. И полезней.
paxer (2003-07-03 14:52:00) [9]sniknik сказал третью версию, Johnmen сказал, что будет быстрее как в примере 1. Я и хотел, чтобы кто-то обосновал. Или при
s:=q.Fields.FieldByNumber(NumField).AsString;
происходят те же действия, как при
s:=q.Fields[NumField]?
Serginio (2003-07-03 14:51:00) [10]Ты наверное перепутал
s:=q.Fields.[NumField].AsString;
или
s:=q.Fields.FieldByName(FieldName).AsString;
Anatoly Podgoretsky (2003-07-03 14:51:00) [11]paxer (03.07.03 14:36)
А повторить в длинном цикле ну ни как?
Zacho (2003-07-03 14:47:00) [12]
> paxer (03.07.03 14:45)
А в чем противорече-то ? Я нигде не увидел :)
Serginio (2003-07-03 14:45:00) [13]Fields внутри представляет собой массив филдов соответственно обращение лучше производить через индекс а не имя поля. В зависимости от количества полей происходит последовательное сравнение полей причем AnsiCompareText (если бы был бинарный поиск или хэш то не так сказывалось) и получаешь только на этом замедление в разы.
paxer (2003-07-03 14:45:00) [14]Противоречие. А может кто обоснует?
Johnmen (2003-07-03 14:42:00) [15]1
sniknik (2003-07-03 14:40:00) [16]s:=q.Fields[0]