Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ODBC и хранимые функции


Страницы:   1 2

Внук ©   (2004-05-07 15:53:00) 

Приветствую!
Такой вопрос: удавалось ли кому-нибудь успешно вызвать хранимую функцию Oracle через ODBC-подключение? С хранимыми процедурами проблем нет.


Внук   (2004-05-09 19:21:00) [1]

>>Курдль ©   (08.05.04 22:22) [20]
>>Разве эта идея лучше, чем работать из под Delphi c Oracle через ODBC?
 Наверно, не лучше, но таковы требования.


Курдль   (2004-05-08 22:22:00) [2]


> Ты это... ветку читал или нет?

Я чё, читатель, что-ли? :( Я ж писатель!!!


> Пока же, поскольку все это дело будет реализовываться в
> Visual Foxpro

Разве эта идея лучше, чем работать из под Delphi c Oracle через ODBC?

> С БДЕ в свое время намучался, больше не хочу.
> Единственное, когда использую ODBC драйвер, так это когда
> нужно слить информацию из разнотипных БД

Готов подписаться под каждым словом, но добавить еще одно применение "SQL Direct + ODBC": написание мультибазовой программы. Т.е. чтобы без особых геморроев подставить проге другую базу через ODBC - и она ее примет, как родную.


Vlad   (2004-05-08 20:55:00) [3]

Я вобще двума руками за использование компонентов Direct Oracle Access.
С БДЕ в свое время намучался, больше не хочу.
Единственное, когда использую ODBC драйвер, так это когда нужно слить информацию из разнотипных БД


Внук   (2004-05-08 20:49:00) [4]

>>Курдль ©   (07.05.04 23:23) [16]
 Насчет SQL Direct - спасибо, возможно, на будущее пригодится. Хотя упаси меня Control, Shift и святой Delete работать из под Delphi c Oracle через ODBC :))
 Пока же, поскольку все это дело будет реализовываться в Visual Foxpro, мне важно было узнать, что дело не в слабости драйвера, а в специфической реализации TStoredProc.


Vlad   (2004-05-08 16:18:00) [5]


> Курдль ©   (07.05.04 23:23) [16]

Ты это... ветку читал или нет?
Давно уже поняли что дело не в самом драйвере ODBC, а в VCL. И причем тут SQL Direct, если речь о глюках TStoredProc


Курдль   (2004-05-07 23:23:00) [6]

Значицца так! Нефиг на зеркало пенять... 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 :)


Внук   (2004-05-07 20:33:00) [7]

Вот и я говорю, VCL-компоненты. Легко отделался :))


Vlad   (2004-05-07 18:08:00) [8]


> Внук ©   (07.05.04 18:01) [13]

Я тут посмотрел SQL монитором запросы, отсылаемые на сервер.
В случае с BDE драйвером и TStoredProc формируется нормальный запрос:
begin
:param1 = MyFunc(:param2)
end;
Если же использовать ODBC драйвер, то никакого запроса вобще не формируется.
Так что виноват скорее сам TStoredProc, видимо он не заточен под ODBC драйвер.


Внук   (2004-05-07 18:01:00) [9]

>>Vlad ©   (07.05.04 17:35) [12]
 Угу. Склонен рассматривать это как некоторую кривость стандартных VCL-компонент. Но это уже не беда, это просто досадное недоразумение :))


Vlad   (2004-05-07 17:35:00) [10]


> Vlad ©   (07.05.04 17:07) [11]

Упс...ошибся. Действительно, если использовать БДЕ-шный драйвер,то значение в параметр ptResult возвращается нормально, а вот ODBC на тоже самое ругается...


Vlad   (2004-05-07 17:07:00) [11]

Да, видимо TStoredProc не предназначена для работы с функциями.
Попробовал ради интереса.
Если возвращаемый параметр описать как ptResult, то возникает ошибка Operation not Applicable, да и в справке про этот тип параметра сказано как-то размыто. Вобщем не для этого он.


Внук   (2004-05-07 16:44:00) [12]

>>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 16:40:00) [13]


> Внук ©   (07.05.04 16:23) [6]

Кстати говоря только что попробовал сделать вызов через TQuery
Все сработало, параметры присваивал как через ParamByName, так и через Params[]
Правда Оракл-сервер девятый, но клиент восьмой стоит, так что...


Reindeer Moss Eater   (2004-05-07 16:34:00) [14]

Вызвать процедуру - не проблема.
Любой query понимабющий begin end поможет
begin
MY_PROC(:MY_PARAM);
end;

А вот получить значение OUT параметра получалось исключительно при использовании TStoredProc (если говорить про вкладку BDE).
А он при использовании ODBC ругается на "опс нот апликабл"

Все это и на 8i и на 9i.


Vlad   (2004-05-07 16:25:00) [15]


> Внук ©   (07.05.04 16:21) [5]

Возьми обычный БДЕ-шный SQL-Explorer
и напиши запрос
select YourFunction(<параметры>) as SomeField from dual
Сработает ?


Внук   (2004-05-07 16:23:00) [16]

Упс. Еще дополнение - Oracle 8i. Есть подозрения, что в девятке этой проблемы нет.


Внук   (2004-05-07 16:21:00) [17]

>>Vlad ©   (07.05.04 16:17) [4]
 При методе передачи параметров по имени говорит "Syntax error or access violation", а по индексу - "Invalid variable name/number". Да, забыл сказать, что использую TStoredProc, но это не принципиальное требование, можно от него отказаться.
 Может, дело в самом драйвере? Пробовал родной от Oracle и от MS. Без толку.


Vlad   (2004-05-07 16:17:00) [18]


> Внук ©   (07.05.04 16:14) [3]

Только что пробовал BDE-Odbc. Все работает.
Правда хранимая функция дату возвращает

> Через стандартную связку BDE-ODBC не работает

И что говорит ?


Внук   (2004-05-07 16:14:00) [19]

Нет. Надо просто вернуть одно значение типа Number. Но через ODBC. Если у кого был такой опыт, буду благодарен за краткое пояснение. Через стандартную связку BDE-ODBC не работает, хотя просто через BDE идет без проблем.


Курдль   (2004-05-07 16:09:00) [20]

А сорри! Не врубился сперва в самую суть. Что, надо чтобы возвращала набор данных?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо