Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[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
|
|
| |
Сорри, проблема оказалась в моей глупости. Я использовал для... 13.11.09 11:41
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
Сорри, проблема оказалась в моей глупости. Я использовал для всех запросов один и тот же дескриптор, а не создавал его для каждого нового запроса, из-за этого и были проблемы. Теперь всё путём.
Почему ODBC? Потому что эта технология мне знакома, а ADO нет.
|
| | |
Про ADO 14.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
|
|
|
|