Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли получить список полей запроса не выполняя оный? [D7, IB6.x]


Страницы:   1 2

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 - тоже вариант.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо