home *** CD-ROM | disk | FTP | other *** search
- //*---------------------------------------------------------------------------------
- //| ODBC System Administrator
- //|
- //| This code is furnished on an as-is basis as part of the ODBC SDK and is
- //| intended for example purposes only.
- //|
- //*---------------------------------------------------------------------------------
- #include "errcheck.h"
- #include "standard.h"
- #include "strings.h"
-
-
- //*---------------------------------------------------------------------------------
- //| Global variables
- //*---------------------------------------------------------------------------------
- char szErrOut[100];
-
- dCSEG(char) szErrTitle[] = "Error!";
- dCSEG(char) szError[] = "Error: %s, File: %s, Line: %d";
- dCSEG(char) szOutOfMemory[] = "Memory levels are very low. Please exit other applications and try your request again.";
- dCSEG(char) szInvalidParms[] = "Invalid parameters";
- dCSEG(char) szRegisterClassFailed[] = "Register class failed";
-
-
- //*------------------------------------------------------------------------
- //| GetSQLState:
- //| Parameters:
- //| handletype - Type of handle (env, conn, stmt, descr)
- //| handle - Handle used in last ODBC call
- //| psMsgNum - Pointer to variable storing message number
- //| szState - Return sqlstate
- //| szNative - Native return code (driver specific)
- //| szMessage - Return message
- //*------------------------------------------------------------------------
- LPSTR GetSQLState(SWORD handletype, SQLHANDLE handle, SWORD *psMsgNum,
- LPSTR szState, SDWORD FAR * pfNative, LPSTR szMessage)
- {
- RETCODE rc;
- SWORD cb;
-
- rc = SQLGetDiagRec(handletype, handle, (*psMsgNum)++,
- szState, pfNative,
- szMessage, RTN_MSG_SIZE, &cb);
- if(rc == SQL_NO_DATA || rc == SQL_ERROR)
- return NULL;
- else
- return szState;
- }
-
-
-
- //*------------------------------------------------------------------------
- //| DoPostError:
- //| This function will post an error message to standard output, whereever
- //| that should be.
- //| Parms:
- //| in szErr Error message
- //| in szFile File name
- //| in cbLine Line number
- //| Returns:
- //| Nothing.
- //*---------------------------------------------------------------------------------
- void DoPostError(LPSTR szErr, LPSTR szFile, int cbLine)
- {
- wsprintf(szErrOut, szError, (LPSTR)szErr, szFile, cbLine);
- MessageBox(NULL, szErrOut, szErrTitle, MB_OK);
- }
-
-
-
- //*------------------------------------------------------------------------
- //| PrintErrors:
- //| Print out all relevant errors.
- //| ci - Pointer to client information
- //| handletype - Which handle has relevant error information
- //*------------------------------------------------------------------------
- void PrintErrors(CHILDINFO FAR * ci, SWORD handletype)
- {
- SQLHANDLE handle;
-
- switch (handletype) {
- case SQL_HANDLE_ENV:
- handle = (SQLHANDLE) ci->henv;
- break;
-
- case SQL_HANDLE_DBC:
- handle = (SQLHANDLE) ci->hdbc;
- break;
-
- case SQL_HANDLE_STMT:
- handle = (SQLHANDLE) ci->hstmt;
- break;
- }
-
- DisplayErrors(ci->hwndOut, (LPSTR)szErrTitle, SQL_HANDLE_ENV, ci->henv);
- if(!ci->hwndOut)
- PrintErrorsHwnd(ci->hwndOut, handletype, handle);
- }
-
-
- //*------------------------------------------------------------------------
- //| PrintErrorsHwnd:
- //| Does the actual work. Needed as separate function for those
- //| function which are not woking directly with a ci struct.
- //| Parms:
- //| hwnd Output window
- //| henv Environment handle
- //| hdbc Connection handle
- //| hstmt Statement handle
- //*------------------------------------------------------------------------
- void PrintErrorsHwnd(HWND hwnd, SWORD handletype, SQLHANDLE handle)
- {
- SWORD sMsgNum = 0;
- char szState[7]="";
- char szMessage[RTN_MSG_SIZE];
- SDWORD pfNative=0;
-
- while(GetSQLState(handletype, handle, &sMsgNum,
- szState, &pfNative, szMessage) != NULL)
- szWrite(hwnd,
- GetidsString(idsErrorString, szErrOut, sizeof(szErrOut)),
- (LPSTR)szState,
- (LPSTR)szMessage);
- }
-
-
- //*------------------------------------------------------------------------
- //| DisplayErrors:
- //| This will take all of the errors from the ODBC handles and display
- //| them using message box. This is usually done when there is no
- //| output window to write them to.
- //| Parms:
- //| hwnd Window handle to own the message box
- //| title The title for the message box
- //| henv Environment handle to look on
- //| hdbc Connection handle to look at
- //| hstmt Statement handle to look at
- //| Returns:
- //| Nothing
- //*------------------------------------------------------------------------
- void DisplayErrors(HWND hwnd, LPSTR title, SWORD handletype, SQLHANDLE handle)
- {
- SWORD sMsgNum = 0;
- char szState[7]="";
- char szMessage[RTN_MSG_SIZE];
- SDWORD pfNative=0;
-
- while(GetSQLState(handletype, handle, &sMsgNum,
- szState, &pfNative, szMessage) != NULL)
- {
- if( szMessageBox((hwnd) ? hwnd : GetActiveWindow(),
- MB_ICONEXCLAMATION,
- title,
- GetidsString(idsMsgErrorString, szErrOut, sizeof(szErrOut)),
- (LPSTR)szState,
- (LPSTR)szMessage) )
- break;
- }
- }
-