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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.12.2010, 14:47   #1  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Update ошибка в ODBC Oracle
Добрый день.

Давно столкнулся с ошибкой, которую не могу решить, правда обошел, но очень некрасиво.

Попытки выполнить любое обновление данных в Оракл через ODBC драйвер выдают ошибку:
PHP код:
Cannot select a record in  (). The SQL database has issued an error.
SQL error description: [Oracle][ODBC]Invalid cursor state.
SQL statementUPDATE "TN_ITEMS" SET "CN_PART_STATUS" '5' WHERE "CN_ID" '70926' AND "STATE" '3' 
В итоге запись все же обновляется, но ошибка приводит к прерыванию.

Менял параметры для createStatement, но безуспешно.
Выполнял код в DAX 4.0 SP2 та же ошибка и в DAX2009 SP1. ОС Win XP (32) и Win 7 (64). Пробовал и с драйвером от Оракла, ничего не изменилось. Версия Оракл на сервере 9.0. У пользователь для ODBC есть все права.

Вот тестовый джоб.
X++:
static server void ODBC_Oracle(Args _args)
{
    OdbcConnection                  odbc;
    LoginProperty                   lp;
    Statement                       stmt;
    ResultSet                       res;
    str                             expr;
    SqlStatementExecutePermission   ssep;
;
    lp = new LoginProperty();
    lp.setOther('Driver={Microsoft ODBC for Oracle};Dbq=liv;Uid=user;Pwd=pass;');
//    lp.setOther('Driver={Oracle in OraClient11g_home1};Dbq=liv;Uid=user;Pwd=pass;');

    odbc = new ODBCConnection(lp);

    if(odbc)
    {
        stmt = odbc.createStatement(ResultSetType::KeysetDriven, ResultSetConcurrency::Updatable);

        expr = "UPDATE \"TN_ITEMS\" SET \"CN_PART_STATUS\" = '5' WHERE \"CN_ID\" = '70926' AND \"STATE\" = '3'";
        
        ssep = new SqlStatementExecutePermission(expr);
        ssep.assert();

        res = stmt.executeQuery(expr);

        if (res)
        {
            res.next();
        }
        CodeAccessPermission::revertAssert();
    }
}
Буду благодарен любым идеям.

Последний раз редактировалось Link; 03.12.2010 в 14:53.
Старый 03.12.2010, 14:52   #2  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
А если вместо executeQuery, поставить вызов executeUpdate.
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: Link (1).
Старый 03.12.2010, 14:58   #3  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Thumbs up
Цитата:
Сообщение от SRF Посмотреть сообщение
А если вместо executeQuery, поставить вызов executeUpdate.
Большое, человеческое спасибо!
Я на драйвера думал, а все гораздо проще
Теги
executequery, oracle

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DeniZone: ODBC with FoxPro Blog bot DAX Blogs 0 14.06.2009 12:05
ошибка update_recordset jaran DAX: Программирование 8 28.11.2008 18:48
Ошибка ODBC Yprit DAX: Администрирование 3 13.06.2007 11:36
aEremenko: История об установке Microsoft Dynamics Ax 4.0 и Oracle 10G Blog bot DAX Blogs 0 28.10.2006 16:01
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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