Hej! Próbuje pobrać dane z bazy poprzez ODBC (czysty C/C++ i WINAPI), niestety jest problem z pobieraniem danych. Połączenie jest ok, nawet pobrałem nazwy kolumn, typ kolumn ale jest problem z odczytem zbioru danych...
#define NAME_LEN 50
#define PHONE_LEN 20
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt = 0;
SQLRETURN retcode;
SQLWCHAR szName[NAME_LEN], szPhone[PHONE_LEN], sCustID[NAME_LEN];
SQLLEN cbName = 0, cbCustID = 0, cbPhone = 0;
printf("INICJALIZACJA ODBC\n");
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
printf("USTAWIONO SRODOWISKO ODBC\n");
// Allocate connection handle
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);
printf("USTANOWIONO UCHWYT ODBC\n");
retcode = SQLConnect(hdbc, (SQLCHAR*) "nazwapolaczenia", SQL_NTS, (SQLCHAR*) "test", SQL_NTS, (SQLCHAR*) "test", SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
printf("POLACZONO!\n");
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
printf("SELECT CustomerID, ContactName, Phone FROM TABELATEST ORDER\n");
retcode = SQLExecDirect(hstmt, (SQLCHAR *) "SELECT CustomerID, ContactName, Phone FROM TABELATEST", SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
printf("BIND\n");
// Tutaj zaczynają się schody
retcode = SQLBindCol(hstmt, 1, SQL_C_SLONG, &sCustID, sizeof(sCustID), &cbCustID);
if (retcode == NULL)
{
printf("NULL 1\n"); // tutaj null
}
retcode = SQLBindCol(hstmt, 2, SQL_C_CHAR, szName, NAME_LEN, &cbName);
if (retcode == NULL)
{
printf("NULL 2\n");// tutaj null
}
retcode = SQLBindCol(hstmt, 3, SQL_C_CHAR, szPhone, PHONE_LEN, &cbPhone);
if (retcode == NULL)
{
printf("NULL 3\n");// tutaj null
for (int i=0 ; i<=2; i++) { // tutaj sobie później policzę liczbę wierszy
printf("obrot %d\n", i);
retcode = SQLFetch(hstmt);
if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)
printf("BŁĄD!\n");
if (retcode == NULL)
{
printf("NULL\n");
}
if (retcode != NULL)//== SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
printf("wiersz %d\n", i);
wprintf(L"%d: %S %S %S\n", i + 1, sCustID, szName, szPhone);
}
else
break;
}
}
else
{
printf("Jakiś błąd!\n");
}
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
SQLCancel(hstmt);
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
}
SQLDisconnect(hdbc);
}
else
{
printf("BLAD POLACZENIA! \n");
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
}
}
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
Czemu nie binduje kolumn?
:(