Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.012 c
1-77840
Ahmad K
2003-07-11 13:05
2003.07.24
Текст в определенное место в текстовом файле.


14-78102
k-man
2003-07-07 14:27
2003.07.24
dBase


3-77794
BoxTer
2003-07-02 12:42
2003.07.24
ADO запрос из таблиц,нах. в разных местах


1-77867
Sour
2003-07-10 10:44
2003.07.24
Как работать с реестром напрямую, не используя TRegistry


7-78181
zom
2003-05-15 12:47
2003.07.24
Как узнать текущее разрешение экрана?




   Наверх