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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.02.2007, 18:02   #1  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
SQL мониторинг + прямой запрос к SQL
Выполняю примерно такой код в джобе (AX 3.0 SP5):

X++:
        queryText   = strfmt("SELECT * FROM SCL_ARTC");
        odbc.ttsbegin();
        res = statement.executeQuery(queryText);
        while(res.next())
        {
           info(strfmt("%1 %2", res.getString(1), res.getString(2)));
        }
        odbc.ttscommit();
Работает....все ок. Включаю мониторинг запросов SQL. Получаю кучу глюков на выбор:
  • Аксапта не может создать RecId и поэтому закрывается
  • Просто падает
  • Выдает ошибку(это всегда): Невозможно выбрать запись.....
Кто нибуть сталкивался с такой проблемой?
Собственно откуда ноги растут понятно. Непонятно как это корректно обработать (снимать галку в настройках перед выполнением запроса? ).
Старый 28.02.2007, 09:31   #2  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
А вы можете привести весь код джоба? а то по приведенному выше ничего нельзя сказать. ну и предположения то свои выскажите- откуда там ноги растут... будет легче рассуждать.
Старый 28.02.2007, 09:44   #3  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Да это весь код и есть. Пропущено только соединение с БД и все.
Код работает, но как только включается трассировка SQL - вываливаются ошибки (в лучшем случае) или просто падает Аксапта.
Предпологаю, что лог по таблице, к которой идет запрос, Акса не может записать - она ее просто не видит. Пока все что приходит на ум - отключать трассировку перед запросом, потом включать после.
Старый 28.02.2007, 10:29   #4  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
При включенной трассировке sql в infolog прекрасно отрабатывает такое (по идее тожесамое что и у Вас)
X++:
static void Job59(Args _args)
{
    ODBCCOnnection  odbc;
    Statement       statement;
    str             queryText;
    ResultSet       res;
    LoginProperty   lp = new SqlSystem().createLoginProperty();
    inventTable     it;
    ;

    odbc = new ODBCConnection(lp);
    statement = odbc.createStatement();

    select it;
    queryText   = strfmt("SELECT * FROM sysobjects");
    odbc.ttsbegin();
    res = statement.executeQuery(queryText);
    while(res.next())
    {
       info(strfmt("%1 %2", res.getString(1), res.getString(2)));
    }
    odbc.ttscommit();

}
как Вы создаете подключение?

ПС: т.е. трассировка выдает результат и для select it и для запроса через statement. ничего не упало

Последний раз редактировалось Jony; 28.02.2007 в 10:31.
Старый 28.02.2007, 11:41   #5  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
X++:
LoginProperty   lp = new SqlSystem().createLoginProperty();
Насколько я понимаю такая комбинация создает подключение к той базе в которой работает Акса. У меня подключение к ДРУГОЙ базе.
База Аксы находится на серваке, а та в которой таблица SCL_ARTC - на локальной базе.
Старый 28.02.2007, 11:53   #6  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
попробовал конектиться к другой базе (pubs), правда на том же серваке, (нет времени возводить локальный), результат такой же как и в пред случае- все норм когда включена трассировка.
Может какие-то особенности с трассировкой таких подключений из-за 2-3х уровней?
может изменить место выполнения джоба(клиент или сервер)... пока на ум ничего не пришло
Старый 28.02.2007, 12:05   #7  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Для дополнительных коннектов из рабочей базы одного сервера к базе на другом сервере для SQL необходимо настроить LinkedServer на сервере с рабочей базой. И не забыть дать права пользователю Windows, под которым запущен клиент, на базу дополнительного сервера.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 28.02.2007, 12:13   #8  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
Для соединения с др базе из аксапты не нужно настраивать linkedServer'a , это обычное одбц соединение к отдельной табличке в отдельной базе, тут что-то другое, возможно с правами...
Старый 28.02.2007, 12:51   #9  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
А причем тут права?
Она соединяется....запрос проходит...данные нормально считываются. Причем в обоих ситуациях - и при включенной трассировки и при выключенной.
Старый 01.03.2007, 12:01   #10  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Падает предположительно в этом месте:
класс SysSqlShowPlan
метод packMSSqlPlan

