Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-40357
lovres
2003-10-01 15:05
2003.10.13
CheckBox в яцейке DBGrid.


14-40668
GiGiPage
2003-09-23 13:58
2003.10.13
Билет по физике


3-40236
M126
2003-09-23 15:07
2003.10.13
Как пользоваться Substring в запросе?


1-40413
ilka
2003-09-30 19:06
2003.10.13
Как узнать есть ли сервис и его текущее состояние(stop|start)?


14-40630
Mystic
2003-09-24 16:19
2003.10.13
Анекдоты и истории про музыку...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский