Добрый день.
Давно столкнулся с ошибкой, которую не могу решить, правда обошел, но очень некрасиво.
Попытки выполнить любое обновление данных в Оракл через ODBC драйвер выдают ошибку:
PHP код:
Cannot select a record in (). The SQL database has issued an error.
SQL error description: [Oracle][ODBC]Invalid cursor state.
SQL statement: UPDATE "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();
}
}
Буду благодарен любым идеям.