31.08.2010, 20:31 | #1 |
Боец
|
AX2009 RU5: ADORecordSet, вопрос на 16 баллов
Коллеги,
Кто сможет запустить отработку класса ССADORecordSet на сервере? В 3-ке работает без проблем - как на сервере, так и на клиенте. В 2009 на клиенте отрабатывает, на сервере - стабильно валит АОС. X++: static void ccADOConnection(Args _args) { CCADOConnection ccADOConnection; CCADOCommand ccADOCommand; CCAdoRecordSet ccADORecordSet; CCADOFields ccADOFields; CCADOField ccADOField; str sqlStr; str connectionString; counter total; ; connectionString = "Provider=SqlOleDb; Server=axaptaDev; Database=Develop; User ID=Test; Password=Test"; new InteropPermission(InteropKind::ComInterop).assert(); ccADOConnection = new CCADOConnection(); ccADOConnection.connectionTimeout(2000); ccADOConnection.commandTimeout(60000); ccADOConnection.open(connectionString); if (ccADOConnection) { ccADOCommand = new CCADOCommand(); ccADOCommand.activeConnection(ccADOConnection); sqlStr = 'SELECT * From SMS'; ccADORecordSet = New CCAdoRecordSet(); ccADORecordSet.open(sqlStr, ccADOConnection); } while (!ccADORecordSet.EOF()) { total ++; ccADOFields = ccADORecordSet.fields(); ccADOField = ccADOFields.itemName('RowId'); info(strFmt("%1", ccADOField.value())); ccADORecordSet.moveNext(); if (total > 15) break; } } |
|
|
За это сообщение автора поблагодарили: Logger (3). |
31.08.2010, 21:30 | #2 |
Участник
|
Наверное, проблема в том, что все классы CCADO* имеют модификатор "Client".
Создайте серверные копии этих классов (не забудьте по InteropPermission при вызове new Com()) и используйте их при работе на сервере. Все работает без проблем
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: lev (18), alek_frm (1), DSPIC (16). |
31.08.2010, 22:30 | #3 |
Administrator
|
А InteropPermission работает на сервере?
__________________
Возможно сделать все. Вопрос времени |
|
31.08.2010, 22:34 | #4 |
Участник
|
Так он для сервера и предназначен
Secured APIs
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: sukhanchik (4), IvanS (1). |
01.09.2010, 17:31 | #5 |
Участник
|
Недавно тоже столкнулся, вот небольшой фак на пямять.
Что нужно: 1) Классы CCADO* Поменять на called from 2) использовать new InteropPermission(InteropKind::ComInterop).assert(); 3) Если у вас 64 битный аос - объект не создастся - проблема с дровами под x64 (как я понял) я вышел из положения поменяв драйвер connection = new CCADOConnection(); constr = new SqlSystem().loginConnectString(); constr = strreplace(constr, 'Driver={SQL Native Client}', 'Provider=SQLNCLI10'); connection.open(constr); |
|
|
За это сообщение автора поблагодарили: Logger (1), alek_frm (1), DSPIC (16). |
01.09.2010, 18:15 | #6 |
Боец
|
Круть, работает. Спасибо! Проблема была в том, что поленился у всех CCADO* классов изменить тип запуска.
По поводу InteropPermission. Эту проверку на сервере можно отключить путём добавления ключей "-console 01 -caslevel=[enable/disable/trace]" в параметры запуска АОС'а, после чего оборачивать код в InteropPermission(InteropKind::XXXX).assert() нет необходимости. Спасибо вам, добрые люди! |
|
01.09.2010, 18:19 | #7 |
Участник
|
По ссылке, которую я провел, это выделено желтым цветом
__________________
Axapta v.3.0 sp5 kr2 |
|