SQLRETURN odbc_check_res(const char *file, int line, SQLRETURN rc, SQLSMALLINT handle_type, SQLHANDLE handle, const char *func, const char *res) { const char *p = res; for (;;) { if (*p == 'S') { if (rc == SQL_SUCCESS) return rc; ++p; } else if (*p == 'I') { if (rc == SQL_SUCCESS_WITH_INFO) return rc; ++p; } else if (*p == 'E') { if (rc == SQL_ERROR) return rc; ++p; } else if (strncmp(p, "No", 2) == 0) { if (rc == SQL_NO_DATA) return rc; p += 2; } else if (strncmp(p, "Ne", 2) == 0) { if (rc == SQL_NEED_DATA) return rc; p += 2; } else if (!*p) { break; } else { odbc_report_error("Wrong results specified", line, file); return rc; } } ReportODBCError(func, handle_type, handle, rc, line, file); return rc; }
CDBConnection::CDBConnection() { RETCODE rc; hdbc = SQL_NULL_HDBC; rc = SQLAllocConnect (henv, &hdbc); if (rc != SQL_SUCCESS) { ReportODBCError (SQL_NULL_HSTMT, "SQLAllocConnect error"); throw rc; } rc = SQLConnect (hdbc, (SQLCHAR *)szDSN, SQL_NTS, (SQLCHAR *)szUID, SQL_NTS, (SQLCHAR *)szPWD, SQL_NTS); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { ReportODBCError (SQL_NULL_HSTMT, "SQLConnect error"); SQLFreeConnect (hdbc); hdbc = SQL_NULL_HDBC; throw rc; } }
void odbc_check_cursor(void) { SQLRETURN retcode; retcode = SQLSetStmtAttr(odbc_stmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); if (retcode != SQL_SUCCESS) { char output[256]; unsigned char sqlstate[6]; CHKGetDiagRec(SQL_HANDLE_STMT, odbc_stmt, 1, sqlstate, NULL, (SQLCHAR *) output, sizeof(output), NULL, "S"); sqlstate[5] = 0; if (strcmp((const char*) sqlstate, "01S02") == 0) { printf("Your connection seems to not support cursors, probably you are using wrong protocol version or Sybase\n"); odbc_disconnect(); exit(0); } ReportODBCError("SQLSetStmtAttr", SQL_HANDLE_STMT, odbc_stmt, retcode, __LINE__, __FILE__); } odbc_reset_statement(); }
void odbc_check_cursor(void) { SQLRETURN retcode; ODBC_BUF *odbc_buf = NULL; retcode = SQLSetStmtAttr(odbc_stmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0); if (retcode != SQL_SUCCESS) { SQLTCHAR output[256]; SQLTCHAR sqlstate[6]; CHKGetDiagRec(SQL_HANDLE_STMT, odbc_stmt, 1, sqlstate, NULL, output, ODBC_VECTOR_SIZE(output), NULL, "S"); sqlstate[5] = 0; if (strcmp(C(sqlstate), "01S02") == 0) { printf("Your connection seems to not support cursors, probably you are using wrong protocol version or Sybase\n"); odbc_disconnect(); ODBC_FREE(); exit(0); } ReportODBCError("SQLSetStmtAttr", SQL_HANDLE_STMT, odbc_stmt, retcode, __LINE__, __FILE__); } odbc_reset_statement(); ODBC_FREE(); }