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

Вниз

Использование 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
15-1215876908
Denis__
2008-07-12 19:35
2008.09.07
Всё ли нужно...


15-1216401919
McSimm
2008-07-18 21:25
2008.09.07
сами мы не местные...


2-1217239029
Fynjy
2008-07-28 13:57
2008.09.07
создание компанента вручную


15-1216215831
too_lamer
2008-07-16 17:43
2008.09.07
Посоветуйте букварь по SQL Server + T-SQL


15-1215881130
Guest
2008-07-12 20:45
2008.09.07
В чём ошибка?