Текущий архив: 2004.05.30;
Скачать: CL | DM;
ВнизODBC и хранимые функции Найти похожие ветки
← →
Внук © (2004-05-07 15:53) [0]Приветствую!
Такой вопрос: удавалось ли кому-нибудь успешно вызвать хранимую функцию Oracle через ODBC-подключение? С хранимыми процедурами проблем нет.
← →
Курдль © (2004-05-07 16:07) [1]Занефиг делать. Через компоненты SQL Direct.
← →
Курдль © (2004-05-07 16:09) [2]А сорри! Не врубился сперва в самую суть. Что, надо чтобы возвращала набор данных?
← →
Внук © (2004-05-07 16:14) [3]Нет. Надо просто вернуть одно значение типа Number. Но через ODBC. Если у кого был такой опыт, буду благодарен за краткое пояснение. Через стандартную связку BDE-ODBC не работает, хотя просто через BDE идет без проблем.
← →
Vlad © (2004-05-07 16:17) [4]
> Внук © (07.05.04 16:14) [3]
Только что пробовал BDE-Odbc. Все работает.
Правда хранимая функция дату возвращает
> Через стандартную связку BDE-ODBC не работает
И что говорит ?
← →
Внук © (2004-05-07 16:21) [5]>>Vlad © (07.05.04 16:17) [4]
При методе передачи параметров по имени говорит "Syntax error or access violation", а по индексу - "Invalid variable name/number". Да, забыл сказать, что использую TStoredProc, но это не принципиальное требование, можно от него отказаться.
Может, дело в самом драйвере? Пробовал родной от Oracle и от MS. Без толку.
← →
Внук © (2004-05-07 16:23) [6]Упс. Еще дополнение - Oracle 8i. Есть подозрения, что в девятке этой проблемы нет.
← →
Vlad © (2004-05-07 16:25) [7]
> Внук © (07.05.04 16:21) [5]
Возьми обычный БДЕ-шный SQL-Explorer
и напиши запрос
select YourFunction(<параметры>) as SomeField from dual
Сработает ?
← →
Reindeer Moss Eater © (2004-05-07 16:34) [8]Вызвать процедуру - не проблема.
Любой query понимабющий begin end поможет
begin
MY_PROC(:MY_PARAM);
end;
А вот получить значение OUT параметра получалось исключительно при использовании TStoredProc (если говорить про вкладку BDE).
А он при использовании ODBC ругается на "опс нот апликабл"
Все это и на 8i и на 9i.
← →
Vlad © (2004-05-07 16:40) [9]
> Внук © (07.05.04 16:23) [6]
Кстати говоря только что попробовал сделать вызов через TQuery
Все сработало, параметры присваивал как через ParamByName, так и через Params[]
Правда Оракл-сервер девятый, но клиент восьмой стоит, так что...
← →
Внук © (2004-05-07 16:44) [10]>>Vlad © (07.05.04 16:25) [7]
Да, так работает. Спасибо за идею. Можно ведь через TQuery. Я зациклился на TStoredProc. Но почему ОН не работает, не понятно.
>>Reindeer Moss Eater © (07.05.04 16:34) [8]
Да, у меня тоже OUT параметры. И через TStoredProc все нормально. Если процедура. А вот для функции - никак.
Из все этого можно сделать вывод, что сам драйвер поддерживает и процедуры, и функции. Вобщем-то, это самое главное. С деталями реализации теперь разберусь. Потому что BDE мне, вообще говоря, не нужно. Это я тестирую на нем. А применяться будет это на Visual FoxPro.
Всем спасибо !
← →
Vlad © (2004-05-07 17:07) [11]Да, видимо TStoredProc не предназначена для работы с функциями.
Попробовал ради интереса.
Если возвращаемый параметр описать как ptResult, то возникает ошибка Operation not Applicable, да и в справке про этот тип параметра сказано как-то размыто. Вобщем не для этого он.
← →
Vlad © (2004-05-07 17:35) [12]
> Vlad © (07.05.04 17:07) [11]
Упс...ошибся. Действительно, если использовать БДЕ-шный драйвер,то значение в параметр ptResult возвращается нормально, а вот ODBC на тоже самое ругается...
← →
Внук © (2004-05-07 18:01) [13]>>Vlad © (07.05.04 17:35) [12]
Угу. Склонен рассматривать это как некоторую кривость стандартных VCL-компонент. Но это уже не беда, это просто досадное недоразумение :))
← →
Vlad © (2004-05-07 18:08) [14]
> Внук © (07.05.04 18:01) [13]
Я тут посмотрел SQL монитором запросы, отсылаемые на сервер.
В случае с BDE драйвером и TStoredProc формируется нормальный запрос:
begin
:param1 = MyFunc(:param2)
end;
Если же использовать ODBC драйвер, то никакого запроса вобще не формируется.
Так что виноват скорее сам TStoredProc, видимо он не заточен под ODBC драйвер.
← →
Внук © (2004-05-07 20:33) [15]Вот и я говорю, VCL-компоненты. Легко отделался :))
← →
Курдль © (2004-05-07 23:23) [16]Значицца так! Нефиг на зеркало пенять... ODBC - классная весчь!
Вот рабочий пример (Oracle 8 + ODBC + SQL Direct)
Функция:create or replace function TestOraODBC return integer is
Result integer;
begin
Result := 123;
return(Result);
end TestOraODBC;
Вызов:procedure TForm1.FormCreate(Sender: TObject);
begin
SDDatabase1.Open;
SDStoredProc1.ExecProc;
Label1.Caption := SDStoredProc1.Params[0].AsString;
end;
Скриншот:123
:)
← →
Vlad © (2004-05-08 16:18) [17]
> Курдль © (07.05.04 23:23) [16]
Ты это... ветку читал или нет?
Давно уже поняли что дело не в самом драйвере ODBC, а в VCL. И причем тут SQL Direct, если речь о глюках TStoredProc
← →
Внук © (2004-05-08 20:49) [18]>>Курдль © (07.05.04 23:23) [16]
Насчет SQL Direct - спасибо, возможно, на будущее пригодится. Хотя упаси меня Control, Shift и святой Delete работать из под Delphi c Oracle через ODBC :))
Пока же, поскольку все это дело будет реализовываться в Visual Foxpro, мне важно было узнать, что дело не в слабости драйвера, а в специфической реализации TStoredProc.
← →
Vlad © (2004-05-08 20:55) [19]Я вобще двума руками за использование компонентов Direct Oracle Access.
С БДЕ в свое время намучался, больше не хочу.
Единственное, когда использую ODBC драйвер, так это когда нужно слить информацию из разнотипных БД
← →
Курдль © (2004-05-08 22:22) [20]
> Ты это... ветку читал или нет?
Я чё, читатель, что-ли? :( Я ж писатель!!!
> Пока же, поскольку все это дело будет реализовываться в
> Visual Foxpro
Разве эта идея лучше, чем работать из под Delphi c Oracle через ODBC?
> С БДЕ в свое время намучался, больше не хочу.
> Единственное, когда использую ODBC драйвер, так это когда
> нужно слить информацию из разнотипных БД
Готов подписаться под каждым словом, но добавить еще одно применение "SQL Direct + ODBC": написание мультибазовой программы. Т.е. чтобы без особых геморроев подставить проге другую базу через ODBC - и она ее примет, как родную.
← →
Внук © (2004-05-09 19:21) [21]>>Курдль © (08.05.04 22:22) [20]
>>Разве эта идея лучше, чем работать из под Delphi c Oracle через ODBC?
Наверно, не лучше, но таковы требования.
Страницы: 1 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.049 c