Sample Code for C++ with QODBC
#include <iostream> #include <windows.h> #include <sql.h> #include <sqlext.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> using namespace std; void ConvertTimeStampStructToString(TIMESTAMP_STRUCT tTimeStamp, CHAR *strTimeStamp, LONG lSizeTimeStamp) { strcpy(strTimeStamp, ""); sprintf(sr timestamp, "%d-%d-%d %d:%d:%d," tTimeStamp.year, tTimeStamp.month, tTimeStamp.day, tTimeStamp.hour, tTimeStamp.minute, tTimeStamp.second); } int main() { SQLHENV henv = SQL_NULL_HENV; // Environment SQLHDBC hdbc = SQL_NULL_HDBC; // Connection handle SQLHSTMT hstmt = SQL_NULL_HSTMT; // Statement handle SQLCHAR sListId[256] = ""; SQLCHAR sEditSequence[256] = ""; SQLCHAR sName[256] = ""; BOOL bIsActive = 0; TIMESTAMP_STRUCT tTimeModified = {0}; TIMESTAMP_STRUCT tTimeCreated = {0}; SQLINTEGER cbData; SQLRETURN retcode; int iKey; CHAR *sTimeStamp = new CHAR[32](); SQLCHAR statement[]="SELECT * FROM ShipMethod"; retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if(retcode != SQL_SUCCESS){ cout << "SQLAllocHandle failed. exit program" << endl; return 0; } cout << "SQLAllocHandle: Environment handle initialized." << endl; retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(SQLCHAR *)(void*)SQL_OV_ODBC2, -1); if(retcode != SQL_SUCCESS){ cout << "SQLSetEnvAttr failed. exit program" << endl; return 0; } cout << "SQLSetEnvAttr : ODBC 2.0 initialized." << endl; retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); if(retcode != SQL_SUCCESS){ cout << "SQLAllocHandle failed. exit program" << endl; return 0; } cout << "SQLSetEnvAttr: Database handle initialized." << endl; retcode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)10, 0); if(retcode != SQL_SUCCESS){ cout << "SQLSetConnectAttr failed. exit program" << endl; return 0; } cout << "SQLSetConnectAttr : Set Login Timeout." << endl; retcode = SQLConnect(hdbc, (SQLCHAR*) "QuickBooks Data" , SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0); if(retcode != SQL_SUCCESS){ cout << "SQLConnect failed. exit program" << endl; return 0; } cout << "SQLConnect : Database connection successfully." << endl; retcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt); if(retcode != SQL_SUCCESS){ cout << "SQLAllocHandle failed. exit program" << endl; return 0; } cout << "SQLAllocHandle : Handle initialized." << endl; retcode = SQLExecDirect(hstmt, statement, SQL_NTS); if(retcode != SQL_SUCCESS){ cout << "SQLExecDirect failed. exit program" << endl; return 0; } cout << "SQLExecDirect : Query executed successfully." << endl; cout << endl << endl << endl; cout << "Query: SELECT * FROM ShipMethod " << endl; cout << endl << endl << endl; cout << "ListId" << ", " << "TimeModified" << ", " << "TimeCreated" << ", " << "EditSequence" << ", " << "Name" << ", " << "IsActive" << endl << endl; cout << endl << endl; while(SQLFetch(hstmt) == SQL_SUCCESS){ retcode = SQLGetData(hstmt, 1, SQL_C_CHAR, (SQLPOINTER)sListId, sizeof(sListId), &cbData); retcode = SQLGetData(hstmt, 2, SQL_C_TIMESTAMP, (SQLPOINTER)&tTimeModified, sizeof(tTimeModified), &cbData); retcode = SQLGetData(hstmt, 3, SQL_C_TIMESTAMP, (SQLPOINTER)&tTimeCreated, sizeof(tTimeCreated), &cbData); retcode = SQLGetData(hstmt, 4, SQL_C_CHAR, (SQLPOINTER)sEditSequence, sizeof(sEditSequence), &cbData); retcode = SQLGetData(hstmt, 5, SQL_C_CHAR, (SQLPOINTER)sName, sizeof(sName), &cbData); retcode = SQLGetData(hstmt, 6, SQL_C_BIT, (SQLPOINTER)bIsActive, sizeof(bIsActive), &cbData); cout << sListId << ", "; ConvertTimeStampStructToString(tTimeModified, sTimeStamp, sizeof(sTimeStamp)); cout << sTimeStamp << ", "; ConvertTimeStampStructToString(tTimeCreated, sTimeStamp, sizeof(sTimeStamp)); cout << sTimeStamp << ", "; cout << sEditSequence << ", "; cout << sName << ", "; cout << bIsActive << endl; } delete [] sTimeStamp; cout << endl << endl; retcode = SQLFreeHandle(SQL_HANDLE_STMT, hstmt); if(retcode != SQL_SUCCESS){ cout << "SQLFreeHandle failed. exit program" << endl; return 0; } cout << "SQLFreeHandle : Handle freed." << endl; retcode = SQLDisconnect (hdbc); if(retcode != SQL_SUCCESS){ cout << "SQLDisconnect failed. exit program" << endl; return 0; } cout << "SQLDisconnect : Close database connection." << endl; retcode = SQLFreeHandle(SQL_HANDLE_DBC, hdbc); if(retcode != SQL_SUCCESS){ cout << "SQLFreeHandle failed. exit program" << endl; return 0; } cout << "SQLFreeHandle : Database handle freed." << endl; retcode = SQLFreeHandle(SQL_HANDLE_ENV, henv); if(retcode != SQL_SUCCESS){ cout << "SQLFreeHandle failed. exit program" << endl; return 0; } cout << "SQLFreeHandle : Environment handle freed." << endl; printf("Press Any Key To Exit..."); getch(); return 0; } Please click here to download the C++ code.
|