Форум: "Базы";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];
ВнизПараметрический запрос Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c