powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / расширенная процедура
44 сообщений из 44, показаны все 2 страниц
расширенная процедура
    #32039449
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
угораздило меня написать процедурку

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
unit func;
interface

function xp_test:integer; stdcall;
function GetXpVersion:integer; stdcall;

implementation

function xp_test:integer; stdcall;
begin
result :=  666 ;
end;

function GetXpVersion:integer; stdcall;
begin
result:= 1 ;
end;

end.


dll цепляется, но возвращает NULL
может кто писал, подскажите
...
Рейтинг: 0 / 0
расширенная процедура
    #32039455
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
EXEC sp_addextendedproc 'xp_test', 'TestDll.dll'


Код: plaintext
1.
2.
declare @f int
exec xp_test @f output
select @f


на выходе - NULL
...
Рейтинг: 0 / 0
расширенная процедура
    #32039461
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я конечно не силен в делфи, но думаю что в данном случае надо писать конструкцию типа
Код: plaintext
1.
2.
3.
declare @f int
exec @f = xp_test
select @f

потому как result - результат выполнения функции и вряд ли он будет OUTPUT-параметром
...
Рейтинг: 0 / 0
расширенная процедура
    #32039463
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AAron - блин, заработало !
Спасибо !
...
Рейтинг: 0 / 0
расширенная процедура
    #32039464
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот кусок из 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)
...
Рейтинг: 0 / 0
расширенная процедура
    #32039465
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
declare @txt varchar(33)
exec xp_hello @txt OUTPUT
select @txt AS OUTPUT_Parameter
go
они ошибаются что ли ?
...
Рейтинг: 0 / 0
расширенная процедура
    #32039471
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может и не ошибаются...
я же не вижу текста процедуры xp_hello...

могу предположить что там что-то типа

int xp_hello(int * param1)
{
param1 = ptrInnerParam
}

(сорри за возможные ошибки, забыл я уже C++)... но смысл в том, что скорее параметр передается по указателю, и в случае OUTPUT, это значение TSQL получает обратно.
...
Рейтинг: 0 / 0
расширенная процедура
    #32039482
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Они" не ошибаются. Возвращаемое целочисленное значение в Extended Stored Procedure зарезервировано для флага нормально процедура выполнилась (SUCCESS=1) или ненормально (FAIL=0). Дело, конечно, разработчика - какие еще значения через результат ворачивать, но результат такого мероприятия не гарантирован. А полагается возвращать значения через OUTPUT-параметры. С параметрами работают специальные ODS-фукции, с которыми придется познакомиться в MSDN.
...
Рейтинг: 0 / 0
расширенная процедура
    #32039488
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
будем знакомиться с ентими функциями, всем огромное спасибо !
...
Рейтинг: 0 / 0
расширенная процедура
    #32039718
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может знает кто, библиотеку для Дельфинария, которая содержит описание ODS функций (я могу конечно сам их описать, но это слишком долго).
Я бы с радостью перешел на С, но так вдруг не получится, так что приходится пока на дельфинарии.
...
Рейтинг: 0 / 0
расширенная процедура
    #32039720
puskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дльфинарий не для того создана - Имхо, на нем гуйню писать надо. А процы расшаранные лучше всяко на си, так что не дрейфь, переходи - куча примеров есть, если что.
...
Рейтинг: 0 / 0
расширенная процедура
    #32039721
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дельфовый хидер для ODS видел на http://www.delphi-jedi.org в разделе API Library
...
Рейтинг: 0 / 0
расширенная процедура
    #32039723
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dankov - да нашел, спасибо !
2 puskin - согласен, но для того, что бы понять суть - можно и на Дельфинарии, это же не для использования в коммерческих проектах, а так, потихоничку, перейдем на С
...
Рейтинг: 0 / 0
расширенная процедура
    #32039725
puskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет, ну точно дегенераты - jedi, Yoda....
...
Рейтинг: 0 / 0
расширенная процедура
    #32039727
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?
...
Рейтинг: 0 / 0
расширенная процедура
    #32039734
puskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я про козлов с jedi
...
Рейтинг: 0 / 0
расширенная процедура
    #32039737
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем они тебя так разозлили?
...
Рейтинг: 0 / 0
расширенная процедура
    #32039894
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так вот, пишу я процедуру, она отрабатывает, возвращает данные, а затем выдает

