Форум: "Базы";
Текущий архив: 2008.09.07;
Скачать: [xml.tar.bz2];
ВнизИспользование UDF функции в запросе с параметрами Найти похожие ветки
← →
AlexeyMir (2008-03-09 23:56) [0]Подскажите, пожалуйста, я использую базу Firebird.
Я написал функцию UDF CheckA(CSTRING(254), CSTRING(2000)):INTEGER второй параметр состоит из списка значений разделенных ";", функция возвращает 1, если значение первого параметра присутствует в списке значений второго параметра, если нет то - 0.
Пишу IBQuery1.SQL.TEXT:="select * from tov where CheckA(kod,"1;2;3")=1" - работает замечательно
а если
IBQuery1.SQL.TEXT:="select * from tov where CheckA(kod,:bb)=1";
IBQuery1.ParamByName("bb").AsString:="1;2;3";
IBQuery[i_query].Open;
Ругается: Dynamic SQL Error. SQL Error Code=-804. Data type unknown.
Пробовал и через инспектор объектов Params, добавлять параметр bb, указывал DataType, ParamType, Value, Value.Type - все равно таже ошибка
← →
PEAKTOP © (2008-03-10 03:31) [1]Params - это параметры запроса, которые отправляются серверу, когда запросу уже скомпилирован. То есть это подходит для полей наборов данных. Тебе же нужно передать в UDF параметр, что IB/FB за тебя не сделает, т.к. этот механизм на UDF не распространяется.
Присваивай явно:
IBQuery1.SQL.TEXT:="select t.* from tov t where CheckA(t.kod,"""+"1;2;3"+""") = 1 ";
← →
DrPass © (2008-03-10 11:15) [2]
> IBQuery1.ParamByName("bb").AsString:="1;2;3";
Ну а предварительное IBQuery1.ParamByName("bb").DataType:= ftString не поможет?
← →
PEAKTOP © (2008-03-10 14:50) [3]> Ну а предварительное IBQuery1.ParamByName("bb").DataType:= ftString не поможет?
Не поможет.
← →
Правильный_Вася (2008-03-10 16:00) [4]
> Не поможет.
больно ты категоричен
версия сервера у автора не указана
у меня на D7, FB 1.53 прекрасно проходит запросselect t.* from objnames t where substr(t.obj_name,1,:x)="1"
правда, юзаю dbexpress, а не ibexpress, но у автора ругается сервер, поэтому компоненты доступа тут ни при чемprocedure TForm1.Button1Click(Sender: TObject);
begin
sqldataset1.ParamByName("x").asinteger:=3;
sqldataset1.Open;
application.MessageBox("получилось","ура");
end;
← →
AlexeyMir (2008-03-11 16:25) [5]Да, я попробовал последний пример, он работает, но это если параметр является числом. А если параметр строка, то опять таже ошибка: Dynamic SQL Error. SQL Error Code=-804. Data type unknown.
Пробовал предварительно поставить IBQuery1.ParamByName("bb").DataType:= ftString - не помогает.
Может быть нужно как-то по другому писать функцию для работы с параметрами?
сервер - Firebird-1.5.2.4731-Win32
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2008.09.07;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c