|
|
|
Помогите разобраться с ХП
|
|||
|---|---|---|---|
|
#18+
есть вот такая процедура как ее вызвать что получить ID в связка BDE - ODBC - работает но не возвращает из повербилдера работает но но выдает ошибку неправильный тип курсора CREATE PROCEDURE dbo.Add_File @sysfileid numeric(10) output, @filename varchar(20), @part_number integer, @begindate datetime, @enddate datetime, @subsystem varchar(20), @sequence_id varchar(128) AS BEGIN insert into acceptfile values(@filename, @part_number, @begindate, @enddate, @subsystem, @sequence_id) Select @sysfileid = @@identity return @sysfileid END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 19:18 |
|
||
|
Помогите разобраться с ХП
|
|||
|---|---|---|---|
|
#18+
Версию сервера будем угадывать? А в общем случае, измени процедуру на: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 19:32 |
|
||
|
Помогите разобраться с ХП
|
|||
|---|---|---|---|
|
#18+
2Maks_f Общие вопросы: Версия PB? Тип DBMS (похоже ASE)? Версия DBMS ? Текст сообщения? Способ объявления процедуры (Declare, RPC) в PB? Текст вызова и чтения возвращаемого значения? Что дает вызов с консоли, например из isql? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 19:35 |
|
||
|
Помогите разобраться с ХП
|
|||
|---|---|---|---|
|
#18+
ASE 12 вызов проходит почемуто только так из под БДЕ execute Add_File 333,'eee', 1, '2004-07-30', '2004-07-30', 'rt', '' а так из повер билдера execute Add_File 333,'eee', 1, '2004-07-30', '2004-07-30', 'rt', ''; ни чего не возвращает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 19:44 |
|
||
|
Помогите разобраться с ХП
|
|||
|---|---|---|---|
|
#18+
Maks_fASE 12 вызов проходит почемуто только так из под БДЕ execute Add_File 333,'eee', 1, '2004-07-30', '2004-07-30', 'rt', '' а так из повер билдера execute Add_File 333,'eee', 1, '2004-07-30', '2004-07-30', 'rt', ''; ни чего не возвращает А почему оно должно что-то возвращать? У тебя есть два варианта получить результат - через output переменную или через резалт-сет. Тот вариант процедуры который ты показал предполагает возврат результата через output переменную. Она у тебя при этом стоит самой первой в списке. А при вызове, ты вместо переменной указываешь константу "333". Ну и где ты собственно говоря пытаешься прочитать результат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 19:50 |
|
||
|
Помогите разобраться с ХП
|
|||
|---|---|---|---|
|
#18+
Уважаемый White Owl, я понимаю праведный гнев гуру, но подскажите пожалуйста, как вы бы написали процедуру в первом и во втором случае, или дайте пож ссылку где можно получить примеры написания процедур. Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 19:54 |
|
||
|
Помогите разобраться с ХП
|
|||
|---|---|---|---|
|
#18+
Maks_fУважаемый White Owl, я понимаю праведный гнев гуру, но подскажите пожалуйста, как вы бы написали процедуру в первом и во втором случае, или дайте пож ссылку где можно получить примеры написания процедур. Заранее благодарен. Вариант процедуры для чтения результата при помощи курсора я уже написал - в самом-самом первом посте. Вызов процедуры возвращающей результат через output параметр в общем случае будет: execute Add_File SomeSpecialVariable,'eee', 1, '2004-07-30', '2004-07-30', 'rt', '' По завершению процедуры результат будет в этой самой SomeSpecialVariable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 20:19 |
|
||
|
Помогите разобраться с ХП
|
|||
|---|---|---|---|
|
#18+
2White Owl Извините, White Owl, что пытаюсь ответить на вопрос, заданный именно Вам. 2Maks_f Полный ответ требует описания что Вам нужно, как и в каком контексте. Вариант RPC вызова (самый простой, хотя окружение ... ): - Создаете свой класс, наследуюясь от transaction, например my_n_tr - В этом классе определяете новую Local External Function (способ добавления зависит от версии PB) на основе Вашей процедуры Add_File - В параметрах приложения (Variable Types)заменяете класс для SQLCA с transaction на my_n_tr - в месте вызова, используете описанную ранее функцию просто как обычный метод класса my_n_tr. Например: long ll_Result decimal ldc_sysfileid ll_Result = SQLCA.Add_File( ldc_sysfileid,'eee',1,'2004-07-30','2004-07-30', 'rt', '') ... Вариант с Declare сложнее, но тоже возможен, в качестве затравки отправляю Вас к Help'у по PB ( DECLARE Procedure embedded SQL statement) К сожалению, Там не описанные тонкости чтения возвращаемого через return значения (в Вашем примере 'return @sysfileid' ) хотя и это возможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 20:22 |
|
||
|
Помогите разобраться с ХП
|
|||
|---|---|---|---|
|
#18+
2 Raven_A: Да пожалуйста, пожалуйста :) Если бы он хотел получить ответ лично от меня - послал бы вопрос по e-mail. А если опубликовал в форуме значит отвечать кто угодно может. А насчет "return @sysfileid" я честно говоря вообще сомневаюсь что ASE это поймет. Я не спец по ASE и не знаю как оно реагирует на return с параметром, но не так давно здесь были жалобы что на ASE нельзя сделать UDF... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 20:36 |
|
||
|
Помогите разобраться с ХП
|
|||
|---|---|---|---|
|
#18+
White OwlА насчет "return @sysfileid" я честно говоря вообще сомневаюсь что ASE это поймет. Поймет, поймет. Только это не правильно, поскольку 0) @sysfileid будет преобразовано в int, и , возможно, урезано. Коды возврата процедур всегда int. 1) код возврата хранимой процедуры в ASE должен использоваться для индикации успешности завершения процедуры, причем только 0 считается успешным завершением. Конечно, в конце концов, клиентское приложение или вызывающая процедура могут интерпретировать эти значения по-своему, но все же стандарт есть стандарт. Проблемы могут возникнуть, например, при неудаче вызова процедуры системного плана (например, если на сервере нет процедуры), тогда вернеться отрицательный код возврата. Не понятно другое, зачем вообще так делать. CREATE PROCEDURE dbo.Add_File @sysfileid numeric(10) output, -- видим, что @sysfileid объявлена как выходной параметр. -- оно и так вернеться. ... AS -- я бы добавил declare @rc int select @rc = 0 insert into acceptfile values(@filename, @part_number, @begindate, @enddate, @subsystem, @sequence_id) -- и здесь было бы Select @sysfileid = @@identity, @rc = case when @@rowcount = 1 then 0 else 1 end return @rc Тогда код возврата использовался бы по назначению, а идентификатор только что созданной записи возвращался бы через выходной параметр. Кстати, чтобы получить выходной параметр, не забудьте объявить его выходным и на клиенте при вызове тоже, уж как это делать в PB я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2004, 12:58 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=32634067&tid=2014304]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
285ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 621ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...