![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обращение к параметру в SQL запрос по имени
Константин © (2008-05-19 20:55:00)Доброго времени!
необходимо задать значение параметра в sql запрос по его имени.
в инете нашел пример такого обращенияADOQuery2.ParamByName('p0').Value:=
но при компиляции выдается ошибка.
Есть ли другой способ?
sniknik (2008-05-20 08:47:00) [1]> Что ты подразумеваешь под отсутствие коннекта (ADOConnection)?
опять же. я повторил твои выкладки
> отключен ADOConnection (точнее, его вообще нет
и сделал свои предположения.
у меня единственный возможный вариант, когда коннекта "вообще нет" это рекордсет в памяти, там запрос вообще не нужен.
не понимаю в общем я ваших "затруднений", по моему вполне ясное, логичное поведение. (зачем создавать то что не нужно? все одно что телегу бензином заправлять... на всякий случай, когда потом. когда нибудь к ней будет мотор приделан)
Германн (2008-05-20 01:47:00) [2]
> sniknik © (20.05.08 01:33) [15]
>
> > а это разве не твои слова?
> >> если в design-time отключен ADOConnection
> надо было выделить. вот при том и design-time. странно ты
> обратил внимание именно на design-time, хотя я там ([12])
> говорил про отсутствие коннекта (ADOConnection), а design-
> time даже не упомянул. он кроме как в твоей цитате в тексте
> не присутствует.
>
Что ты подразумеваешь под отсутствие коннекта (ADOConnection)?
Германн (2008-05-20 01:43:00) [3]
> sniknik © (20.05.08 01:27) [14]
>
> > А причем тут отсутствие коннекта в design-time?
> а это разве не твои слова?
> > если в design-time отключен ADOConnection
>
Нет не мои. Я цитировал Ega23 ©. Но я специально обратил на них внимание.
> > Разве анализ текста запроса написанный в design-time там
> же (в design-time) и анализируется на предмет поиска ":Param"
> style parameters?
> частично там частично идет запрос к серверу, попытка определить
> типы параметров. заметь, при неактивном коннекте (connected=false),
> при вносе запроса в какойнибудь рекордсет/комманд коннект
> активируется.
>
Хм. Хм.
sniknik (2008-05-20 01:33:00) [4]> а это разве не твои слова?
>> если в design-timeотключен ADOConnection
надо было выделить. вот при том и design-time. странно ты обратил внимание именно на design-time, хотя я там ([12]) говорил про отсутствие коннекта (ADOConnection), а design-time даже не упомянул. он кроме как в твоей цитате в тексте не присутствует.
sniknik (2008-05-20 01:27:00) [5]> А причем тут отсутствие коннекта в design-time?
а это разве не твои слова?
> если в design-time отключен ADOConnection
сделай в рантайм, только если без коннекта, это значит чистый рекордсет, в памяти, ему не то что параметры, ему и запрос не нужен.
> Разве анализ текста запроса написанный в design-time там же (в design-time) и анализируется на предмет поиска ":Param" style parameters?
частично там частично идет запрос к серверу, попытка определить типы параметров. заметь, при неактивном коннекте (connected=false), при вносе запроса в какойнибудь рекордсет/комманд коннект активируется.
> К тому же у меня и текст запроса вводился в run-time, поскольку этих запросов было несколько.
и ни один не создал параметров, при существующем коннекте?
Германн (2008-05-20 00:48:00) [6]
> sniknik © (20.05.08 00:31) [12]
>
> > если в design-time отключен ADOConnection
> если у датасета нет коннекта, т.е. ты делаешь рекордсет
> в памяти то какие ему нужны параметры? для запроса к чему?
>
> имхо. все правильно.
>
А причем тут отсутствие коннекта в design-time? Разве анализ текста запроса написанный в design-time там же (в design-time) и анализируется на предмет поиска ":Param" style parameters? К тому же у меня и текст запроса вводился в run-time, поскольку этих запросов было несколько.
sniknik (2008-05-20 00:31:00) [7]> Из-за чего это?
если работа с базой access то изза неправильного синтаксиса в запросе, он может непонятные ему слова воспринять как параметры, уже сам, без дельфи. такой уж у него стиль, если запрос выполняется в программе access то она на них всплывающие окна с предложением ввода значения выдает.
> если в design-time отключен ADOConnection
если у датасета нет коннекта, т.е. ты делаешь рекордсет в памяти то какие ему нужны параметры? для запроса к чему?
имхо. все правильно.
Германн (2008-05-19 21:58:00) [8]
> sniknik © (19.05.08 21:54) [9]
>
> > Коль, а всё-таки есть ясность в поведении ParamCheck?
> конечно. полная ясность и однозначность - установлен в true
> перед внесением запроса, запрос парсится, параметры создаются,
> в false, нет, создавай сам.
>
> а с чего сомнения?
>
Да нет не всегда при true они автосоздаются. И я когда-то задавал такой вопрос и у Ёжки тоже кое что наблюдалось.
Ega23 © (12.03.08 09:57) [4]
Заметил любопытную особенность (по крайней мере у ADO): если в design-time отключен ADOConnection (точнее, его вообще нет, он потом при создании формы или фрейма задаётся), то параметры нифига не добавляются, даже при ParamCheck=true. Приходится либо ручками добавлять, либо временный ADOConnection строить.
Константин (2008-05-19 21:54:00) [9]По поводу параметров обращение по имени прошло при компиляции, но всеравно отказывалось работать пока, не создал данные параметры.
и можно еще вопрос при выполнении SQL запроса
select a.namek,b.namer1,c.namer2,d.summa,d.prim from koshelek as a, rashod1 as b, rashod2 as c, oprashod as d
where d.kodv=:p0 and a.kodk=d.kodk and b.kodr1=d.kodr1 and c.kodr2=d.kodr2
and d.kodk=:p1
and data1 between :p2 and :p3
order by a.namek,b.namer1,c.namer2
Выдается сообщение "Слишком мало параметров. Требуется 6"
Из-за чего это?
sniknik (2008-05-19 21:54:00) [10]> Коль, а всё-таки есть ясность в поведении ParamCheck?
конечно. полная ясность и однозначность - установлен в true перед внесением запроса, запрос парсится, параметры создаются, в false, нет, создавай сам.
а с чего сомнения?
Германн (2008-05-19 21:44:00) [11]
> sniknik © (19.05.08 21:35) [6]
Коль, а всё-таки есть ясность в поведении ParamCheck?
Константин (2008-05-19 21:39:00) [12]
> sniknik © (19.05.08 21:35) [6]
>
> ADODataSet.Parameters.ParamByName('p0').Value:=
>
> а найденный пример для BDE с бездумно замененным Query на
> ADOQuery либо автором вопроса, либо автором "оригинала".
>
Спасибо.
по поводу примера каюсь "автором вопроса"
sniknik (2008-05-19 21:35:00) [13]ADODataSet.Parameters.ParamByName('p0').Value:=
а найденный пример для BDE с бездумно замененным Query на ADOQuery либо автором вопроса, либо автором "оригинала".
Германн (2008-05-19 21:34:00) [14]
> Константин (19.05.08 21:27) [4]
>
> как создать параметр?
>
Для начала попробовать установить в инспекторе объектов ADOQuery2.ParamCheck True. Если не поможет, то в том же инспекторе свойство Parameters. В нем и создай нужный параметр.
Константин (2008-05-19 21:27:00) [15]как создать параметр?
Германн (2008-05-19 21:20:00) [16]
> Константин (19.05.08 21:18) [2]
Значит ты не создал такой параметр.
Константин (2008-05-19 21:18:00) [17]Undeclared identifier: 'ParamByName'
Германн (2008-05-19 21:16:00) [18]
> но при компиляции выдается ошибка
Какая?