(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
...
Рейтинг: 0 / 0
расширенная процедура
    #32039901
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пиши на си...
...
Рейтинг: 0 / 0
расширенная процедура
    #32039904
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 MiCe - спасибо, помог братан, побольше бы таких дельных советов !
...
Рейтинг: 0 / 0
расширенная процедура
    #32039957
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, это ошибка в коде. Надо смотреть.
...
Рейтинг: 0 / 0
расширенная процедура
    #32039968
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dankov - это пример, кот. я скачал по ссылке.
Первый прокатывает, второй при

ColName1 := 'spname';
i:=srv_describe(SrvProc, 0, ColName1, SRV_NULLTERM, SRVCHAR, MAXLEN, SRVCHAR, 0, nil);

дает ошибку(т.е. то что я писал выше), хотя код возврата не показывает ошибку, данные процедура возвращает, а все равно пишет, блин, ошибка и все

если закомментировать строки, все ОК
...
Рейтинг: 0 / 0
расширенная процедура
    #32039972
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ColName1 типа string, то должно быть так:
i:=srv_describe(SrvProc, 0, pchar(ColName1), SRV_NULLTERM, SRVCHAR, MAXLEN, SRVCHAR, 0, nil);
...
Рейтинг: 0 / 0
расширенная процедура
    #32039977
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видишь ли в чем дело, она отрабатывает корректно,
т.е. в QA я честно вижу 2 столбика данных, а откуда это сообщение вылазит, нипойму.
Насчет pchar можно попробовать
...
Рейтинг: 0 / 0
расширенная процедура
    #32039978
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i:=srv_describe(SrvProc, 0, ColName1, SRV_NULLTERM, SRVCHAR, MAXLEN, SRVCHAR, 0, nil)
второй параметр блин... нумерация с 1!
и не обижайся...
...
Рейтинг: 0 / 0
расширенная процедура
    #32039979
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я пробовал нумерацию и с 0, и с 1 и всяко разно, один фиг
...
Рейтинг: 0 / 0
расширенная процедура
    #32039982
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
расширенная процедура
    #32039983
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dankov данные типа pchar
...
Рейтинг: 0 / 0
расширенная процедура
    #32039984
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опублику весь текст процедуры или кинь на мыло...
...
Рейтинг: 0 / 0
расширенная процедура
    #32039987
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все победил !
этот чувак, который делал пример написал тахую фигню:
ColName1 : array [0..MAXNAME - 1] of DBCHAR;
ColName2 : array [0..MAXNAME - 1] of DBCHAR;
где
type
DBCHAR = Char;

после замены этой конструкции на pchar, как советовал Dankov, заработало, мда ..........
...
Рейтинг: 0 / 0
расширенная процедура
    #32041285
bug76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, привет!
Эта тема наверное всех уже здесь задолбала, но я предлагаю раз и навсегда добить ее.
Итак: Написание 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" не приходит. С выходными еще хуже - в обеих передается пустота.

Кто делал что-то подобное - пожалуйста помогайте.
...
Рейтинг: 0 / 0
расширенная процедура
    #32041923
bug76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мда...
а в ответ тишина...
вариантов 2: или все всё знают и молчат или никому эта фигня не интересна. странно.
ладно, буду биться сам.
...
Рейтинг: 0 / 0
расширенная процедура
    #32041969
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что возвращает srv_paramstatus(SrvProc, 5 и 6)...
...
Рейтинг: 0 / 0
расширенная процедура
    #32041971
sorgery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну похоже что возвращает статус параметра под номером 5, 6 и т.д. Если есть 5 параметр отсутствует полуем на выходе -1

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odssql/ods_6_ref_06_00fn.asp
...
Рейтинг: 0 / 0
расширенная процедура
    #32041982
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне не надо это объяснять...
я это и так помню....
...
Рейтинг: 0 / 0
расширенная процедура
    #32041984
sorgery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в чем проблема? Что зашлешь в параметрах, то и получишь.
з.ы. я кажись невьежаю что именно тебя интересует :-(
...
Рейтинг: 0 / 0
расширенная процедура
    #32041991
Mva New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чего-то я по адресу http://www.delphi-jedi.org ни чего не нашел ... куда не ткнусь везде говорят AppId кривой и ничего тебе не покажем ...

Не выручите случаем библиотечкой и примерами? (mvanew@ngs.ru)
...
Рейтинг: 0 / 0
расширенная процедура
    #32042177
bug76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все параметры при вызове присутствуют - здесь все нормально.
Проблема вот в чем: 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 пока не разбирался.
Может я что не так делаю? С указателями то в делфях особо часто работать не приходится - надобности нет.
...
Рейтинг: 0 / 0
расширенная процедура
    #32042181
sorgery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я и сам с указателями в паскале не ахти, но похоже беда с привилением типов IMHO
...
Рейтинг: 0 / 0
расширенная процедура
    #32042192
bug76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но если указатель-то есть - что-то должно быть и там куда он указывает. Проблема наверное в представлении этой информации. Но выцепить-то ее как-то должно быть можно.

А процедурка-то очень нужна, без нее - кранты. Придется ооооочень многое переделывать. На начальном этапе разработки посчитал, что написать ее - пара пустяков и оставил на потом, так что сейчас уже почти все готово, кроме нее. Уже месяц ползаю по инету в поисках - пусто. Этот форум - почти единственный, где затрагивалась эта тема.
Приходит в голову только 1 тупой выход - все конвертить в varchar и передавать через него, но это же полный бред.

Так что спецы по указателям и подобным делам - помогайте.
...
Рейтинг: 0 / 0
расширенная процедура
    #32042193
sorgery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Варчар тоже может не спасти. Наверное глупо грит о преходи на Визул Си, но там таких проблем нет. А если b объявить как вариант?
...
Рейтинг: 0 / 0
расширенная процедура
    #32042200
bug76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
variant попробуем, но что-то слабо верится

А насчет Си - процедурка довольно навороченная, а Си я почти не знаю, так что будут проблемы. Единственное - можно попробовать написать длллину на Си, которая будет вызывать мою процедуру из делфевой длллины. Работа на Си будет сведена к минимуму, но это уже извращения, хочется сделать как-то по-правильнее
...
Рейтинг: 0 / 0
расширенная процедура
    #32042205
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я думаю что в дельфях есть отладчик....
посмотри в нем что и куда пишется....
...
Рейтинг: 0 / 0
расширенная процедура
    #32046645
Leonid Belousov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Компонент такой для Delphi написал, летает и не жужжит... смотрите сюда:
http://www.bramc.ru/soft/xproc.html
Только он не фришный...
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / расширенная процедура
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]