
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
26.04.2005, 15:54
|
|||
|---|---|---|---|
ODBC и SQL-процедуры SYBASE |
|||
|
#18+
проблема: при первом проходе функции Authorize все успешно. при повторном проходе - запрос в процедуре почему-то не выполняется (приносит пустые поля, хотя переменные в дебагере SyBase отображаются правильно). Сама процедура - рабочая (проверялась из других приложений (не С++)) вот код: SQLRETURN nrcode; void connect_n_try(void) { nrcode = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env ); nrcode = SQLSetEnvAttr( env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); nrcode = SQLAllocHandle( SQL_HANDLE_DBC, env, &dbc ); nrcode = SQLConnect( dbc, (SQLCHAR*) "XXX", SQL_NTS, (SQLCHAR* ) "XXX", SQL_NTS, (SQLCHAR*) "XXX", SQL_NTS ); char* user = new char; char* pass = new char; user = "123"; pass = "456"; authorize(user,pass); user = "789"; pass = "101112"; authorize(user,pass); user = "ABC"; pass = "DEF"; authorize(user,pass); SQLFreeHandle( SQL_HANDLE_ENV, env ); SQLFreeHandle( SQL_HANDLE_DBC, dbc ); SQLDisconnect( dbc ); } bool authorize(char* usr, char* pwd) { SQLHSTMT nstmt; nrcode = SQLAllocHandle( SQL_HANDLE_STMT, dbc, &nstmt ); SQLCHAR select_pin[ STMT_LEN ] = "CALL DBA.Proc(ssUserName = ?,ssPassword = ?)"; SQLBindParameter(nstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,NAME_LEN,0,usr,0,&cbNTS); SQLBindParameter(nstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,NAME_LEN,0,pwd,0,&cbNTS); SQLBindCol( nstmt, 1, SQL_C_CHAR, chTel_ID_Ch, sizeof(chTel_ID_Ch), &cbNTS); SQLSetStmtOption(nstmt,SQL_CURSOR_TYPE,SQL_CURSOR_STATIC); nrcode=SQLExecDirect(nstmt, select_pin, SQL_NTS); SQLFetchScroll(nstmt,SQL_FETCH_FIRST,0); SQLFreeHandle(SQL_HANDLE_STMT, nstmt); return true; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.04.2005, 16:11
|
|||
|---|---|---|---|
ODBC и SQL-процедуры SYBASE |
|||
|
#18+
Насколько я помню, вызов процедуры по RPC оформляется в ODBC немного не так, а вот так "{call DBA.Proc ssUserName = ?, ssPassword = ?}" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.04.2005, 16:14
|
|||
|---|---|---|---|
ODBC и SQL-процедуры SYBASE |
|||
|
#18+
Ну и еще кажется до SQLFreeHandle(SQL_HANDLE_STMT, nstmt); надо еще отказаться от выборки , т.е. еще какой-то вызов должен быть. что-то типа SQLCancel . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.04.2005, 16:15
|
|||
|---|---|---|---|
ODBC и SQL-процедуры SYBASE |
|||
|
#18+
нет, вызов правильный. пришли к выводу, что ошибка в строке SQLBindCol( nstmt, 1, SQL_C_CHAR, chTel_ID_Ch, sizeof(chTel_ID_Ch), &cbNTS); но где - неизвестно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.04.2005, 18:57
|
|||
|---|---|---|---|
ODBC и SQL-процедуры SYBASE |
|||
|
#18+
D.o.нет, вызов правильный. пришли к выводу, что ошибка в строке SQLBindCol( nstmt, 1, SQL_C_CHAR, chTel_ID_Ch, sizeof(chTel_ID_Ch), &cbNTS); но где - неизвестно. Ой, ну что тут неизвестного??? Как ты собираешься связывать колонку не существующего резалт-сета с переменной? Поменяй местами строки SQLBindCol( nstmt, 1, SQL_C_CHAR, chTel_ID_Ch, sizeof(chTel_ID_Ch), &cbNTS); и nrcode=SQLExecDirect(nstmt, select_pin, SQL_NTS); Сначала делаем привязку параметров, потом делаем запрос и у нас открывается курсор. Потом привязываем поля курсора к переменным. И в конце уже делаем чтение из курсора последовательными SQLFetch(). Потом еще посмотри как объявлены переменные chTel_ID_Ch и cbNTS? Они должны быть: SQLCHAR chTel_ID_Ch[20]; SQLINTEGER cbNTS; При этом процедура должна возвращать резалт-сет из одной колонки или хотя-бы первая колонка резалтсета должна быть типа char(20) или varchar(20). И вообще, что такое "неизвестная ошибка"? Текст ошибки какой? Мы его телепатически должны догадываться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2033404]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 427ms |

| 0 / 0 |
