Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1215752865
Vlad Oshin
2008-07-11 09:07
2008.09.07
Задачка с подвохом, ибо пятница. Гарднера


2-1217408913
денис_м
2008-07-30 13:08
2008.09.07
Настройки в программе


2-1216916846
koss
2008-07-24 20:27
2008.09.07
Отчет


2-1217326915
wsv
2008-07-29 14:21
2008.09.07
ADOConnection и его ConnectionTimeout


13-1120735770
WondeRu
2005-07-07 15:29
2008.09.07
Релизы SQL Server2005 и Visual Studio2005 анонсировны на 7 ноября





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский