Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Access Violation при вызове функций СОМ-сервера из extended stored proc  [new]
Vetal
Member

Откуда: Киев
Сообщений: 1019
Всем привет!

Суть проблемы в чем:

Другая фирма дала нам клиентскую библиотеку для доступа к ихней базе данных. Эта клиентская библиотека написана на Visual Basic и является COM-сервером в длл-ке.
Написал тестовый екзешник который дергает функции этой библиотеки через СОМ. Все работает нормально.
Дальше. Написал длл-ку с extended stored процедурами, которые дергают фунцкии вышеописанного СОМ-сервера.
Так вот, эти функции вышеописанного СОМ-сервера работают через раз, если их вызывать из длл-ки с хр-процедурами для MS SQL Server'a (если их вызывать из экзешника, работают без проблем). То-бишь, то отрабатывают нормально, то выдают ошибку:
"Access violation at address 6A9E5D55 in module 'MSVBVM60.DLL'. Read of address 00000018".
Причем периодичность работы/неработы абсолютно непредсказуемая.

Подскажите пожалуйста, что можно сделать? А то уже не могу больше...

Всем заранее спасибо

Vetal
28 апр 04, 21:13    [655771]     Ответить | Цитировать Сообщить модератору
 Re: Access Violation при вызове функций СОМ-сервера из extended stored proc  [new]
Crimean
Member

Откуда:
Сообщений: 13148
А почему не дергать COM - сервер напрямую? :O
sp_OACreate и вперед.
Ну и зачем одному серверу так хитро лезть к другому серверу?..
28 апр 04, 21:40    [655790]     Ответить | Цитировать Сообщить модератору
 Re: Access Violation при вызове функций СОМ-сервера из extended stored proc  [new]
rst
Member

Откуда: Йобурк
Сообщений: 1005
Причем периодичность работы/неработы абсолютно непредсказуема

Наврядли sql сервер тут виноват.. проблема где-то в вашем коде..(я так думаю(c))
может проблема в том что хп работает в разных потоках с этими com?
29 апр 04, 13:06    [656899]     Ответить | Цитировать Сообщить модератору
 Re: Access Violation при вызове функций СОМ-сервера из extended stored proc  [new]
Vetal
Member

Откуда: Киев
Сообщений: 1019
Crimean
А почему не дергать COM - сервер напрямую? :O
sp_OACreate и вперед.
Ну и зачем одному серверу так хитро лезть к другому серверу?..

Потому что в MS SQL нет необходимых объектов (в этой COM-библиотеке используются VarArray для приема и передачи данных).
Кроме того, библиотека уже написана. Осталось только разобраться почему возникает эта ошибка.

Причем периодичность работы/неработы абсолютно непредсказуема

rst

Наврядли sql сервер тут виноват.. проблема где-то в вашем коде..(я так думаю(c))
может проблема в том что хп работает в разных потоках с этими com?

Неа. В одной хранимой процедуре запускаются все расширенные хранимые процедуры.
29 апр 04, 16:15    [657676]     Ответить | Цитировать Сообщить модератору
 Re: Access Violation при вызове функций СОМ-сервера из extended stored proc  [new]
rst
Member

Откуда: Йобурк
Сообщений: 1005
Хорошо бы упростить код до минимума и представить..
Да и в таких плохоотлаживаемых вещах Log тоже стоит вести..
Если через CoCreateInstance обращаетесь к com - стоит попробовать параметр CLSCTX_LOCAL_SERVER.
29 апр 04, 17:56    [657972]     Ответить | Цитировать Сообщить модератору
 Re: Access Violation при вызове функций СОМ-сервера из extended stored proc  [new]
Vetal
Member

Откуда: Киев
Сообщений: 1019
Разобрался вроде в чем причина. Используется СОМ-библиотека, написанная на Visual Basic. Проблема в том, что она однопоточная. Есть расш хр процедура logon, logoff и соответственно куча функций.
Если я вызываю их из Query Analyzer в разных батчах, то-есть, в одном батче логон, во втором еще что-то, то довольно часто получается так, что логон вызвался в одном потоке MS SQL Server'a, а какая-нить фукция в другом. Что и приводит к Access Violation. Придумал, что можно сделать. Можно переписать хранимые процедуры (не расширенные) таким образом, чтобы они использовали в теле одной процедуры и логон, и вызов необходимой функции, и логофф. Таким образом, как я надеюсь, все будет работать в одном потоке. Отсюда сразу возникает вопрос.
Есть хранимая процедура, с кучей операторов и вызовами расширенных хранимых процедур. Не может ли оптимизатор MS SQL Server'a самостоятельно разбить тело одной хранимой процедуры и выполнять его в разных потоках? Я надеюсь он этого не делает... Если он так делает, то проблему нельзя будет решить описанным выше образом... :(
18 май 04, 14:11    [684698]     Ответить | Цитировать Сообщить модератору
 Re: Access Violation при вызове функций СОМ-сервера из extended stored proc  [new]
Vetal
Member

Откуда: Киев
Сообщений: 1019
Народ, подскажите пож, будет ли оптимизатор параллелить или нет?
18 май 04, 15:36    [685079]     Ответить | Цитировать Сообщить модератору
 Re: Access Violation при вызове функций СОМ-сервера из extended stored proc  [new]
JibSkeart
Member

Откуда: Из далекой галактики
Сообщений: 19870

MS SQL Server'a самостоятельно разбить тело одной хранимой процедуры и выполнять его в разных потоках?


Неа ...
остается только все задачи делать синхронно , то есть по очереди :)
либо переписывать COM с multi -threaded model


 ш
(';')
(V),(V),,
JS
18 май 04, 15:55    [685166]     Ответить | Цитировать Сообщить модератору
 Re: Access Violation при вызове функций СОМ-сервера из extended stored proc  [new]
Vetal
Member

Откуда: Киев
Сообщений: 1019
Так мне ж как раз и надо, чтобы он не додумался распараллелить хранимую процедуру на потоки...
А то он разные батчи из Квери Аналайзера может в разных потоках выполнять, и у меня функции выдают акцесс виолайшн.
18 май 04, 15:59    [685174]     Ответить | Цитировать Сообщить модератору
 Re: Access Violation при вызове функций СОМ-сервера из extended stored proc  [new]
JibSkeart
Member

Откуда: Из далекой галактики
Сообщений: 19870
хотя какая разница в каком потоке будещь вызывать
функцию у СОМ , так как он у тебя single-threading то он у себя внутри
все запросы будет выставлять в очередь .
это тоже самое что из нескольких клиентов ты будещь вызывать методы у СОМ
и вообще однопотоковую модель нерекомендуется использовать
или уж юзать критические секции , но это уже песня из другой оперы .


 ш
(';')
(V),(V),,
JS
18 май 04, 16:12    [685215]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить