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

Вниз

Параметры в Query   Найти похожие ветки 

 
iov ©   (2004-01-19 12:40) [0]

Вобщем есть такой примерно запрос
select * from tabl where field in (:1)
поле field типа integer
Пишу в параметр значение из StringList
Params[0].Value:=StringList.CommaText;
Если в StringList одно значение (строка) все прокатывает, если больше при выполнении запроса возвращается пустая выборка.
То есть получается в параметр нельзя записать больше одного значения (например Params[0].Value:="1,2,3,4"), а можно только так Params[0].Value:=1?


 
Johnmen ©   (2004-01-19 12:42) [1]

А попробовать ?


 
myor ©   (2004-01-19 12:48) [2]

То есть получается в параметр нельзя записать больше одного значения ...

"два по сто в одну посуду..."?

ясное дело, нельзя

params[0].value:="1";
params[1].value:="2"...


 
iov ©   (2004-01-19 12:56) [3]

жаль
я думал такая конструкция сгодится :(
"а попробовать?" - пробовал, думал может где ошибаюсь, потому и спрашивал
в RxQuery это легко делается через макрос
select * from tabl where field in (%1)
в макрос пишу тотже stringList.CommaText
надеялся что через параметр в обычной Query так тоже можно :(


 
Dingo   (2004-01-19 14:16) [4]

я вот сам с этим же парился, решения так и не нашёл.. :( пробовал уже практически всё, включая VariantArray - результат тт же - только одно значение принимает, зараза.. :(
Неужели совсем никакого нету способа задать в параметре перечисление?...


 
asp ©   (2004-01-19 14:26) [5]

Не пройдет это.
Либо формировать текст запроса в коде, либо, в случае работы через BDE, воспользоваться RxQuery и макросом.
SELECT *
FROM TABLE1 T1
WHERE T1.ID IN ( %ID_LIST )

RxQuery1.MacroByName("ID_LIST").AsString = "1,2,3"

Замечание: изменение списка, разумеется, приводит к смене текста запроса и, как следствие, его перекомпиляции.


 
asp ©   (2004-01-19 14:26) [6]

Не пройдет это.
Либо формировать текст запроса в коде, либо, в случае работы через BDE, воспользоваться RxQuery и макросом.
SELECT *
FROM TABLE1 T1
WHERE T1.ID IN ( %ID_LIST )

RxQuery1.MacroByName("ID_LIST").AsString = "1,2,3"

Замечание: изменение списка, разумеется, приводит к смене текста запроса и, как следствие, его перекомпиляции.


 
DenK_vrtz ©   (2004-01-19 14:35) [7]

А что мешает динамически формировать запрос?

Одно значение - select * from tabl where field in (:s)
Два значения - select * from tabl where field in (:s,:s1)
N - значений - select * from tabl where field in (:s(1),..,:s(n))


 
DenK_vrtz ©   (2004-01-19 14:36) [8]

Только в данном случае(динамическом запросе) смысл параметров(в какой то мере) утрачивается


 
KDA   (2004-01-28 07:27) [9]

Я ранее тоже заморачивался с параметрами в запросах, теперь делаю например так (просто вырезка):
qryDate.Active := false;
with qryDate do
begin {сменить запрос по условиям выбора}
SQL.Clear;
SQL.Add("select j.""id"",j.""date"",j.""Time"",j.""Text"",j.""OKTXT"",r.""Fam"",j.""code"",j.""DTM"", j.""ZN"" ");
SQL.Add("from journal j, registry r");
if chkType.Checked then
SQL.Add(", temptype t1");
if chkDisp.Checked then
SQL.Add(", tempdisp t2");
SQL.Add("where j.""disp""=r.""id"" ");
if chkType.Checked then
SQL.Add("and j.""code""=t1.""code"" ");
if chkDisp.Checked then
SQL.Add("and j.""disp""=t2.""id"" ");
SQL.Add("order by j.""DTM"" asc");

end;
qryDate.Prepare;
qryDate.ExecSQL;

Благо в запросе не важно на какой строке что писать, можно хоть в цикле этот запрос формировать... такой подход помогает ориентироваться в SQL Server.

Поэтому делай где-то так:
SQL.Add(" where Field in ( "" "+param1+"""");
SQL.Add(", "" "+ param1+"""");
SQL.Add(", "" "+ param1+"""");
...
SQL.Add(" "") ");



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

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

Наверх




Память: 0.49 MB
Время: 0.021 c
1-53641
h0use
2004-02-06 15:46
2004.02.17
Как в компоненет создавать about?


3-53390
denmin
2004-01-28 15:32
2004.02.17
Помогите если можно


1-53622
don_dampster
2004-02-07 08:12
2004.02.17
ShellListView


1-53619
Ramario
2004-02-07 11:37
2004.02.17
Меню файла


8-53648
Sam Stone
2003-10-16 21:21
2004.02.17
Рисование