![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Oracle 9.0.1, Delphi 7.0 Enterprise (Build 4.453)
Хранимая процедура: — Возвращает цифры в количестве указанном в f_count Код:
// Все данные в varchar2 для чистоты эксперимента create or replace procedure test_delphi( f_variable in varchar2, f_count in varchar2, f_rezult out varchar2) is begin f_rezult := (substr(to_char(f_variable), (to_number(f_count) * -1))); end; Код:
declare v_Variable varchar2(10); begin test_delphi(579123, 5, v_Variable); dbms_output.put_line('Результат '||v_Variable); end; В Delphi для доступа к данным использую dbExpress. Необходимо получить возвращаемое значение в Delphi используя компонент SQLStoredProc. На форме регистрирую компоненты SQLConnection, SQLStoredProc, Button и Edit. Цепляюсь к базе. SQLConnection работает нормально. У SQLStoredProc указываю схему (SchemaName), выбираю необходимую процедуру (TEST_DELPHI). На кнопке в обработчике Button1Click пишу: Код:
SQLStoredProc1.ParamByName('F_VARIABLE').AsString := '19283746'; SQLStoredProc1.ParamByName('F_COUNT').AsString := '3'; SQLStoredProc1.Open; Edit1.Text := SQLStoredProc1.ParamByName('F_REZULT').AsString; SQLStoredProc1: Cursor not returned from Query. Судя по описанию работы с компонентами dbExpress, SQLStoredProc1 в своем параметре F_REZULT (который, кстати, в компоненте отобразился правильно, ParamType = ptOutput) должен возвращать результат. Однако этого не происходит. На форумах эта проблема периодически всплывает, но ответы не содержат решения. В чем моя ошибка (хотя, даже не знаю, где здесь можно ошибиться ;-)? Как получить выходной параметр из процедуры? Спасибо. |
#2
|
||||
|
||||
![]() Я так мыслю нужно не Open делать, а ExecProc
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
![]() Действительно.
ExecProc позволяет выполнить процедуру, но значение параметра SQLStoredProc1.ParamByName('F_REZULT').AsString равно пустой строке. Не возвращает процедура ничего. |
#4
|
|||
|
|||
![]() Тип параметра посмотри, може по умолчанию In стоит.
|
#5
|
|||
|
|||
![]() Не, точно out.
Есть серьезные основания думать, что (Build 4.453) глюкаво работает с SQLStoredProc. Кстати, заряжаешь процедуру через Open или все-же через ExecProc? В описалове говорят, что если процедура возвращает значение(я), тогда нужно пользовать Open (или Active := True). Но через Open она ваще не пашет. |