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

Вниз

Как обратится к значению поля в DataSet если имя поля неизвестно?   Найти похожие ветки 

 
II   (2003-07-23 16:50) [0]

Сабж


 
Sandman25 ©   (2003-07-23 16:52) [1]

Fields[0].AsString


 
Anatoly Podgoretsky ©   (2003-07-23 16:58) [2]

А зачем обращаться к неизвестным полям?


 
Sandman25 ©   (2003-07-23 17:06) [3]

Anatoly Podgoretsky © (23.07.03 16:58)

select count(*) from table
Быстрее будет Fields[0]

чем

select count(*) num from table
FieldByName("num")


 
VAleksey ©   (2003-07-23 17:09) [4]

Немного непонятный вопрос. Неплохо было бы описать ситуацию при которой он возник.


 
MsGuns ©   (2003-07-23 17:11) [5]

>Sandman25 © (23.07.03 17:06)
>>Anatoly Podgoretsky © (23.07.03 16:58)
>>select count(*) from table
>Быстрее будет Fields[0]

Бістрее не всегда лучше. Представляю прогу, в которой есть такой фрагмент:

Edit17.Text := Query1.Fields[35].Value;
Edit18.Text := Query1.Fields[16].Value;
Edit34.Text := Query1.Fields[30].Value;
Edit2.Text := Query1.Fields[8].Value;

;))





 
Sandman25 ©   (2003-07-23 17:16) [6]

MsGuns © (23.07.03 17:11)

Я использую только Fields[0] и только в случае агрегатных функций.
Иногда вообще получается что-то типа
EditFamily.Text := Query1Family.AsString;
EditAge.Text := Query1Age.AsString;
Еще быстрее, чем Fields[0] :)


 
Anatoly Podgoretsky ©   (2003-07-23 17:19) [7]

MsGuns © (23.07.03 17:11)
Быстрее тут не является критерием, если надо быстрота то делается иначе. А вот представить такую программу не хотелось бы, это верный путь к могиле.

Sandman25 © (23.07.03 17:16)
Именно быстрее EditFamily.Text := Query1Family.AsString;
а вот еще быстрее EditFamily.Text := Query1Family.Value;


 
II   (2003-07-23 17:20) [8]

Общий OnDblClick для трех гридов в котором нужно обратится ко второму полю, названия полей разные


 
Sandman25 ©   (2003-07-23 17:23) [9]

Anatoly Podgoretsky © (23.07.03 17:19)

Вы уверены, что Value быстрее?
Иду смотреть исходники...


 
Reindeer Moss Eater   (2003-07-23 17:25) [10]

AsString - метод, но при Value используется Variant.
Так что надо мерять.


 
Sandman25 ©   (2003-07-23 17:28) [11]

function TStringField.GetAsVariant: Variant;
var
S: string;
begin
if GetValue(S) then Result := S else Result := Null;
end;

function TStringField.GetAsString: string;
begin
if not GetValue(Result) then Result := "";
end;


AsString получается чуть-чуть быстрее :)


 
Reindeer Moss Eater   (2003-07-23 17:29) [12]

Так этот вариант еще в дальнейшем присвоении строке участвует


 
Sandman25 ©   (2003-07-23 17:30) [13]

Напутал.
Для TStringField Value имеет тип string и вызывает GetAsString, так что
TStringField.Value и TSTringField.AsString - одно и тоже.


 
Anatoly Podgoretsky ©   (2003-07-23 17:36) [14]

Например TStringField : string не вариант и также для других TField

Query1Family это явный TField, вот Fields[n] это как раз Variant, со всеми вытекающими от сюда последствиями, даже FindField и то будет быстрее и безопаснее.


 
Sandman25 ©   (2003-07-23 17:42) [15]

Anatoly Podgoretsky © (23.07.03 17:36)

property Fields[Index: Integer]: TField read GetField; default;

Query1Family это явный T StringField



 
Anatoly Podgoretsky ©   (2003-07-23 17:54) [16]

TDataset.Fields[Index: Integer]: TField; ->
TField.Value property Value: Variant

