Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];

Вниз

2000 Вызов внешнее приложение dll   Найти похожие ветки 

 
KAA   (2003-05-12 11:07) [0]

Есть dll с процеурами. Необходимо из MSSQL вызвать нужную процедуру из этого dll файла.

Я могу создать Extended Stored Procedures
EXEC master..sp_addextendedproc MkDirTest, "c:\sqldll.dll"
Но вызов процедуры MkDirTest выдает ошибку:
Cannot load the DLL c:\sqldll.dll, or one of the DLLs it references. Reason: 126(Не найден указанный модуль.).


 
Дмитрий Баранов   (2003-05-12 11:24) [1]

1) Права sysadmin?
2) Прописать путь, где лежит dll, в PATH?
3) или просто сделать COM-обертку над этой DLL, создать обычную ХП или функцию, затем через sp_OACreate, sp_OAMethod и пр. создать COM-объект и вызвать его методы, которые будут дергать твою DLL. На производительности не сильно скажется.


 
KAA   (2003-05-12 11:41) [2]

Собственно проблема в том, что он ее не находит. Выдает ту де ошибку, если написать неправильный путь. Но ведь я ее четко выбираю, четко не нее указываю, уже проверял еоднократно.


 
sniknik   (2003-05-12 12:10) [3]

http://home.earthlink.net/~akonshin/delphi_ru.htm
вот здесь есть рабочий пример (MS SQL Alerter) как такую dll написать, пробовал, но там насколько помню dll рекомендуется в bin\ ложить (прописана). Во всяком случае посмотреть как реализовано полезно будет.


 
KAA   (2003-05-12 12:25) [4]

А в чем принципальные особенности ДЛЛ в этом примере?
Просто саму длл пишу не я, мне нужно использовать будет уже готовую. Сама длл работает, мне нужно просто отработать процедуру из этой длл.


 
sniknik   (2003-05-12 12:37) [5]

там кроме того описано как подключить готовую (после скомпиляния), а это то тебе и нужно. ?


 
KAA   (2003-05-12 12:51) [6]

Подключение Extended Stored Procedures в sql? Я тоже самое делаю.


 
sniknik   (2003-05-12 13:04) [7]

чего то мы друг друга не понимаем.

делаеш, но судя по вопросу чегото не получается, а по тому примеру можно посмотреть как получается (и программа и компиляция и подключение/вызов описано).

ладно будем считать я не понял чего ты хочеш.



 
KAA   (2003-05-12 14:20) [8]

Я сам не занимаюсь написанием dll, мне там не на что смотреть. Сама dll уже написана, передо мной задача либо ее запустить, вернее запустить конкретную процедуру из этой dll, либо сказать почему нельзя запустить ИМЕННО ЭТУ DLL.


 
sniknik   (2003-05-12 14:54) [9]

то что она уже написана ясно с самого начала. неясно почему не хочеш попробовать
взять 100% рабочую, подключить (описание подключения есть) проверить что работает, и сделать то же самое для "ИМЕННО ЭТОЙ DLL",
в случае если одна работает другая нет, тогда можно говорить более определенно, может твоя написана не для MSSQL (не по правилам/...), может тот модуль не найденый просто не описан, или dll не зарегистрирована. да мало ли чего, отказ от сравнения и изучения не лутший способ решить проблему.


 
KAA   (2003-05-12 16:06) [10]

Сам факт запуска какой-то программы из инета на работающем сервере мне уже не нравится. Причем это не понравится не только мне, а если еще что-нибудь случится...
Что вообще эта длл делает, как она себя проявляет? Вникать в исходники я не в состоянии.


 
Medvedka   (2003-05-12 16:06) [11]

Может дело в том, что SQL server находится на другой машине...
8-))))))


 
KAA   (2003-05-12 16:20) [12]

Нет, все находится на одной машине, и даже путь к ДЛЛ я устанавливаю кликнув на сам файл средствами самого sql.


 
sniknik   (2003-05-12 17:27) [13]

сдаюсь ;о)). фраза
> Сам факт запуска какой-то программы из инета на работающем сервере мне уже не нравится.
меня убила. я то думал что все и всегда должны все пробовать на тестовой базе, как делаю я сам. но конечно дело хозяйское, только как бы не было потом мучительно больно ...

всетаки скачал пример (а то что проверял давно, посеял), и попытаюсь еще раз обратить внимание (вам то недосуг вникать в исходники, а зря)

информация к размышлению.
из инсталяции "моей" dll
....
- copy BIN\xp_acnt.dll to MSSQL\BINN directory;
- run install.sql in SQL Query Analizer, current database must be "master";

install.sql = sp_addextendedproc " xp_send_params_to_pipe", "xp_acnt.dll"

которая присутствует именно в таком виде (Case Sensitive, maybe)
в
exports
GetXpVersion name "__GetXpVersion",
xp_send_params_to_pipe name " xp_send_params_to_pipe";

а у Вас так же? в той, правильной, директории имеющаяся экспортируемая процедура регистрируется?

