Недопустимое состояние курсора из SQLSetPos - PullRequest
0 голосов
/ 08 июня 2018

ALL,

ret = SQLForeignKeys( stmt_fk, NULL, 0, NULL, 0, NULL, 0, catalogName, SQL_NTS, schemaName, SQL_NTS, tableName, SQL_NTS );
if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
{
    // error handling
}
bool fkFound = false;
for( ret = SQLFetch( stmt_fk ); ( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO ) && ret != SQL_NO_DATA; ret = SQLFetch( stmt_fk ) )
{
    fkFound = true;
}
if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO && ret != SQL_NO_DATA )
{
    // error handling
}
else if( fkFound )
{
    ret = SQLSetPos( stmt_fk, 0, SQL_POSITION, SQL_LOCK_NO_CHANGE );
    if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
    {
    }
    else
    {
        // row processing
    }

Здесь вызов SQLSetPos () возвращает ошибку «Недопустимое состояние курсора».API-интерфейс ODBC не имеет функции для сброса дескриптора оператора и установки курсора на запись 1 в наборе записей, поэтому я предполагаю, что должен использовать этот, но он не работает.

Как это исправить?Или, может быть, есть альтернативный способ делать то, что я хочу?

TIA !!

1 Ответ

0 голосов
/ 08 июня 2018

Документация ODBC API , что эта ошибка возникает, когда -

StatementHandle находился в состоянии выполнения, но без набора результатовбыл связан с StatementHandle.

(DM). Курсор был открыт на StatementHandle, но SQLFetch илиSQLFetchScroll не было вызвано.

Курсор был открыт на StatementHandle и SQLFetch или SQLFetchScroll был вызван, но курсор был расположен до начала набора результатов или после конца набора результатов.

Аргумент Operation был SQL_DELETE, SQL_REFRESH или SQL_UPDATE, и курсор был расположен перед началом набора результатов или после конца набора результатов.

Исходя из этого, я держу парипроизошла незамеченная (возможно, молчаливая) предшествующая ошибка, которая действительно должна быть устранена.Я предлагаю просмотреть полную трассировку ODBC до этой точки.

...