![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Параметры в Query [D6, Informix]
iov © (2004-01-19 12:40:00)
Вобщем есть такой примерно запрос
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?
KDA (2004-01-28 07:27:00) [1]
Я ранее тоже заморачивался с параметрами в запросах, теперь делаю например так (просто вырезка):
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(" "") ");
DenK_vrtz (2004-01-19 14:36:00) [2]
Только в данном случае(динамическом запросе) смысл параметров(в какой то мере) утрачивается
DenK_vrtz (2004-01-19 14:35:00) [3]
А что мешает динамически формировать запрос?
Одно значение - 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))
asp (2004-01-19 14:26:00) [4]
Не пройдет это.
Либо формировать текст запроса в коде, либо, в случае работы через 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:00) [5]
Не пройдет это.
Либо формировать текст запроса в коде, либо, в случае работы через BDE, воспользоваться RxQuery и макросом.
SELECT *
FROM TABLE1 T1
WHERE T1.ID IN ( %ID_LIST )
RxQuery1.MacroByName("ID_LIST").AsString = "1,2,3"
Замечание: изменение списка, разумеется, приводит к смене текста запроса и, как следствие, его перекомпиляции.
Dingo (2004-01-19 14:16:00) [6]
я вот сам с этим же парился, решения так и не нашёл.. :( пробовал уже практически всё, включая VariantArray - результат тт же - только одно значение принимает, зараза.. :(
Неужели совсем никакого нету способа задать в параметре перечисление?...
iov (2004-01-19 12:56:00) [7]
жаль
я думал такая конструкция сгодится :(
"а попробовать?" - пробовал, думал может где ошибаюсь, потому и спрашивал
в RxQuery это легко делается через макрос
select * from tabl where field in (%1)
в макрос пишу тотже stringList.CommaText
надеялся что через параметр в обычной Query так тоже можно :(
myor (2004-01-19 12:48:00) [8]
То есть получается в параметр нельзя записать больше одного значения ...
"два по сто в одну посуду..."?
ясное дело, нельзя
params[0].value:="1";
params[1].value:="2"...
Johnmen (2004-01-19 12:42:00) [9]
А попробовать ?