![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MS SQL ADO [D6]
Iggor © (2007-07-17 15:37:00)Добрый день! Пытаюсь создать запрос через ADOQuery вида:
form1.ADOQuery1.SQL.Add('select * from :abc');
form1.ADOQuery1.Parameters[0].Value:='TS_20070611';
form1.ADOQuery1.Open;
выдаёт ошибку...
если без параметра:
form1.ADOQuery1.SQL.Add('select * from TS_20070611);
form1.ADOQuery1.Open;
то всё работает....
подскажите как быть, пожалуйста...
azat27 (2007-07-22 23:31:00) [1]> Iggor (17.07.07 15:37)
var Str,Str1: String;
...
Str1:='TS_20070611';
Str:='select * from ' + Str2;
form1.ADOQuery1.SQL.Text:=Str;
form1.ADOQuery1.Active:=True;
Anatoly Podgoretsky (2007-07-17 19:26:00) [2]> Сергей М. (17.07.2007 17:10:15) [15]
Параметры передаются на сервер отдельно от запроса.
Сервер разбирает только запрос и использует полученые параметры.
Запрос компилируется отдельно.
Запрос вида 'select * from ?' откомпилировать не возможно.
Автору подойдет макроподстановка или склейка.
sniknik (2007-07-17 17:28:00) [3]> А что, OLEDB-провайдер разве не готовый текст запроса получает от АДО на входе ?
если бы так было то смысла в параметрах было бы мало, что самому запрос составить, что на АДО переложить...
нет, передается запрос и коллекция параметров, а вот где это объединяется, на каком этапе, и объединяется ли вообще х.з., от "субд и провайдера зависит ...".
Игорь Шевченко (2007-07-17 17:26:00) [4]Сергей М. © (17.07.07 17:10) [15]
> А что, OLEDB-провайдер разве не готовый текст запроса получает
> от АДО на входе ?
Не обязательно. Если сервер умеет с параметризованными запросами работать, то зачем ADO или провайдер будет ими заниматься, нас па ?
Сергей М. (2007-07-17 17:10:00) [5]
> не сомневайся, проверь
Не на чем, к сож.
А что, OLEDB-провайдер разве не готовыйтекст запроса получает от АДО на входе ?
Я просто не в курсе, но подозреваю ..
sniknik (2007-07-17 17:07:00) [6]> Сомневаюсь ..
не сомневайся, проверь.
sniknik (2007-07-17 17:07:00) [7]> Т.е. СУБД здесь, похоже, абсолютно ни причем.
причем. большинство не поддерживает, VFP OLEDB/ODBC частный случай. может и еще есть но...
Сергей М. (2007-07-17 17:06:00) [8]
> От СУБД и провайдера зависит
Сомневаюсь ..
Игорь Шевченко (2007-07-17 17:04:00) [9]От СУБД и провайдера зависит, можно или нельзя задавать что-либо в качестве параметра.
Сергей М. (2007-07-17 16:57:00) [10]
> Нельзя задавать имя таблицы в качестве параметра
Рискну возразить.
Успешно пользовал сабж в связке ADOConnection(VFPOLEDB) <-> ADODataSet
Ради интереса непосредстевенноперед установкой значения параметра я установил его DataType=ftUnknown и тут же заполучил отказ. Не о нем ли автор ведет речь ? Сдается мне - о нем)... Т.е. СУБД здесь, похоже, абсолютно ни причем.
Плохиш (2007-07-17 16:25:00) [11]
> Iggor (17.07.07 15:37)
Нельзя задавать имя таблицы в качестве параметра.
Сергей М. (2007-07-17 16:21:00) [12]
> Не стоит рассматривать частные случаи
Тем не менее мне самому интересно, действительно ли это "не покатит" для MS SQL OLEDB, потому как для, к примеру, для VFPOLEDB этот конкретный случай (с параметрически задаваемым FROM-clause) вполне успешно "едет и не тарахтит"
Anatoly Podgoretsky (2007-07-17 16:16:00) [13]Не стоит рассматривать частные случаи
Сергей М. (2007-07-17 16:13:00) [14]
> а вот для метаданных ни за что
И для метаданных в ряде случаев "покатит".
Но пока начальник транспортного цеха не озвучил состояние св-ва ParamCheck, разговор на тему "выдает ошибку" попросту лишен смысла.
Anatoly Podgoretsky (2007-07-17 15:54:00) [15]Если непонятно, то сервер получит строку 'select * from ?'
Что ему с ней делать то?
Anatoly Podgoretsky (2007-07-17 15:53:00) [16]Покатит, а вот для метаданных ни за что.
Ega23 (2007-07-17 15:51:00) [17]
form1.ADOQuery1.Open;
использу1
form1.ADOQuery1.Active:=False;
form1.ADOQuery1.Active:=True;
Пипец. Вопрос: зачем?
> form1.ADOQuery1.SQL.Add('select * from :abc');
Я, откровенно говоря, не сильно параметры ковырял. Но вроде как параметром должно считаться то, что после =: стоит. Голый параметр, вроде, не прокатит.
gentos (2007-07-17 15:50:00) [18]
> AZIZE ©
не знаешь, так лучше не пиши :)
AZIZE (2007-07-17 15:47:00) [19]
> выдаёт ошибку...
какую?
Попробуй кажждый раз перед
form1.ADOQuery1.Parameters[0].Value:='TS_20070611';
удалять и добавлять параметр
и вместо
form1.ADOQuery1.Open;
использу1
form1.ADOQuery1.Active:=False;
form1.ADOQuery1.Active:=True;