COM InProcServer для MSSQL
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Re: COM InProcServer для MSSQL
Конечно, все замечания я предложения будут рассмотрены, ошибки пофиксены.
С уважением, ДП
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: COM InProcServer для MSSQL
Провёл тест создания таблицы в MSSQL по описанию DAT-файла и переноса данных из DAT-файла в созданную таблицу.
Всё в скрипте MSSQL (написав ряд stored procedures) - всё через sp_OACreate, sp_OAMethod используя COM-объект.
Работает нормально, хотя и не скажу, что быстро.
Время потраченное на то, чтобы загнать 24509 записей (размер RECORD - 207, MEMO - 300) составило от 5 до 12 минут (файлы на удалённом файл-сервере).
При том, что чтение велось по одному полю из 22 (не RECORD и не GROUP, с ними полей 27) .
То есть, с внесёнными изменениями (какие писал ранее) - всё работает.
ЗЫ: оставшиеся у меня 2 проблемы не мешают:
1. провожу сборку с именем DllCanUnloadNoV, утилитой заменяю на автомате в готовом DLL буковку V на w.
2. внутри всех методов, кроме стандартных для IDispath, ADDRESS(SELF) смещён на 4 байта, как обманул - писал ранее.
ЗЗЫ: Над этим (2) уже всю голову сломал...
Всё в скрипте MSSQL (написав ряд stored procedures) - всё через sp_OACreate, sp_OAMethod используя COM-объект.
Работает нормально, хотя и не скажу, что быстро.
Время потраченное на то, чтобы загнать 24509 записей (размер RECORD - 207, MEMO - 300) составило от 5 до 12 минут (файлы на удалённом файл-сервере).
При том, что чтение велось по одному полю из 22 (не RECORD и не GROUP, с ними полей 27) .
То есть, с внесёнными изменениями (какие писал ранее) - всё работает.
ЗЫ: оставшиеся у меня 2 проблемы не мешают:
1. провожу сборку с именем DllCanUnloadNoV, утилитой заменяю на автомате в готовом DLL буковку V на w.
2. внутри всех методов, кроме стандартных для IDispath, ADDRESS(SELF) смещён на 4 байта, как обманул - писал ранее.
ЗЗЫ: Над этим (2) уже всю голову сломал...
Последний раз редактировалось WadimZapara 22 Февраль 2012, 22:45, всего редактировалось 1 раз.
Компьютер имеет то преимущество перед мозгом, что им пользуются...
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Re: COM InProcServer для MSSQL
У меня T-SQL по-прежнему не работает. Может что ещё надо включить кроме
Код: Выделить всё
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
С уважением, ДП
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: COM InProcServer для MSSQL
1. У меня MSSQL-2000 Enerprise Edition (8.00.2039, SP-4), особых настроек не делал никаких.
2. Если обновил DLL и не перезапускал MSSQL - работать не будет, т.к. у него в памяти после ошибки осталась прежняя копия.
3. Если не исправить на *LONG здесь и в прототипе IDISPATCH - работать не будет
4. Думаю, необходимо и в CreateInstance фабрики дать отказ в инкапсуляции
MSSQL-2003, 2008 не юзаю, подозреваю, там что-то надо включить
2. Если обновил DLL и не перезапускал MSSQL - работать не будет, т.к. у него в памяти после ошибки осталась прежняя копия.
3. Если не исправить на *LONG здесь и в прототипе IDISPATCH - работать не будет
Код: Выделить всё
ClarionFile CLASS,IMPLEMENTS(IClarionFile),TYPE
...
GetTypeInfo PROCEDURE(LONG iTInfo,LONG lcid,*LONG ppTInfo),HRESULT
...
END
Код: Выделить всё
ClarionFileCF.CreateInstance PROCEDURE(LONG pUnkOuter,LONG riid,*LONG ppvObject)
pClarionFile &ClarionFile
hr HRESULT
CLASS_E_NOAGGREGATION EQUATE(80040110h)
CODE
ppvObject=0
IF pUnkOuter THEN RETURN CLASS_E_NOAGGREGATION.
pClarionFile &= NEW(ClarionFile); IF (pClarionFile &= NULL) THEN RETURN E_OUTOFMEMORY.
hr = pClarionFile.QueryInterface(riid,ppvObject); IF hr <> S_OK THEN DISPOSE(pClarionFile).
RETURN hr
Компьютер имеет то преимущество перед мозгом, что им пользуются...
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Re: COM InProcServer для MSSQL
Да, я всё это внёс, тем не менее не фурычит. MSSQL 2008 R2. Может кинешь мне свою dll (заведомо рабочую), я у себя попробую - заработает, значит у меня кривизна, нет, значит в MSSQL (что скорее )
С уважением, ДП
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: COM InProcServer для MSSQL
полетела...
Компьютер имеет то преимущество перед мозгом, что им пользуются...
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: COM InProcServer для MSSQL
Так, заработало - и в T-SQL через spOA... ?
Компьютер имеет то преимущество перед мозгом, что им пользуются...
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Re: COM InProcServer для MSSQL
Да, в T-SQL и проверял (у меня Excel-я нет ). Немного доведу до ума с генерацией под C55 и выпущу новый релиз.
С уважением, ДП