Главная страница
    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.004 c
11-1193140621
Yury Sidorov
2007-10-23 15:57
2008.09.07
Релиз KOL-CE


2-1217409328
cyborg
2008-07-30 13:15
2008.09.07
поиск по маске


11-1190975644
Trible
2007-09-28 14:34
2008.09.07
Пример OnDrawCell


2-1217058832
AlexanderMS
2008-07-26 11:53
2008.09.07
Проект без VCL требует SysUtils, хотя он нигде не указан...


3-1205222693
Julia
2008-03-11 11:04
2008.09.07
HalcyonDataSet





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