![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Параметрический запрос [Paradox]
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;)=> ошибка (см. вопрос)