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

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

Параметрический запрос [Paradox]


Страницы:   1 2

glow ©   (2003-09-19 12:11:00) 

Добрый день уважаемые мастера!
SELECT DISTINCT A.RNOM FROM ASPI.db A WHERE (A.KAT = 1)AND (A.SP = :s)AND EXISTS(SELECT * FROM Prikaz.db C WHERE (C.RNOM = A.RNOM) AND (C.Type = 1) AND C.dat BETWEEN ""1.1." + IntToStr(G) + """ AND ""31.12." + IntToStr(G) + """)
Параметр :s изменяется в цикле по таблице tNspec(DM.q1NK.ParamByName("s").AsString:=DM.tNspecKOD.AsString;)
но в запрос с подзапросом параметр не передается (ошибка: неправильное использование ключевого слова), надо как-то по-другому передать значение в запрос


glow   (2003-09-22 14:09:00) [1]

В любом случае спасибо, что не остались равнодушным!


Johnmen   (2003-09-22 13:51:00) [2]

>glow © (22.09.03 13:32)
>Только не понятно почему была ошибка, если в инспекторе тоже
>самое прописано:))

Потому, что [22] !

И, кстати, для единообразия,
DM.q1NK.ParamByMame(...).ParamType:=ptInput;
и т.д.


glow   (2003-09-22 13:32:00) [3]

DM.q1NK.SQL.Add("SELECT DISTINCT A.RNOM FROM ASPI.db A WHERE (A.KAT = 1)AND (A.SP=:str) AND EXISTS(SELECT * FROM Prikaz.db C WHERE (C.RNOM = A.RNOM) AND (C.Type = 1) AND C.dat BETWEEN ""1.1." + IntToStr(G) + """ AND ""31.12." + IntToStr(G) + """)");
DM.q1NK.Params[0].ParamType:=ptInput;
DM.q1NK.Params[0].DataType:=ftString;
DM.q1NK.ParamByName("str").AsString:=DM.tNspecKOD.AsString;
Так работает без ошибок:))
Thank"s
Только не понятно почему была ошибка, если в инспекторе тоже самое прописано:))


Johnmen   (2003-09-22 13:24:00) [4]

>glow © (22.09.03 13:18)
>У меня это в OI указано

Не понял... OI ???
После Clear текста запроса никаких параметров уже нет, и параметров параметров тоже...:)


glow   (2003-09-22 13:18:00) [5]


> После заполнения текста запроса сделай:
> ParamType:=ptInput;
> DataType:=ftString;

У меня это в OI указано


Johnmen   (2003-09-22 13:11:00) [6]

>glow ©
После заполнения текста запроса сделай:
ParamType:=ptInput;
DataType:=ftString;
<присвоение значения параметру>


glow   (2003-09-22 13:00:00) [7]


> Johnmen © (22.09.03 12:59) [18]

Строковое


Johnmen   (2003-09-22 12:59:00) [8]

Какой тип поля A.SP ?


glow   (2003-09-22 12:51:00) [9]


> DM.q1NK.SQL.Add("SELECT DISTINCT A.RNOM FROM ASPI.db A WHERE
> (A.SP = :s)AND(A.KAT = 1)AND EXISTS(SELECT * FROM ASPI.DB
> A, Prikaz.db C WHERE (C.RNOM = A.RNOM) AND (C.Type = 1)
> AND C.dat BETWEEN ""1.1." + IntToStr(G) + """ AND ""31.12."
> + IntToStr(G) + """)");

Может дело и в скобках, но почему без выделенного фрагмента запрос выполняется верно?:((


Johnmen   (2003-09-22 12:36:00) [10]

Может быть... Ты бы вообще расставил их, скобки, сам. И побольше, в соответствии с логикой. Потом посмотрим...:)


glow   (2003-09-22 12:23:00) [11]


> Может у тебя просто отключено ParamCheck ?

ParamCheck=True
Привожу запрос:
DM.q1NK.SQL.Add("SELECT DISTINCT A.RNOM FROM ASPI.db A WHERE (A.SP = :s)AND(A.KAT = 1)AND EXISTS(SELECT * FROM ASPI.DB A, Prikaz.db C WHERE (C.RNOM = A.RNOM) AND (C.Type = 1) AND C.dat BETWEEN ""1.1." + IntToStr(G) + """ AND ""31.12." + IntToStr(G) + """)");
После его открытия выползает ошибка "Invalid use of keyword Token 1.1." может где-нибудь скобки не хватает?


Johnmen   (2003-09-22 12:17:00) [12]

Может у тебя просто отключено ParamCheck ?


glow   (2003-09-22 11:41:00) [13]


> Если значение DM.tNspecKOD.AsString в цикле меняется, то,
> естественно, нужно создавать весь select заново.

в цикле делаю так
DM.q1NK.Close;
DM.q1NK.SQL.Clear;
DM.q1NK.SQL.Add("SELECT DISTINCT A.RNOM FROM ASPI.db A WHERE (A.KAT = 1)AND A.SP =D AND (A.FOB=1)AND EXISTS(SELECT * FROM Prikaz.db C WHERE (C.RNOM = A.RNOM) AND (C.Type = 1) AND C.dat BETWEEN ""1.1." + IntToStr(G) + """ AND ""31.12." + IntToStr(G) + """)");
DM.q1NK.Open;


glow   (2003-09-22 11:36:00) [14]


> glow © (22.09.03 10:10) [6]

А на вопрос так никто и не ответил


Sandman25   (2003-09-22 11:35:00) [15]

[6] glow © (22.09.03 10:10)

Если значение DM.tNspecKOD.AsString в цикле меняется, то, естественно, нужно создавать весь select заново.
Все, меня нет... Дали новую задачку, нет времени по форумам лазить :)


glow   (2003-09-22 11:17:00) [16]


> А скобка где ?

Опечатка


Johnmen   (2003-09-22 11:15:00) [17]

>glow © (22.09.03 10:11) [7]
>?

В смысле, да ! На пост № [2]
:)

>glow © (22.09.03 10:10)

А скобка где ?


glow   (2003-09-22 10:49:00) [18]

???


glow   (2003-09-22 10:11:00) [19]


> Johnmen © (19.09.03 14:01) [3]
> !

?


glow   (2003-09-22 10:10:00) [20]

SELECT DISTINCT A.RNOM FROM ASPI.db A WHERE (A.KAT = 1) AND A.SP = :s)AND EXISTS(SELECT * FROM Prikaz.db C WHERE (C.RNOM = A.RNOM) AND (C.Type = 1) AND C.dat BETWEEN ""1.1." + IntToStr(G) + """ AND ""31.12." + IntToStr(G) + """)
Этот запрос без выделенного фрагмента выполняется правильно.
Если А.SP сравнивать не с параметром, а с самим полем, например, DM.tNspecKOD.AsString, то при первом проходе цикла значение присваивается и не изменятеся при изменении значения этого поля, поэтому пытаюсь передать параметром (DM.q1NK.ParamByName("s").AsString:=DM.tNspecKOD.AsString;)=> ошибка (см. вопрос)


Страницы:   1 2

Наверх

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