При этом настройки мониторинга запросов SQL:
включен мониторинг множественных запросов
план запросов.
Инфолог показывает следующее:

Цитата:
Error Сообщение (11:51:05) Невозможно выбрать запись в "" ("")
База данных SQL обнаружила ошибку.
Info Сообщение (11:51:05) Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'SCL_ARTC'.
Info Сообщение (11:51:05) Оператор SQL: /*SP*/ SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT * FROM SCL_ARTC
После этого Акса глючит вплоть до сообщения на картинки.

Предпологаю, что Акса пытается повторно выполнить запрос, но использует подключение через
X++:
    con = new UserConnection();
    stmt = con.createStatement();
тоесть использует основное соединение и не находит там требуемую таблицу.

Как лечить такое? Отключать лог на время выполнения запроса?

ЗЫ Или оставить все как есть
Изображения
 
Старый 01.03.2007, 12:24   #11  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
включен мониторинг множественных запросов
план запросов.
мм... мощно.. действительно есть такая потребность?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 01.03.2007, 12:36   #12  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Нет.
Но проблему на програмном уровне это не решает.
Ответ вроде "снимите галочку и Аксапта не будет падать..." совсем не то, что нужно. Может есть другие варианты?
Старый 01.03.2007, 13:15   #13  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Нет.
Но проблему на програмном уровне это не решает.
Ответ вроде "снимите галочку и Аксапта не будет падать..." совсем не то, что нужно. Может есть другие варианты?
Я не вижу, как добраться до соединения в в Application.sysTrace() - это если "по-программистски". "Чиста по-человечески" мне не трудно на записи в журнале по кнопке план исполнения посмотреть. Генерировать и хранить его всегда смысла не вижу тем более, равно как и включать надолго мониторинг множественных запросов
Так что imho все же снимите галочку
__________________
-ТСЯ или -ТЬСЯ ?
Старый 07.03.2007, 20:44   #14  
DocSerzh is offline
DocSerzh
Участник
 
51 / 22 (0) +++
Регистрация: 28.06.2004
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Да это весь код и есть. Пропущено только соединение с БД и все.
Все-таки покажите полный код... По моему, видел такую проблему..
Старый 13.03.2007, 10:58   #15  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Полный текст ошибки:

Цитата:
Error Сообщение (10:55:45) Невозможно выбрать запись в "" ("")
База данных SQL обнаружила ошибку.
Info Сообщение (10:55:45) Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'SCL_ARTC'.
Info Сообщение (10:55:45) Оператор SQL: /*SP*/ SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT * FROM SCL_ARTC
Error Сообщение (10:55:45) Невозможно выбрать запись в "" ("")
База данных SQL обнаружила ошибку.
Info Сообщение (10:55:45) Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'SCL_ARTC'.
Info Сообщение (10:55:45) Оператор SQL: /*SP*/ SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT * FROM SCL_ARTC
Error Сообщение (10:55:45) Невозможно создать запись в "Журнал трассировки операторов SQL" ("SysTraceTableSQL") Тип трассировки: Error, alexk.
База данных SQL обнаружила ошибку.
Info Сообщение (10:55:45) Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver]Подключение занято до получения результатов для другого hstmt
Info Сообщение (10:55:45) Оператор SQL: INSERT INTO SYSTRACETABLESQL (TRACECONTAINER,STATEMENT,CALLSTACK,TEXT,TEXTDETAILS,TRACETIME,CATEGORY,CODE,CONNECTIONTYPE,CONNECTIONSPID,CONNECTIONID,ISLOBSINCLUDED,ISMOREDATAPENDING,ROWSAFFECTED,ROWSIZE,ROWSPERFETCH,ISSELECTEDFORUPDATE,ISSTARTEDWITHINTRANSACTION,STATEMENTTYPE,STATEMENTID,STATEMENTREUSECOUNT,DETAILTYPE,CREATEDDATE,CREATEDTIME,CREATEDBY,DATAAREAID,RECVERSION,RECID) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
Info Сообщение (10:55:45) 31711 Сантехника
Полный текст джоба (убрал только проверки):

