AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.05.2012, 07:38   #1  
Dark Light is offline
Dark Light
Участник
 
64 / 49 (0) +++
Регистрация: 17.02.2009
Адрес: Омск
Post
Для ODBC попробуйте так:
X++:
otherStr += "DRIVER={SQL Server}";
otherStr += ";Trusted_Connection=No";
otherStr += strfmt(";SERVER=%1",    ...);
otherStr += strfmt(";DataBase=%1",  ...);
otherStr += strfmt(";UID=%1",       ...);
otherStr += strfmt(";PWD=%1",       ...);
loginProp.setOther(otherStr);

По поводу Connection:
1) почему не использовать стандартные методы con.ttsbegin() и con.ttsabort()?
2) запрос на удаление к БД идет по уникальному ключу. Если ключ содержит текстовое поле, то проблема может быть в Adjustment'е.

Пример: поле Field имеет длину 10 символов. В Аксапте значение в этом поле равно "Код1". В БД оно может быть записано или как "Код1______", или как "______Код1" ("_" - это пробел). Это нужно учитывать при вставке через запрос.

Создайте 2 записи: одну из Аксапты, вторую - через запрос. И посмотрите, есть ли разница в текстовых полях.

Последний раз редактировалось Dark Light; 16.05.2012 в 08:00.
За это сообщение автора поблагодарили: NataLee (1), Corel (1).
Старый 16.05.2012, 15:40   #2  
Corel is offline
Corel
Участник
Ex AND Project
 
73 / 15 (1) ++
Регистрация: 19.04.2007
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Это все где выполняется? На стороне клиента или на стороне сервера? Там где это выполняется соответствующий драйвер ODBC установлен?
Класс работает на сервере, тестовый джоб на клиенте. И там и там в параметрах ODBC имеются драйвера SQL Native Client 10.0, и там и там настроен и проверен User DSN

Цитата:
Сообщение от Dark Light Посмотреть сообщение
Для ODBC попробуйте так:
X++:
otherStr += "DRIVER={SQL Server}";
otherStr += ";Trusted_Connection=No";
otherStr += strfmt(";SERVER=%1",    ...);
otherStr += strfmt(";DataBase=%1",  ...);
otherStr += strfmt(";UID=%1",       ...);
otherStr += strfmt(";PWD=%1",       ...);
loginProp.setOther(otherStr);
Так прошло. То есть, дело в драйвере или TrustedConnection, выходит?

Цитата:
Сообщение от Dark Light Посмотреть сообщение
По поводу Connection:
1) почему не использовать стандартные методы con.ttsbegin() и con.ttsabort()?
Попробовал - не то, т.к. в таком случае отменяются и транзакции, создаваемые обработкой (для записи в журнал). То есть, тут смысл такой: запросом к SQL создаются записи в таблице блокировок, чтоб аналогичные одновременно работающие обработки не мешали друг другу, создаются строки журнала, после чего идёт откат транзакции по таблице блокировок.

Насчёт Adjustment - проверю.
Старый 16.05.2012, 15:56   #3  
Omeo is offline
Omeo
Участник
 
129 / 50 (2) ++++
Регистрация: 18.03.2004
Адрес: Moscow
мы используем системный dsn из настроек :
X++:
LP.setDSN(_odbcDSN);
полагаю, не надо напоминать (на всякий случай) что 32-х и 64-х битные драйвера ODBC настраиваются в разных местах ...
Старый 16.05.2012, 19:03   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,662 / 1167 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Corel Посмотреть сообщение
Класс работает на сервере, тестовый джоб на клиенте. И там и там в параметрах ODBC имеются драйвера SQL Native Client 10.0, и там и там настроен и проверен User DSN
(...)
То есть, дело в драйвере или TrustedConnection, выходит?
Дело в том, что необходимо явным образом указать имя используемого драйвера. Вот этот фрагмент

Driver = {SQL Server}

В Вашем варианте это будет примерно так

X++:
static void testODBCConnection(Args _args)
{
    ODBCConnection con;
    LoginProperty   LP = new LoginProperty();
    ;
    LP.setServer("Server");
    LP.setDatabase("DB");
    LP.setUserName("user");
    LP.setPassword("pwd");
    // Фигураные скобки не обязательны
    LP.setOther("DRIVER={SQL Server}");
// Или если с Windows аутентификацией без указания логина/пароля
//    LP.setOther("DRIVER={SQL Server};Trusted_Connection=Yes");

    con = new ODBCConnection(LP);

}
Кстати, корректный синтаксис строк подключения можно посмотреть вот на этом сайте http://www.connectionstrings.com/
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: NataLee (1), driller (2), Player1 (1).
Старый 17.05.2012, 08:45   #5  
Dark Light is offline
Dark Light
Участник
 
64 / 49 (0) +++
Регистрация: 17.02.2009
Адрес: Омск
Цитата:
Сообщение от Corel Посмотреть сообщение
Попробовал - не то, т.к. в таком случае отменяются и транзакции, создаваемые обработкой (для записи в журнал).
Здесь лучше использовать класс UserConnetion. Он создает отдельное подключение к БД, и тогда данная схема сработает
X++:
Connection    con = new UserConnection();

ttsbegin;

con.ttsbegin();

//SQL запрос
...
//SQL запрос

//Обработка в Аксапте
...
//Обработка в Аксапте

con.ttsabort();

ttscommit;
Только тут нужно будет ещё сделать блок try/catch, чтобы в случае ошибки в catch'е вызвать con.ttsabort().

Цитата:
Сообщение от Corel Посмотреть сообщение
То есть, тут смысл такой: запросом к SQL создаются записи в таблице блокировок, чтоб аналогичные одновременно работающие обработки не мешали друг другу, создаются строки журнала, после чего идёт откат транзакции по таблице блокировок.
А из Аксапты доступа к данной таблице нет? Ведь гораздо будет проще в конце операции просто удалять нужную запись из LocksTable.

Последний раз редактировалось Dark Light; 17.05.2012 в 08:53.
Теги
odbc, ax2009

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axilicious:IDMF Post Installation Issue : ODBC Connection Blog bot DAX Blogs 0 28.01.2011 23:14
Update ошибка в ODBC Oracle Link DAX: Программирование 2 03.12.2010 14:58
Ошибка с работой Business Connector через ISS. Dimonishe DAX: Программирование 2 01.08.2006 15:14
Чтение данных из SQL Server через ODBC. Не работает в 3-х звенке sukhanchik DAX: Программирование 7 30.05.2005 17:52
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:11.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.