Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.13;
Скачать: CL | DM;

Вниз

Параметрический запрос   Найти похожие ветки 

 
glow ©   (2003-09-19 12:11) [0]

Добрый день уважаемые мастера!
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;)
но в запрос с подзапросом параметр не передается (ошибка: неправильное использование ключевого слова), надо как-то по-другому передать значение в запрос


 
Sandman25 ©   (2003-09-19 12:16) [1]

Если запрос с подзапросом параметр не передается,
то можно либо написать хранимую процедуру с параметром,
либо каждый раз в цикле создавать SQL.Text заново.


 
glow ©   (2003-09-19 13:57) [2]

Заново это Q.Clear
Q.SQL.ADD()
?


 
Johnmen ©   (2003-09-19 14:01) [3]

!


 
Bob ©   (2003-09-19 14:05) [4]

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) + """)
A.RNOM откуда возьмется. Сначала у тебя отработается вложенный запрос, а потом ты перейдешь к внешнему. Попробуй так FROM ASPI.DB A, PRIKAZ.db c. Должно прокатить.


 
Sandman25 ©   (2003-09-19 15:27) [5]

[2] glow © (19.09.03 13:57)

Да. У меня просто старая привычка вместо Q.SQL.ADD("") использовать Q.SQL.Text := ""

[4] Bob © (19.09.03 14:05)

Вложенный запрос может выполниться и "после" внешнего. В данном случае именно так и будет - для каждой строки-кандидата из A будет выполняться вложенный запрос по C и проверяться его результат.


 
glow ©   (2003-09-22 10:10) [6]

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;)=> ошибка (см. вопрос)


 
glow ©   (2003-09-22 10:11) [7]


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

?


 
glow ©   (2003-09-22 10:49) [8]

???


 
Johnmen ©   (2003-09-22 11:15) [9]

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

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

>glow © (22.09.03 10:10)

А скобка где ?


 
glow ©   (2003-09-22 11:17) [10]


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

Опечатка


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

[6] glow © (22.09.03 10:10)

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


 
glow ©   (2003-09-22 11:36) [12]


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

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


 
glow ©   (2003-09-22 11:41) [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;


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

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


 
glow ©   (2003-09-22 12:23) [15]


> Может у тебя просто отключено 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:36) [16]

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


 
glow ©   (2003-09-22 12:51) [17]


> 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:59) [18]

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


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


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

Строковое


 
Johnmen ©   (2003-09-22 13:11) [20]

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


 
glow ©   (2003-09-22 13:18) [21]


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

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


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

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

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


 
glow ©   (2003-09-22 13:32) [23]

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:51) [24]

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

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

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


 
glow ©   (2003-09-22 14:09) [25]

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



Страницы: 1 вся ветка

Текущий архив: 2003.10.13;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.028 c
6-40530
новичёк
2003-08-04 22:43
2003.10.13
Скачать HTML страничку из Web module


14-40584
s705
2003-09-22 14:25
2003.10.13
Помогите найти инфу по 8-му протоколу ICQ.


4-40737
__Ed__
2003-08-02 14:08
2003.10.13
ввод в чужом окне без keybd_Event


14-40665
Andryk
2003-09-22 15:47
2003.10.13
А не у кго не завалялось матричного 9 игольчатого принтера?


14-40572
Игорь Шевченко
2003-09-23 13:38
2003.10.13
Ищется антиквариат