Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что работает быстрее?


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]


Наверх

Титульная страница Поиск, карта сайта Написать письмо