TStringField.Value: String;


 
Anatoly Podgoretsky ©   (2003-07-23 17:57) [17]

Второй вариант проверки, попробуй присвоить Fields[n] переменной, где значение соответствующего поля равно null, получишь исключение о не возможности преобразовать Variant.


 
Sandman25 ©   (2003-07-23 18:21) [18]

Так, давайте с самого начала.

Anatoly Podgoretsky © (23.07.03 17:19)
>Именно быстрее EditFamily.Text := Query1Family.AsString;
>а вот еще быстрее EditFamily.Text := Query1Family.Value;

Почему? В обоих случаях вызывается TStringField.GetAsString

Для случая Query.Fields[0].AsString вызывается тот же самый TStringField.AsString (function GetAsString: string; virtual;), если мы говорим о поле Family.
Где тут Variant?

Anatoly Podgoretsky © (23.07.03 17:57)
А вот это уже совсем другое дело - GetAsString не может создать строку результата.


 
Johnmen ©   (2003-07-23 18:24) [19]

А вот я думаю, что явное преобразование типов быстрее неявного (по кр.мере, в данном случае).
А проверять - лень :)


 
VAleksey ©   (2003-07-23 19:28) [20]

О елки - палки, о чем угодно, только не по теме :-)))


 
Anatoly Podgoretsky ©   (2003-07-23 19:30) [21]

Ну я как то давно проверял (D3), поэтому и говорю
PerdistentField.Value оказался самым быстрым, .asXXX это уже дополнительные преобразования или как минимум проверки.
Про остальные случаи не говорю, поскольку они или сводятся к этим или происходит преобразование из Variant


 
Anatoly Podgoretsky ©   (2003-07-23 19:33) [22]

VAleksey © (23.07.03 19:28)
За исключением твоего сообщения, остальные по теме, с учетом темной обстановки. И учитывая, что автор продолжает молчать, не приводя дополнительной информации.


 
VAleksey ©   (2003-07-23 19:35) [23]


> Anatoly Podgoretsky © (23.07.03 19:33)

Ага.. Абсолютно неизвестно имя поля у объекта Query1Family ;-).


 
II   (2003-07-23 20:23) [24]

Ничего я не молчу
я же вот писал:
Общий OnDblClick для трех гридов в котором нужно обратится ко второму полю, названия полей разные

Я остановился на варианте через Fields[2]

TDBGridEh(Sender).DataSource.DataSet.Fields[2].AsInteger


 
sniknik ©   (2003-07-23 23:38) [25]

II (23.07.03 20:23)
> Ничего я не молчу
> я же вот писал:
> Общий OnDblClick для трех гридов ...
так, для информации OnDblClick не тип поля у таблици, чего в основном и хотели знать, а событие у визуальных компонент двойного клика мышью (очень информативно :о)), считай что промолчал...).


 
Sandman25 ©   (2003-07-24 10:25) [26]

II (23.07.03 20:23)

Если понадобится обращаться к разным полям для разных гридов, можно будет использовать что-то типа
TDBGridEh(Sender).DataSource.DataSet.Fields[TDBGridEh(Sender).Tag].AsInteger



 
интересующийся   (2003-07-24 10:41) [27]

II
>Общий OnDblClick для трех гридов в котором нужно обратится ко >второму полю, названия полей разные

а может к полю второй колонки грида?


 
Sandman25 ©   (2003-07-24 10:46) [28]

интересующийся (24.07.03 10:41)

А может к третьей? :)


 
интересующийся   (2003-07-24 10:51) [29]

> Sandman25 ©
а вдруг путает?



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

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

Наверх




Память: 0.53 MB
Время: 0.01 c
14-58458
Bless
2003-07-23 10:59
2003.08.18
Удаление из многих таблиц


14-58477
inspirion
2003-07-23 08:02
2003.08.18
Проблемы с резервным копированием


14-58498
wonderu
2003-08-01 15:42
2003.08.18
Освобождение памяти


14-58391
Kocmoc
2003-08-04 14:47
2003.08.18
Сортировка StringGrid


14-58430
Delphi5.01
2003-08-02 20:51
2003.08.18
Pravilnoe osveshenie?