p.s. все больше доставать не буду. а то нехорошо получается, пытаюсь склонить человека проявить активность в решении своей же проблемы а он явно ждет готового ответа.


 
Mitko   (2003-05-12 17:42) [14]

http://www.berenddeboer.net/delphi/index.html


 
KAA   (2003-05-12 18:32) [15]

Запускать левые фалы на сервере, это все-равно что курить на бенозаправке. Не обязательно должно все взорваться, но сам факт нарушения правил уже череват. Пробую я то на тестовой базе, а тестового сервера у меня нет.

Вообщем использовали подобную dll из другого источеника, выяснили что в нашей dll что-то там недописано, в частности в рабочей подключался некий модуль Opends60.dll. Но исходники того примера dll крайне непонравились программисту, пишущего нашу dll.


Хотя есть другой вопрос, из sql по UDP можно отправить сигнал?


 
sniknik   (2003-05-12 19:03) [16]

> Но исходники того примера dll крайне непонравились программисту.
ну это его проблемы, надо писать именно так и все тут (по другому как правило не работает :о).
"обертка" для Opends60.dll в том примере (имею в виду "мой", ваш "из другого источеника" не видел) модуль srv.pas
обрати внимание в нем
const
...
srvdll = "opends60.dll";

> Хотя есть другой вопрос, из sql по UDP можно отправить сигнал?
именно для подачи сигнала клиентам (был такой вопрос), автор и дал эту ссылку с тем примером, там оповещение шлется через pipe но при желании можно переделать и на UDP. (думаю без проблем, но это предположительно, не пробовал)

p.p.s. начал бы сразу внимание на исходники обращать, сэконимил бы себе день.


 
KAA   (2003-05-12 19:17) [17]

А чем этот sql так выделяется. Вот у меня есть старая dll, ее можно отработать. По идее это библиотека с опредеенными процедурами. В чем вообще принципиальная разница межу запуском из sql или еще откуда?

Вообще честно говоря в этих исходниках черт голову сломит, чтоб их под свои нужды переделывать. Хорошо бы как можно больше сделать средствами самого sql, и как можно меньше выполнять всякими дополнительными модулями.


 
sniknik   (2003-05-12 23:50) [18]

> Вообще честно говоря в этих исходниках черт голову сломит.
;о))))
э да ты батенька под 1С dll-и не писал (имею ввиду не стандартный COM с которыми он тоже работает после регистрации в системе а "родные" написанные под 1С и регистрируемые изнутри) после них эти ясны и прозрачны как слеза ребенка. :о)

> больше сделать средствами самого sql
есть уже такая вещь как SQL Alert и у самого MSSQL дополнительный пакет, но там скорее всего оповещения только "своим" SQL серверам. а не широковешательные посылки. но конкретного по нему ничего сказать не могу (не пользовался, только читал да еще на вражеском, не все понял) могу только послать не мелкософт... ищи.


 
KAA   (2003-05-13 09:43) [19]

С 1С я пока не связывался и желанием связываться не горю. :) У меня есть своя база, которую я и пестую, а клиентом занимается другой человек. Подобные навороты с dll - не моя специализация.

А по поводу SQL Alert, так я там что-то даже не видел описния, что он делает. А пример я нашел очень простой, буквально пара процедур и пара объявлений. А цель очень проста, подать по UDP сигнал в нужный момент.


 
sniknik   (2003-05-13 11:01) [20]

> что-то даже не видел описния, что он делает
прямо под ссылкой на скачивание читать не пробовал?

MS SQL Alerter (SQLAlert.zip, 3 Jul 2000, ~52K, D4+). MS SQL extended stored procedure и приложение, демонстрирующие посылку сообщений с SQL сервера по его инициативе (например, в триггере) и прием их в приложении, запущенном на том же или другом компьютере локальной сети. Полезно и как пример написания extended stored procedure на Delphi, и как пример использования Named Pipes для обмена сообщениями по локальной сети (класс PipeControler).


 
KAA   (2003-05-13 14:15) [21]

Ну я ожидал нечто более подробное. Что, куда, как, по каким протоколам. Вообще примеры должны быть простыми и понятными, и содержать минимум, т.е. ничего лишнего.


 
KAA   (2003-05-16 12:30) [22]

Еще один вопрос по поводу запуска DLL из SQL.
Я создал Extended Stored Procedures, все работло, теперь мне нужно НЕ ПЕРЕЗАПУСКАЯ сам SQL сервер удалить эту самую DLL. Но она в данный момент используется, и удалять ее мне не дает система. Что нужно сделать, чтоб эта DLL "освободилась"? Единственный вариант, который я нашел, это перезапустить сам SQL сервер, но этот вариант не подходит.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.008 c
7-13494
Замученный
2003-04-02 17:38
2003.06.05
Работа с com портом


14-13433
Переяслов Григорий
2003-05-19 17:07
2003.06.05
Бинарные данные внутри bpl


3-13076
gedd
2003-05-17 17:56
2003.06.05
Настройки в BDE


1-13284
Vulko
2003-05-17 22:41
2003.06.05
Как вызвать стандартный диалог выбора цвета


1-13233
zeppelin
2003-05-27 13:18
2003.06.05
TreeView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский