Дык а что он разве не осуществляется? Ты забей на ошибку 24000, она диагностическая. Типа "записи не возвращены".12.11.09 20:11 Число просмотров: 1415 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 12.11.09 21:29 Количество правок: 3
[win32] как осуществить update-запрос с помощью sqlexecdirect?12.11.09 14:32 Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 12.11.09 14:37 Количество правок: 1
Напиал такую функцию. Если ей подсовывать SELECT-запрос, то она работает, а если UPDATE или INSERT, то ругается: SQL_STATE=24000; Error_text: [Microsoft][Диспетчер драйверов ODBC] Недопустимое состояние курсора. В чём касяк?
BOOL CODBC::UpdateBalance(DWORD dwID, DWORD dwBalance)
{
SQLRETURN ret;
char szQuery[MAXSIZE_QUERYSTR];
wsprintf(szQuery, "UPDATE users SET balance=%d WHERE (id=%d)", dwBalance, dwID);
ret = SQLExecDirect(m_hStmt, (SQLTCHAR *) szQuery, lstrlen(szQuery));
if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret)
{
char Sqlstate[6], text[1000];
SQLINTEGER NativeError;
SQLSMALLINT len;
if (SQL_SUCCESS != SQLGetDiagRec(SQL_HANDLE_STMT, m_hStmt, 1, (SQLCHAR *) Sqlstate, &NativeError, (SQLCHAR *) text, 1000, &len))
return FALSE;
m_pErrorManager->WriteError("Can't process SQLExecDirect");
return FALSE;
}
return TRUE;
}
---
PS. Может быть это важно? Я использую в качестве БД файл .mdb, совместимый с Microsoft Access 97. Вот строка подключения: "DBQ=mydb.mdb;Driver={Microsoft Access Driver (*.mdb)};"
[offtopic] Кстати, чем вызвано использование ODBC, ADO удобней, ИМХО.12.11.09 20:29 Автор: HandleX <Александр М.> Статус: The Elderman
Дык а что он разве не осуществляется? Ты забей на ошибку 24000, она диагностическая. Типа "записи не возвращены".12.11.09 20:11 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 12.11.09 21:29 Количество правок: 3
Сорри, проблема оказалась в моей глупости. Я использовал для всех запросов один и тот же дескриптор, а не создавал его для каждого нового запроса, из-за этого и были проблемы. Теперь всё путём.
Почему ODBC? Потому что эта технология мне знакома, а ADO нет.
Про ADO14.11.09 13:10 Автор: HandleX <Александр М.> Статус: The Elderman
> Почему ODBC? Потому что эта технология мне знакома, а ADO нет. Да, раз уж знакомо ODBC, и умеешь пользоваться -- почему бы нет...
ADO у M$ вштыривает, потому что выше уровень -- COM-объекты подключения, хранимых процедур, рикордсеты, с ними проще работать, особенно в тех средах, где работа с COM/ActiveX простая.
C/C++ чтот не очень радует простотой работой с COM, хотя тем, кто грызёт ODBC, он наверное покажется гораздо проще.
Ясно. Спасибо19.11.09 03:46 Автор: Vedrus <Serokhvostov Anton> Статус: Member