Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / ODBC и SQL-процедуры SYBASE / 5 сообщений из 5, страница 1 из 1
26.04.2005, 15:54
    #33036289
D.O.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC и SQL-процедуры SYBASE
проблема:
при первом проходе функции 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;
}
...
Рейтинг: 0 / 0
26.04.2005, 16:11
    #33036359
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC и SQL-процедуры SYBASE
Насколько я помню, вызов процедуры по RPC оформляется в ODBC немного не так, а вот так
"{call DBA.Proc ssUserName = ?, ssPassword = ?}"
...
Рейтинг: 0 / 0
26.04.2005, 16:14
    #33036368
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC и SQL-процедуры SYBASE
Ну и еще кажется до
SQLFreeHandle(SQL_HANDLE_STMT, nstmt);

надо еще отказаться от выборки , т.е. еще какой-то вызов должен быть.
что-то типа SQLCancel .
...
Рейтинг: 0 / 0
26.04.2005, 16:15
    #33036373
D.O.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC и SQL-процедуры SYBASE
нет, вызов правильный.
пришли к выводу, что ошибка в строке

SQLBindCol( nstmt, 1, SQL_C_CHAR, chTel_ID_Ch, sizeof(chTel_ID_Ch), &cbNTS);

но где - неизвестно.
...
Рейтинг: 0 / 0
26.04.2005, 18:57
    #33036899
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC и SQL-процедуры SYBASE
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).

И вообще, что такое "неизвестная ошибка"? Текст ошибки какой? Мы его телепатически должны догадываться?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / ODBC и SQL-процедуры SYBASE / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]