Главная страница
    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
2-1217331791
Оксана Вл.
2008-07-29 15:43
2008.09.07
Удаление


11-1193140621
Yury Sidorov
2007-10-23 15:57
2008.09.07
Релиз KOL-CE


2-1216792046
TStas
2008-07-23 09:47
2008.09.07
Есть ли какой-то особенный класс исключений при записи в ReadOnly


15-1216177180
Kostya_berlin
2008-07-16 06:59
2008.09.07
подскажите пожалуйста какой оператор


15-1216034230
oldman
2008-07-14 15:17
2008.09.07
Как в ХР увидеть содержимое корневого каталога С?





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