![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли получить список полей запроса не выполняя оный? [D7, IB6.x]
sohat © (2004-01-13 12:11:00)
Мне нужно вытащить поля запроса, но при этом запрос не выполнять (вдруг он будет здоровый :))) или параметры еще чего доброго попросит ). Можно ли это сделать и как?
Vlad (2004-01-15 12:55:00) [1]
> dummy (15.01.04 12:53) [34]
Спасибо, друг!
Я так долго искал, где бы нарыть такую классную процедуру! :-)
dummy (2004-01-15 12:53:00) [2]
Thanks! Сделал, может, кому сгодится:
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
i: integer;
begin
s:= "";
for i:= 0 to table1.FieldDefs.Count-1 do
s := s+table1.FieldDefs[i].Name+#13+#10;
ShowMessage(s);
end;
kaif (2004-01-14 01:21:00) [3]
По-моему лучше всего взглянуть в исходный текст компонентов IBX и посмотреть, как они извлекают список полей до того, как запрос будет открыт. Насколько я помню, они обращаются к системным таблицам IB.
Johnmen (2004-01-13 22:35:00) [4]
>Reindeer Moss Eater © (13.01.04 19:56)
Когда я говорил, что запрос будет выполнен, я не имел в виду выполнение именно запроса select * ... !
А имел в виду, что будет выполнен "какой-то" запрос, на основании выполнения которого будут получены сведения о полях. И этот "какой-то" запрос зависит от движка, от компонент доступа. И выполнится он неявно.
Reindeer Moss Eater (2004-01-13 19:56:00) [5]
Запрос будет выполнен сервером, но фетча не будет.
На клиенте не будет записей.
Это все равно, что запрос не выполнился (с точки зрения клиента)
Sandman25 (2004-01-13 18:34:00) [6]
Согласен. При переходе на другую СУБД не надо будет ничего изменять, если использовался стандарт SQL.
Johnmen (2004-01-13 18:31:00) [7]
>Sandman25 © (13.01.04 18:28)
Не использовал. Пари отменяется...:)
И остальные, тобою указанные конструкции, не использую. Т.к. они очень специфичны.
Sandman25 (2004-01-13 18:28:00) [8]
[26] Johnmen © (13.01.04 18:23)
Кстати, держу пари, что при работе на Informix ты не использовал TEMP TABLE WITH NO LOG.
Аналогично я не привык использовать update table1, table2 или select from (select union select)
Sandman25 (2004-01-13 18:26:00) [9]
[26] Johnmen © (13.01.04 18:23)
Насчет Informix я говорил, имея ввиду сегодняшний диспут о полезности временных таблиц. Посмотрим, что будет завтра :)
Johnmen (2004-01-13 18:23:00) [10]
>Sandman25 © (13.01.04 18:19)
Ну причем же здесь Informix ????? (Тем более, что и с ним я тоже работал)
Я не говорил, что не будет. Я намекал, что запрос будет выполнен в любомслучае !
Наверное, все-таки, 13-е. Е-е...:)
Sandman25 (2004-01-13 18:19:00) [11]
[23] Vlad © (13.01.04 18:13)
Если их нет, то, возможно, анализом SQL занимается BDE. Не зря у него свой особый SQL.
[24] Johnmen © (13.01.04 18:14)
Сегодня 13-ое :)
А если серьезно, то между IB и Informix огромная разница в подходах, наложившая отпечаток на наше мировоззрение, мироощущение и мировосприятие :)
Johnmen (2004-01-13 18:14:00) [12]
>Sandman25 © (13.01.04 18:03)
Что-то я тебя сегодня не понимаю... Ты о чем ? А я о чем ?
:)))
Vlad (2004-01-13 18:13:00) [13]
> Sandman25 © (13.01.04 18:03) [21]
А если их нет (системных таблиц) ? :-)
> Reindeer Moss Eater © (13.01.04 18:11) [22]
Запрос выполняется. Это легко проверить. Напиши какой нибудь неоптимизированный запрос по огромной таблице и попробуй сделать FieldDefs.Update. Сколько этот апдейт времени займет ?
Reindeer Moss Eater (2004-01-13 18:11:00) [14]
Если запрос выполняется, то где хотя бы одна запись?
Sandman25 (2004-01-13 18:03:00) [15]
[20] Johnmen © (13.01.04 18:01)
Я думаю, что будет. Как показал TSQLMonitor, при работе через DBExpress если не прописаны явно Fields, то перед выполнением запроса генерируются и выполняются запросы к системным таблицам, для определения типов полей.
Johnmen (2004-01-13 18:01:00) [16]
>Reindeer Moss Eater © (13.01.04 17:55)
Откуда будет получен ? Без запроса то...
Vlad (2004-01-13 18:00:00) [17]
> Reindeer Moss Eater © (13.01.04 17:55) [18]
Запрос будет послан на сервер, другое дело, что DataSet при этом не будет открыт.
Reindeer Moss Eater (2004-01-13 17:55:00) [18]
TDataSet.FieldDefs.Update
Будет ли получен список полей?
Будет.
Будет ли выполняться запрос?
Не будет.
sohat (2004-01-13 15:10:00) [19]
Если эта секция вообче есть :)
Vlad (2004-01-13 15:06:00) [20]
> я думал можно получить список полей посредством TDataSet
Сказали же - можно.
DataSet.FieldList
Но вот только откуда DataSet по-твоему возьмет этот список полей без запроса на сервер ? DataSet, он ведь не ясновидящий :-)
Или, если есть лишнее время, займись разбором строки, а именно секции where - тоже вариант.