Форум: "Потрепаться";
Текущий архив: 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