Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.08.18;
Скачать: [xml.tar.bz2];

Вниз

Как обратится к значению поля в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.003 c
14-58487
II
2003-07-23 15:31
2003.08.18
Как сделат всgлывающее окошко при наведении на ячейку в TDBGridEh


14-58441
Bill Gates
2003-08-01 19:59
2003.08.18
Windows must live!


14-58396
paxer
2003-08-04 13:45
2003.08.18
Ресурсы для компонента


14-58431
acsoft
2003-08-02 08:04
2003.08.18
Голосование К какой возрастной категории Вы принадлежите ?


14-58486
Till
2003-07-23 15:44
2003.08.18
Oracle to Dbf





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский