|
|
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
угораздило меня написать процедурку Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. dll цепляется, но возвращает NULL может кто писал, подскажите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 16:51:14 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Код: plaintext 1. 2. на выходе - NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 17:08:09 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
я конечно не силен в делфи, но думаю что в данном случае надо писать конструкцию типа Код: plaintext 1. 2. 3. потому как result - результат выполнения функции и вряд ли он будет OUTPUT-параметром ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 17:27:24 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
2 AAron - блин, заработало ! Спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 17:29:50 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Вот кусок из BOL Transact-SQL Script -- TSQL script exercising xp_hello sample use master go sp_addextendedproc 'xp_hello', 'xp_hello.dll' go -- Call xp_hello with literal parameters declare @txt varchar(33) exec xp_hello @txt OUTPUT select @txt AS OUTPUT_Parameter go sp_dropextendedproc 'xp_hello' go dbcc xp_hello(free) go -- EXPECTED RESULTS -- Column 1: -- --------- -- Hello World! -- (1 row(s) affected) -- OUTPUT_PARAMETER -- ---------------- -- Hello World! -- (1 row(s) affected) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 17:33:09 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
declare @txt varchar(33) exec xp_hello @txt OUTPUT select @txt AS OUTPUT_Parameter go они ошибаются что ли ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 17:34:10 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
может и не ошибаются... я же не вижу текста процедуры xp_hello... могу предположить что там что-то типа int xp_hello(int * param1) { param1 = ptrInnerParam } (сорри за возможные ошибки, забыл я уже C++)... но смысл в том, что скорее параметр передается по указателю, и в случае OUTPUT, это значение TSQL получает обратно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 17:50:27 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
"Они" не ошибаются. Возвращаемое целочисленное значение в Extended Stored Procedure зарезервировано для флага нормально процедура выполнилась (SUCCESS=1) или ненормально (FAIL=0). Дело, конечно, разработчика - какие еще значения через результат ворачивать, но результат такого мероприятия не гарантирован. А полагается возвращать значения через OUTPUT-параметры. С параметрами работают специальные ODS-фукции, с которыми придется познакомиться в MSDN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 18:09:24 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
будем знакомиться с ентими функциями, всем огромное спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 18:15:46 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
может знает кто, библиотеку для Дельфинария, которая содержит описание ODS функций (я могу конечно сам их описать, но это слишком долго). Я бы с радостью перешел на С, но так вдруг не получится, так что приходится пока на дельфинарии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 17:10:52 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Дльфинарий не для того создана - Имхо, на нем гуйню писать надо. А процы расшаранные лучше всяко на си, так что не дрейфь, переходи - куча примеров есть, если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 17:17:55 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Дельфовый хидер для ODS видел на http://www.delphi-jedi.org в разделе API Library ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 17:24:35 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
2 Dankov - да нашел, спасибо ! 2 puskin - согласен, но для того, что бы понять суть - можно и на Дельфинарии, это же не для использования в коммерческих проектах, а так, потихоничку, перейдем на С ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 17:28:48 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
нет, ну точно дегенераты - jedi, Yoda.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 17:31:51 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
я про козлов с jedi ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 18:04:21 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Чем они тебя так разозлили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 18:16:34 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
так вот, пишу я процедуру, она отрабатывает, возвращает данные, а затем выдает (2 row(s) affected) ODBC: Msg 0, Level 19, State 1 SqlDumpExceptionHandler: Process 52 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process. Connection Broken может у кого было такое, поделитесь ..... WINDOWS 2000 Prof SQL 2000 DE SP2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 12:04:10 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
пиши на си... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 12:26:44 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
2 MiCe - спасибо, помог братан, побольше бы таких дельных советов ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 12:29:49 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Ну, это ошибка в коде. Надо смотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 13:48:46 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
2 Dankov - это пример, кот. я скачал по ссылке. Первый прокатывает, второй при ColName1 := 'spname'; i:=srv_describe(SrvProc, 0, ColName1, SRV_NULLTERM, SRVCHAR, MAXLEN, SRVCHAR, 0, nil); дает ошибку(т.е. то что я писал выше), хотя код возврата не показывает ошибку, данные процедура возвращает, а все равно пишет, блин, ошибка и все если закомментировать строки, все ОК ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 14:00:58 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Если ColName1 типа string, то должно быть так: i:=srv_describe(SrvProc, 0, pchar(ColName1), SRV_NULLTERM, SRVCHAR, MAXLEN, SRVCHAR, 0, nil); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 14:11:26 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
видишь ли в чем дело, она отрабатывает корректно, т.е. в QA я честно вижу 2 столбика данных, а откуда это сообщение вылазит, нипойму. Насчет pchar можно попробовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 14:18:11 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
i:=srv_describe(SrvProc, 0, ColName1, SRV_NULLTERM, SRVCHAR, MAXLEN, SRVCHAR, 0, nil) второй параметр блин... нумерация с 1! и не обижайся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 14:20:32 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
я пробовал нумерацию и с 0, и с 1 и всяко разно, один фиг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 14:24:19 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
2 Dankov данные типа pchar ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 14:27:23 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
опублику весь текст процедуры или кинь на мыло... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 14:28:49 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Все победил ! этот чувак, который делал пример написал тахую фигню: ColName1 : array [0..MAXNAME - 1] of DBCHAR; ColName2 : array [0..MAXNAME - 1] of DBCHAR; где type DBCHAR = Char; после замены этой конструкции на pchar, как советовал Dankov, заработало, мда .......... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 14:32:47 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Народ, привет! Эта тема наверное всех уже здесь задолбала, но я предлагаю раз и навсегда добить ее. Итак: Написание ESP на Delphi , точнее Передача входных/выходных параметров . Только, пожалуйста, не кричите о том что такие вещи на делфяхне пишутся и вообще их писать не обязательно, а если уж надумал - читай BOL, просто кто знает - помогите разобраться, очень надо. Со стрингами вроде бы разобрались - через PChar все работает на ура. Предлагаю разобраться с другими типами. Попробовал к рассматриваемой выше процедуре xp_delphi_echo добавить еще пару входных параметров типа integer и double и пару таких же выходных. Обрабатываю их примерно так. var a: integer; b: double; pa, pb: pointer; ... // получение входных параметров pa:=srv_paramdata(SrvProc, 2); a:=pa^; // получаем integer pb:=srv_paramdata(SrvProc, 3); b:=pb^; // получаем double ... // передача выходных параметров srv_paramset(SrvProc, 5, pointer(a), 0); srv_paramset(SrvProc, 6, pointer(b), 0); или srv_paramset(SrvProc, 5, @a, 0); srv_paramset(SrvProc, 6, @b, 0); В результате из входных параметров получаем только integer в "a", double в "b" не приходит. С выходными еще хуже - в обеих передается пустота. Кто делал что-то подобное - пожалуйста помогайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 16:33:28 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Мда... а в ответ тишина... вариантов 2: или все всё знают и молчат или никому эта фигня не интересна. странно. ладно, буду биться сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 16:44:50 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
а что возвращает srv_paramstatus(SrvProc, 5 и 6)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 18:12:08 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Ну похоже что возвращает статус параметра под номером 5, 6 и т.д. Если есть 5 параметр отсутствует полуем на выходе -1 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odssql/ods_6_ref_06_00fn.asp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 18:21:43 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
мне не надо это объяснять... я это и так помню.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 18:30:23 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Так в чем проблема? Что зашлешь в параметрах, то и получишь. з.ы. я кажись невьежаю что именно тебя интересует :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 18:32:24 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
чего-то я по адресу http://www.delphi-jedi.org ни чего не нашел ... куда не ткнусь везде говорят AppId кривой и ничего тебе не покажем ... Не выручите случаем библиотечкой и примерами? (mvanew@ngs.ru) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 18:52:50 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Все параметры при вызове присутствуют - здесь все нормально. Проблема вот в чем: srv_paramdata(SrvProc, 2 и 3) насколько я понимаю должны возвращать указатель на параметр, они его действительно возвращают и даже srv_paramtype возвращает правильный тип данных - в моем случае это integer и double, НО при попытке получить значение по эотму указателю pa:=srv_paramdata(SrvProc, 2); a:=pa^; // получаем integer pb:=srv_paramdata(SrvProc, 3); b:=pb^; // получаем double в "a" значение integer мы получаем нормально, а вот в "b" double ни в какую не хочет приходить. С параметрами OUPTUT пока не разбирался. Может я что не так делаю? С указателями то в делфях особо часто работать не приходится - надобности нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2002, 14:49:33 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Я и сам с указателями в паскале не ахти, но похоже беда с привилением типов IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2002, 15:12:08 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Но если указатель-то есть - что-то должно быть и там куда он указывает. Проблема наверное в представлении этой информации. Но выцепить-то ее как-то должно быть можно. А процедурка-то очень нужна, без нее - кранты. Придется ооооочень многое переделывать. На начальном этапе разработки посчитал, что написать ее - пара пустяков и оставил на потом, так что сейчас уже почти все готово, кроме нее. Уже месяц ползаю по инету в поисках - пусто. Этот форум - почти единственный, где затрагивалась эта тема. Приходит в голову только 1 тупой выход - все конвертить в varchar и передавать через него, но это же полный бред. Так что спецы по указателям и подобным делам - помогайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2002, 15:33:59 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
Варчар тоже может не спасти. Наверное глупо грит о преходи на Визул Си, но там таких проблем нет. А если b объявить как вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2002, 15:41:34 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
variant попробуем, но что-то слабо верится А насчет Си - процедурка довольно навороченная, а Си я почти не знаю, так что будут проблемы. Единственное - можно попробовать написать длллину на Си, которая будет вызывать мою процедуру из делфевой длллины. Работа на Си будет сведена к минимуму, но это уже извращения, хочется сделать как-то по-правильнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2002, 16:10:12 |
|
||
|
расширенная процедура
|
|||
|---|---|---|---|
|
#18+
я думаю что в дельфях есть отладчик.... посмотри в нем что и куда пишется.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2002, 16:16:21 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1820764]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 395ms |

| 0 / 0 |
