const char szConnect[] = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=";
const char szDBName[] = "StudData.mdb";
void ODBCConnect(HWND);
void ODBCDisconnect(HWND);
void ODBCQuery(char *);
void ODBCQueryEnd(void);
void FetchResult(void);
void ODBCConnect(HWND hDlg)
{
try {
SQLRETURN sr;
sr = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) throw sr;
sr = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
throw sr;
}
sr = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hConn);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
throw sr;
}
strcpy(szConnectString, szConnect);
strcat(szConnectString, szDBName);
sr = SQLDriverConnect(hConn, hDlg, (unsigned char *)szConnectString, sizeof(szConnectString), (unsigned char *)ConnBuf, sizeof(ConnBuf), (short *)&StrLen, SQL_DRIVER_COMPLETE);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle(SQL_HANDLE_DBC, hConn);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
throw sr;
}
}
catch (SQLRETURN) {
MessageBox(hDlg, "Database connection failed!", "Sorry", MB_OK | MB_ICONWARNING);
ExitProcess(0);
}
}
void ODBCDisconnect(HWND hDlg)
{
SQLDisconnect(hConn);
SQLFreeHandle(SQL_HANDLE_DBC, hConn);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
}
void ODBCQuery(char *query)
{
try {
SQLRETURN sr;
sr = SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) throw sr;
sr = SQLExecDirect(hStmt, (unsigned char *)query, strlen(query));
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
throw sr;
}
}
catch (SQLRETURN) {
char errorbuf[128];
SQLError(hEnv, hConn, hStmt, NULL, NULL, (unsigned char *)errorbuf, sizeof(errorbuf), (short *)&StrLen);
MessageBox(NULL, "Database query failed!", "Sorry", MB_OK | MB_ICONWARNING);
MessageBox(NULL, errorbuf, "Sorry", MB_OK | MB_ICONWARNING);
}
}
void ODBCQueryEnd(void)
{
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
}
void FetchResult(void)
{
SQLRETURN sr;
LV_ITEM lvi;
int i, row;
for (i = 0; i < 10; ++i) SQLBindCol(hStmt, i + 1, SQL_C_CHAR, buf[i], sizeof(buf[i]), (long *)&StrLen);
for (row = 0; ; ++row) {
sr = SQLFetch(hStmt);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) break;
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.iItem = row;
lvi.iSubItem = 0;
lvi.pszText = buf[0];
SendMessage(hList, LVM_INSERTITEM, 0, (long)&lvi);
lvi.mask = LVIF_TEXT;
for (i = 1; i < 10; ++i) {
lvi.iSubItem = i;
lvi.pszText = buf[i];
SendMessage(hList, LVM_SETITEM, 0, (long)&lvi);
}
}
}
const char szDBName[] = "StudData.mdb";
void ODBCConnect(HWND);
void ODBCDisconnect(HWND);
void ODBCQuery(char *);
void ODBCQueryEnd(void);
void FetchResult(void);
void ODBCConnect(HWND hDlg)
{
try {
SQLRETURN sr;
sr = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) throw sr;
sr = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
throw sr;
}
sr = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hConn);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
throw sr;
}
strcpy(szConnectString, szConnect);
strcat(szConnectString, szDBName);
sr = SQLDriverConnect(hConn, hDlg, (unsigned char *)szConnectString, sizeof(szConnectString), (unsigned char *)ConnBuf, sizeof(ConnBuf), (short *)&StrLen, SQL_DRIVER_COMPLETE);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle(SQL_HANDLE_DBC, hConn);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
throw sr;
}
}
catch (SQLRETURN) {
MessageBox(hDlg, "Database connection failed!", "Sorry", MB_OK | MB_ICONWARNING);
ExitProcess(0);
}
}
void ODBCDisconnect(HWND hDlg)
{
SQLDisconnect(hConn);
SQLFreeHandle(SQL_HANDLE_DBC, hConn);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
}
void ODBCQuery(char *query)
{
try {
SQLRETURN sr;
sr = SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) throw sr;
sr = SQLExecDirect(hStmt, (unsigned char *)query, strlen(query));
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
throw sr;
}
}
catch (SQLRETURN) {
char errorbuf[128];
SQLError(hEnv, hConn, hStmt, NULL, NULL, (unsigned char *)errorbuf, sizeof(errorbuf), (short *)&StrLen);
MessageBox(NULL, "Database query failed!", "Sorry", MB_OK | MB_ICONWARNING);
MessageBox(NULL, errorbuf, "Sorry", MB_OK | MB_ICONWARNING);
}
}
void ODBCQueryEnd(void)
{
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
}
void FetchResult(void)
{
SQLRETURN sr;
LV_ITEM lvi;
int i, row;
for (i = 0; i < 10; ++i) SQLBindCol(hStmt, i + 1, SQL_C_CHAR, buf[i], sizeof(buf[i]), (long *)&StrLen);
for (row = 0; ; ++row) {
sr = SQLFetch(hStmt);
if (sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO) break;
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.iItem = row;
lvi.iSubItem = 0;
lvi.pszText = buf[0];
SendMessage(hList, LVM_INSERTITEM, 0, (long)&lvi);
lvi.mask = LVIF_TEXT;
for (i = 1; i < 10; ++i) {
lvi.iSubItem = i;
lvi.pszText = buf[i];
SendMessage(hList, LVM_SETITEM, 0, (long)&lvi);
}
}
}