X++:
static void import_SCL_ARTC(Args _args)
{
    ODBCConnection odbc ;
    Statement      statement;
    ResultSet      res;
    str            queryText;
    FolioConnectionParameters_NV    folioConnectionParameters   =   FolioConnectionParameters_NV::find();
    LoginProperty                   loginProperty;
    ;
    loginProperty    = new LoginProperty();
    loginProperty.setUsername(folioConnectionParameters.UserName);
    loginProperty.setPassword(folioConnectionParameters.UserPassword);
    loginProperty.setServer  (folioConnectionParameters.ServerName);
    loginProperty.setDatabase(folioConnectionParameters.Database);
    odbc =  new ODBCConnection(loginProperty);
    if(odbc)
    {
        statement       = odbc.createStatement();
        queryText   = strfmt("SELECT * FROM SCL_ARTC");
        odbc.ttsbegin();
        res = statement.executeQuery(queryText);
        res.next();
        info(strfmt("%1 %2", res.getString(1), res.getString(2)));
        odbc.ttscommit();
    }
}
Старый 24.05.2007, 19:37   #16  
fomenka is offline
fomenka
Участник
 
97 / 14 (1) ++
Регистрация: 25.02.2003
Предположительно, при переходе на SP5 вы не обновили syp-слой, а стали использовать от предыдущего сервис пака. Обновили клиента и сервер, а приложение - нет.
Цитата:
Падает предположительно в этом месте:
класс SysSqlShowPlan
метод packMSSqlPlan
Как раз в этом месте добавлена обработка поля RecVersion. Либо переносите код syp из класса sysSqlShowPlan на свой слой(что проще - но лишит всего что исправлено на syp слое), либо обновляйте приложение(что более трудоемко - но получите все новые возможности и исправления ошибок).

Последний раз редактировалось fomenka; 24.05.2007 в 19:44.
Старый 25.05.2007, 17:27   #17  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от fomenka Посмотреть сообщение
Предположительно, при переходе на SP5 вы не обновили syp-слой, а стали использовать от предыдущего сервис пака. Обновили клиента и сервер, а приложение - нет.

Как раз в этом месте добавлена обработка поля RecVersion. Либо переносите код syp из класса sysSqlShowPlan на свой слой(что проще - но лишит всего что исправлено на syp слое), либо обновляйте приложение(что более трудоемко - но получите все новые возможности и исправления ошибок).
А причем тут RecVersion? Если бы не перенесли что-то, то глючило бы всегда, разве я не прав? А в данной ситуации глючило ТОЛЬКО когда были запросы во внешнюю БД по отношении к Аксапте.
Старый 29.05.2007, 03:58   #18  
fomenka is offline
fomenka
Участник
 
97 / 14 (1) ++
Регистрация: 25.02.2003
Притом, что RecVersion обрабатывается в классе SysSqlShowPlan отдельным кодом при разборе плана запроса. У вас же именно включение трассировки с сохранением плана запроса глючит? На запросах в которых нет поля RecVersion?
Вы смотрели код метода packMSSqlPlan в классе SysSqlShowPlan?

Последний раз редактировалось fomenka; 29.05.2007 в 04:01.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как преобразовать запрос в SQL-инструкцию Oloops DAX: Программирование 7 07.07.2008 20:38
Поймать SQL запрос при формировании отчета Qaz Qwerty DAX: Программирование 7 12.06.2008 01:46
Мониторинг запросов SQL exceptor DAX: Программирование 11 21.02.2006 09:16
SQL Запрос Александр Костоусов DAX: Программирование 5 24.09.2004 12:15
Собственный SQL запрос в FormDataSource Alexey DAX: База знаний и проекты 0 20.12.2001 00:35
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:43.