]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dbtable.cpp
iso8859-1,15 and cp1252 added to Cyrillic charsets
[wxWidgets.git] / src / common / dbtable.cpp
index 0a674fd7cb2c7a0dbc39f700de825beb232538ee..edf1a0ce1ca4f4d9075de72b05e942ddeb7b89b6 100644 (file)
@@ -102,7 +102,7 @@ ULONG lastTableID = 0;
 
 /********** wxTable::wxTable() **********/
 wxTable::wxTable(wxDB *pwxDB, const char *tblName, const int nCols,
 
 /********** wxTable::wxTable() **********/
 wxTable::wxTable(wxDB *pwxDB, const char *tblName, const int nCols,
-                                       const char *qryTblName, bool qryOnly, char *tblPath)
+                                       const char *qryTblName, bool qryOnly, const char *tblPath)
 {
        pDb                                     = pwxDB;                                        // Pointer to the wxDB object
        henv                                    = 0;
 {
        pDb                                     = pwxDB;                                        // Pointer to the wxDB object
        henv                                    = 0;
@@ -309,6 +309,250 @@ wxTable::~wxTable()
 
 }  // wxTable::~wxTable()
 
 
 }  // wxTable::~wxTable()
 
+/***************************** PRIVATE FUNCTIONS *****************************/
+
+/********** wxTable::bindInsertParams() **********/
+bool wxTable::bindInsertParams(void)
+{
+       assert(!queryOnly);
+       if (queryOnly)
+               return(FALSE);
+
+       SWORD   fSqlType        = 0;
+       UDWORD  precision       = 0;
+       SWORD   scale           = 0;
+
+       // Bind each column (that can be inserted) of the table to a parameter marker
+       int i;
+       for (i = 0; i < noCols; i++)
+       {
+               if (! colDefs[i].InsertAllowed)
+                       continue;
+               switch(colDefs[i].DbDataType)
+               {
+               case DB_DATA_TYPE_VARCHAR:
+                       fSqlType = pDb->typeInfVarchar.FsqlType;
+                       precision = colDefs[i].SzDataObj;
+                       scale = 0;
+                       colDefs[i].CbValue = SQL_NTS;
+                       break;
+               case DB_DATA_TYPE_INTEGER:
+                       fSqlType = pDb->typeInfInteger.FsqlType;
+                       precision = pDb->typeInfInteger.Precision;
+                       scale = 0;
+                       colDefs[i].CbValue = 0;
+                       break;
+               case DB_DATA_TYPE_FLOAT:
+                       fSqlType = pDb->typeInfFloat.FsqlType;
+                       precision = pDb->typeInfFloat.Precision;
+                       scale = pDb->typeInfFloat.MaximumScale;
+                       // SQL Sybase Anywhere v5.5 returned a negative number for the
+                       // MaxScale.  This caused ODBC to kick out an error on ibscale.
+                       // I check for this here and set the scale = precision.
+                       //if (scale < 0)
+                       //      scale = (short) precision;
+                       colDefs[i].CbValue = 0;
+                       break;
+               case DB_DATA_TYPE_DATE:
+                       fSqlType = pDb->typeInfDate.FsqlType;
+                       precision = pDb->typeInfDate.Precision;
+                       scale = 0;
+                       colDefs[i].CbValue = 0;
+                       break;
+               }
+               // Null values
+               if (colDefs[i].Null)
+               {
+                       colDefs[i].CbValue = SQL_NULL_DATA;
+                       colDefs[i].Null = FALSE;
+               }
+               if (SQLBindParameter(hstmtInsert, i+1, SQL_PARAM_INPUT, colDefs[i].SqlCtype,
+                                                                       fSqlType, precision, scale, (UCHAR*) colDefs[i].PtrDataObj, 
+                                                                       precision+1,&colDefs[i].CbValue) != SQL_SUCCESS)
+                       return(pDb->DispAllErrors(henv, hdbc, hstmtInsert));
+       }
+
+       // Completed successfully
+       return(TRUE);
+
+}  // wxTable::bindInsertParams()
+
+/********** wxTable::bindUpdateParams() **********/
+bool wxTable::bindUpdateParams(void)
+{
+       assert(!queryOnly);
+       if (queryOnly)
+               return(FALSE);
+
+       SWORD   fSqlType        = 0;
+       UDWORD  precision       = 0;
+       SWORD   scale           = 0;
+       
+       // Bind each UPDATEABLE column of the table to a parameter marker
+       int i,colNo;
+       for (i = 0, colNo = 1; i < noCols; i++)
+       {
+               if (! colDefs[i].Updateable)
+                       continue;
+               switch(colDefs[i].DbDataType)
+               {
+               case DB_DATA_TYPE_VARCHAR:
+                       fSqlType = pDb->typeInfVarchar.FsqlType;
+                       precision = colDefs[i].SzDataObj;
+                       scale = 0;
+                       colDefs[i].CbValue = SQL_NTS;
+                       break;
+               case DB_DATA_TYPE_INTEGER:
+                       fSqlType = pDb->typeInfInteger.FsqlType;
+                       precision = pDb->typeInfInteger.Precision;
+                       scale = 0;
+                       colDefs[i].CbValue = 0;
+                       break;
+               case DB_DATA_TYPE_FLOAT:
+                       fSqlType = pDb->typeInfFloat.FsqlType;
+                       precision = pDb->typeInfFloat.Precision;
+                       scale = pDb->typeInfFloat.MaximumScale;
+                       // SQL Sybase Anywhere v5.5 returned a negative number for the
+                       // MaxScale.  This caused ODBC to kick out an error on ibscale.
+                       // I check for this here and set the scale = precision.
+                       //if (scale < 0)
+                       // scale = (short) precision;
+                       colDefs[i].CbValue = 0;
+                       break;
+               case DB_DATA_TYPE_DATE:
+                       fSqlType = pDb->typeInfDate.FsqlType;
+                       precision = pDb->typeInfDate.Precision;
+                       scale = 0;
+                       colDefs[i].CbValue = 0;
+                       break;
+               }
+               if (SQLBindParameter(hstmtUpdate, colNo++, SQL_PARAM_INPUT, colDefs[i].SqlCtype,
+                                                                       fSqlType, precision, scale, (UCHAR*) colDefs[i].PtrDataObj, 
+                                                                       precision+1, &colDefs[i].CbValue) != SQL_SUCCESS)
+                       return(pDb->DispAllErrors(henv, hdbc, hstmtUpdate));
+       }
+
+       // Completed successfully
+       return(TRUE);
+
+}  // wxTable::bindUpdateParams()
+
+/********** wxTable::bindCols() **********/
+bool wxTable::bindCols(HSTMT cursor)
+{
+       static SDWORD  cb;
+       
+       // Bind each column of the table to a memory address for fetching data
+       int i;
+       for (i = 0; i < noCols; i++)
+       {
+               if (SQLBindCol(cursor, i+1, colDefs[i].SqlCtype, (UCHAR*) colDefs[i].PtrDataObj,
+                                                       colDefs[i].SzDataObj, &cb) != SQL_SUCCESS)
+                       return(pDb->DispAllErrors(henv, hdbc, cursor));
+       }
+
+       // Completed successfully
+       return(TRUE);
+
+}  // wxTable::bindCols()
+
+/********** wxTable::getRec() **********/
+bool wxTable::getRec(UWORD fetchType)
+{
+       RETCODE retcode;
+
+       if (!pDb->FwdOnlyCursors())
+       {
+               // Fetch the NEXT, PREV, FIRST or LAST record, depending on fetchType
+               UDWORD  cRowsFetched;
+               UWORD   rowStatus;
+
+               retcode = SQLExtendedFetch(hstmt, fetchType, 0, &cRowsFetched, &rowStatus);
+               if (retcode  != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
+                       if (retcode == SQL_NO_DATA_FOUND)
+                               return(FALSE);
+                       else
+                               return(pDb->DispAllErrors(henv, hdbc, hstmt));
+       }
+       else
+       {
+               // Fetch the next record from the record set
+               retcode = SQLFetch(hstmt);
+               if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
+               {
+                       if (retcode == SQL_NO_DATA_FOUND)
+                               return(FALSE);
+                       else
+                               return(pDb->DispAllErrors(henv, hdbc, hstmt));
+               }
+       }
+
+       // Completed successfully
+       return(TRUE);
+
+}  // wxTable::getRec()
+
+/********** wxTable::execDelete() **********/
+bool wxTable::execDelete(const char *pSqlStmt)
+{
+       // Execute the DELETE statement
+       if (SQLExecDirect(hstmtDelete, (UCHAR FAR *) pSqlStmt, SQL_NTS) != SQL_SUCCESS)
+               return(pDb->DispAllErrors(henv, hdbc, hstmtDelete));
+
+       // Record deleted successfully
+       return(TRUE);
+
+}  // wxTable::execDelete()
+
+/********** wxTable::execUpdate() **********/
+bool wxTable::execUpdate(const char *pSqlStmt)
+{
+       // Execute the UPDATE statement
+       if (SQLExecDirect(hstmtUpdate, (UCHAR FAR *) pSqlStmt, SQL_NTS) != SQL_SUCCESS)
+               return(pDb->DispAllErrors(henv, hdbc, hstmtUpdate));
+
+       // Record deleted successfully
+       return(TRUE);
+
+}  // wxTable::execUpdate()
+
+/********** wxTable::query() **********/
+bool wxTable::query(int queryType, bool forUpdate, bool distinct, char *pSqlStmt)
+{
+       char sqlStmt[DB_MAX_STATEMENT_LEN];
+
+       // Set the selectForUpdate member variable
+       if (forUpdate)
+               // The user may wish to select for update, but the DBMS may not be capable
+               selectForUpdate = CanSelectForUpdate();
+       else
+               selectForUpdate = FALSE;
+
+       // Set the SQL SELECT string
+       if (queryType != DB_SELECT_STATEMENT)                           // A select statement was not passed in,
+       {                                                                                                                               // so generate a select statement.
+               GetSelectStmt(sqlStmt, queryType, distinct);
+               pDb->WriteSqlLog(sqlStmt);
+       }
+
+       // Make sure the cursor is closed first
+       if (! CloseCursor(hstmt))
+               return(FALSE);
+
+       // Execute the SQL SELECT statement
+       int retcode;
+
+       retcode = SQLExecDirect(hstmt, (UCHAR FAR *) (queryType == DB_SELECT_STATEMENT ? pSqlStmt : sqlStmt), SQL_NTS);
+       if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
+               return(pDb->DispAllErrors(henv, hdbc, hstmt));
+
+       // Completed successfully
+       return(TRUE);
+
+}  // wxTable::query()
+
+
+
 /********** wxTable::Open() **********/
 bool wxTable::Open(void)
 {
 /********** wxTable::Open() **********/
 bool wxTable::Open(void)
 {
@@ -416,40 +660,53 @@ bool wxTable::QueryOnKeyFields(bool forUpdate, bool distinct)
 
 }  // wxTable::QueryOnKeyFields()
 
 
 }  // wxTable::QueryOnKeyFields()
 
-/********** wxTable::query() **********/
-bool wxTable::query(int queryType, bool forUpdate, bool distinct, char *pSqlStmt)
+/********** wxTable::GetPrev() **********/
+bool wxTable::GetPrev(void)
 {
 {
-       char sqlStmt[DB_MAX_STATEMENT_LEN];
-
-       // Set the selectForUpdate member variable
-       if (forUpdate)
-               // The user may wish to select for update, but the DBMS may not be capable
-               selectForUpdate = CanSelectForUpdate();
+       if (pDb->FwdOnlyCursors())
+       {
+               wxFAIL_MSG(wxT("GetPrev()::Backward scrolling cursors are not enabled for this instance of wxTable"));
+               return FALSE;
+       }
        else
        else
-               selectForUpdate = FALSE;
+               return(getRec(SQL_FETCH_PRIOR));
+}  // wxTable::GetPrev()
 
 
-       // Set the SQL SELECT string
-       if (queryType != DB_SELECT_STATEMENT)                           // A select statement was not passed in,
-       {                                                                                                                               // so generate a select statement.
-               GetSelectStmt(sqlStmt, queryType, distinct);
-               pDb->WriteSqlLog(sqlStmt);
+/********** wxTable::operator-- **********/
+bool wxTable::operator--(int)
+{
+       if (pDb->FwdOnlyCursors())
+       {
+               wxFAIL_MSG(wxT("operator--:Backward scrolling cursors are not enabled for this instance of wxTable"));
+               return FALSE;
        }
        }
+       else
+               return(getRec(SQL_FETCH_PRIOR));
+}  // wxTable::operator--
 
 
-       // Make sure the cursor is closed first
-       if (! CloseCursor(hstmt))
-               return(FALSE);
-
-       // Execute the SQL SELECT statement
-       int retcode;
-
-       retcode = SQLExecDirect(hstmt, (UCHAR FAR *) (queryType == DB_SELECT_STATEMENT ? pSqlStmt : sqlStmt), SQL_NTS);
-       if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
-               return(pDb->DispAllErrors(henv, hdbc, hstmt));
-
-       // Completed successfully
-       return(TRUE);
+/********** wxTable::GetFirst() **********/
+bool wxTable::GetFirst(void)
+{
+       if (pDb->FwdOnlyCursors())
+       {
+               wxFAIL_MSG(wxT("GetFirst():Backward scrolling cursors are not enabled for this instance of wxTable"));
+               return FALSE;
+       }
+       else
+               return(getRec(SQL_FETCH_FIRST));
+}  // wxTable::GetFirst()
 
 
-}  // wxTable::query()
+/********** wxTable::GetLast() **********/
+bool wxTable::GetLast(void)
+{
+       if (pDb->FwdOnlyCursors())
+       {
+               wxFAIL_MSG(wxT("GetLast()::Backward scrolling cursors are not enabled for this instance of wxTable"));
+               return FALSE;
+       }
+       else 
+               return(getRec(SQL_FETCH_LAST));
+}  // wxTable::GetLast()
 
 /********** wxTable::GetSelectStmt() **********/
 void wxTable::GetSelectStmt(char *pSqlStmt, int typeOfSelect, bool distinct)
 
 /********** wxTable::GetSelectStmt() **********/
 void wxTable::GetSelectStmt(char *pSqlStmt, int typeOfSelect, bool distinct)
@@ -560,42 +817,6 @@ void wxTable::GetSelectStmt(char *pSqlStmt, int typeOfSelect, bool distinct)
 
 }  // wxTable::GetSelectStmt()
 
 
 }  // wxTable::GetSelectStmt()
 
-/********** wxTable::getRec() **********/
-bool wxTable::getRec(UWORD fetchType)
-{
-       RETCODE retcode;
-
-#if !wxODBC_FWD_ONLY_CURSORS
-
-       // Fetch the NEXT, PREV, FIRST or LAST record, depending on fetchType
-       UDWORD  cRowsFetched;
-       UWORD   rowStatus;
-
-//     if ((retcode = SQLExtendedFetch(hstmt, fetchType, 0, &cRowsFetched, &rowStatus)) != SQL_SUCCESS)
-   retcode = SQLExtendedFetch(hstmt, fetchType, 0, &cRowsFetched, &rowStatus);
-   if (retcode  != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
-               if (retcode == SQL_NO_DATA_FOUND)
-                       return(FALSE);
-               else
-                       return(pDb->DispAllErrors(henv, hdbc, hstmt));
-#else
-
-       // Fetch the next record from the record set
-       retcode = SQLFetch(hstmt);
-       if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
-       {
-               if (retcode == SQL_NO_DATA_FOUND)
-                       return(FALSE);
-               else
-                       return(pDb->DispAllErrors(henv, hdbc, hstmt));
-       }
-#endif
-
-       // Completed successfully
-       return(TRUE);
-
-}  // wxTable::getRec()
-
 /********** wxTable::GetRowNum() **********/
 UWORD wxTable::GetRowNum(void)
 {
 /********** wxTable::GetRowNum() **********/
 UWORD wxTable::GetRowNum(void)
 {
@@ -612,151 +833,6 @@ UWORD wxTable::GetRowNum(void)
 
 }  // wxTable::GetRowNum()
 
 
 }  // wxTable::GetRowNum()
 
-/********** wxTable::bindInsertParams() **********/
-bool wxTable::bindInsertParams(void)
-{
-       assert(!queryOnly);
-       if (queryOnly)
-               return(FALSE);
-
-       SWORD   fSqlType        = 0;
-       UDWORD  precision       = 0;
-       SWORD   scale           = 0;
-
-       // Bind each column (that can be inserted) of the table to a parameter marker
-       int i;
-       for (i = 0; i < noCols; i++)
-       {
-               if (! colDefs[i].InsertAllowed)
-                       continue;
-               switch(colDefs[i].DbDataType)
-               {
-               case DB_DATA_TYPE_VARCHAR:
-                       fSqlType = pDb->typeInfVarchar.FsqlType;
-                       precision = colDefs[i].SzDataObj;
-                       scale = 0;
-                       colDefs[i].CbValue = SQL_NTS;
-                       break;
-               case DB_DATA_TYPE_INTEGER:
-                       fSqlType = pDb->typeInfInteger.FsqlType;
-                       precision = pDb->typeInfInteger.Precision;
-                       scale = 0;
-                       colDefs[i].CbValue = 0;
-                       break;
-               case DB_DATA_TYPE_FLOAT:
-                       fSqlType = pDb->typeInfFloat.FsqlType;
-                       precision = pDb->typeInfFloat.Precision;
-                       scale = pDb->typeInfFloat.MaximumScale;
-                       // SQL Sybase Anywhere v5.5 returned a negative number for the
-                       // MaxScale.  This caused ODBC to kick out an error on ibscale.
-                       // I check for this here and set the scale = precision.
-                       //if (scale < 0)
-                       //      scale = (short) precision;
-                       colDefs[i].CbValue = 0;
-                       break;
-               case DB_DATA_TYPE_DATE:
-                       fSqlType = pDb->typeInfDate.FsqlType;
-                       precision = pDb->typeInfDate.Precision;
-                       scale = 0;
-                       colDefs[i].CbValue = 0;
-                       break;
-               }
-               // Null values
-               if (colDefs[i].Null)
-               {
-                       colDefs[i].CbValue = SQL_NULL_DATA;
-                       colDefs[i].Null = FALSE;
-               }
-               if (SQLBindParameter(hstmtInsert, i+1, SQL_PARAM_INPUT, colDefs[i].SqlCtype,
-                                                                       fSqlType, precision, scale, (UCHAR*) colDefs[i].PtrDataObj, 
-                                                                       precision+1,&colDefs[i].CbValue) != SQL_SUCCESS)
-                       return(pDb->DispAllErrors(henv, hdbc, hstmtInsert));
-       }
-
-       // Completed successfully
-       return(TRUE);
-
-}  // wxTable::bindInsertParams()
-
-/********** wxTable::bindUpdateParams() **********/
-bool wxTable::bindUpdateParams(void)
-{
-       assert(!queryOnly);
-       if (queryOnly)
-               return(FALSE);
-
-       SWORD   fSqlType        = 0;
-       UDWORD  precision       = 0;
-       SWORD   scale           = 0;
-       
-       // Bind each UPDATEABLE column of the table to a parameter marker
-       int i,colNo;
-       for (i = 0, colNo = 1; i < noCols; i++)
-       {
-               if (! colDefs[i].Updateable)
-                       continue;
-               switch(colDefs[i].DbDataType)
-               {
-               case DB_DATA_TYPE_VARCHAR:
-                       fSqlType = pDb->typeInfVarchar.FsqlType;
-                       precision = colDefs[i].SzDataObj;
-                       scale = 0;
-                       colDefs[i].CbValue = SQL_NTS;
-                       break;
-               case DB_DATA_TYPE_INTEGER:
-                       fSqlType = pDb->typeInfInteger.FsqlType;
-                       precision = pDb->typeInfInteger.Precision;
-                       scale = 0;
-                       colDefs[i].CbValue = 0;
-                       break;
-               case DB_DATA_TYPE_FLOAT:
-                       fSqlType = pDb->typeInfFloat.FsqlType;
-                       precision = pDb->typeInfFloat.Precision;
-                       scale = pDb->typeInfFloat.MaximumScale;
-                       // SQL Sybase Anywhere v5.5 returned a negative number for the
-                       // MaxScale.  This caused ODBC to kick out an error on ibscale.
-                       // I check for this here and set the scale = precision.
-                       //if (scale < 0)
-                       // scale = (short) precision;
-                       colDefs[i].CbValue = 0;
-                       break;
-               case DB_DATA_TYPE_DATE:
-                       fSqlType = pDb->typeInfDate.FsqlType;
-                       precision = pDb->typeInfDate.Precision;
-                       scale = 0;
-                       colDefs[i].CbValue = 0;
-                       break;
-               }
-               if (SQLBindParameter(hstmtUpdate, colNo++, SQL_PARAM_INPUT, colDefs[i].SqlCtype,
-                                                                       fSqlType, precision, scale, (UCHAR*) colDefs[i].PtrDataObj, 
-                                                                       precision+1, &colDefs[i].CbValue) != SQL_SUCCESS)
-                       return(pDb->DispAllErrors(henv, hdbc, hstmtUpdate));
-       }
-
-       // Completed successfully
-       return(TRUE);
-
-}  // wxTable::bindUpdateParams()
-
-/********** wxTable::bindCols() **********/
-bool wxTable::bindCols(HSTMT cursor)
-{
-       static SDWORD  cb;
-       
-       // Bind each column of the table to a memory address for fetching data
-       int i;
-       for (i = 0; i < noCols; i++)
-       {
-               if (SQLBindCol(cursor, i+1, colDefs[i].SqlCtype, (UCHAR*) colDefs[i].PtrDataObj,
-                                                       colDefs[i].SzDataObj, &cb) != SQL_SUCCESS)
-                       return(pDb->DispAllErrors(henv, hdbc, cursor));
-       }
-
-       // Completed successfully
-       return(TRUE);
-
-}  // wxTable::bindCols()
-
 /********** wxTable::CloseCursor() **********/
 bool wxTable::CloseCursor(HSTMT cursor)
 {
 /********** wxTable::CloseCursor() **********/
 bool wxTable::CloseCursor(HSTMT cursor)
 {
@@ -971,7 +1047,7 @@ bool wxTable::DropTable()
 }  // wxTable::DropTable()
 
 /********** wxTable::CreateIndex() **********/
 }  // wxTable::DropTable()
 
 /********** wxTable::CreateIndex() **********/
-bool wxTable::CreateIndex(char * idxName, bool unique, int noIdxCols, CidxDef *pIdxDefs, bool attemptDrop)
+bool wxTable::CreateIndex(const char * idxName, bool unique, int noIdxCols, CidxDef *pIdxDefs, bool attemptDrop)
 {
        char sqlStmt[DB_MAX_STATEMENT_LEN];
 
 {
        char sqlStmt[DB_MAX_STATEMENT_LEN];
 
@@ -1038,7 +1114,7 @@ bool wxTable::CreateIndex(char * idxName, bool unique, int noIdxCols, CidxDef *p
 }  // wxTable::CreateIndex()
 
 /********** wxTable::DropIndex() **********/
 }  // wxTable::CreateIndex()
 
 /********** wxTable::DropIndex() **********/
-bool wxTable::DropIndex(char * idxName)
+bool wxTable::DropIndex(const char * idxName)
 {
        // NOTE: This function returns TRUE if the Index does not exist, but
        //       only for identified databases.  Code will need to be added
 {
        // NOTE: This function returns TRUE if the Index does not exist, but
        //       only for identified databases.  Code will need to be added
@@ -1121,19 +1197,6 @@ int wxTable::Insert(void)
 
 }  // wxTable::Insert()
 
 
 }  // wxTable::Insert()
 
-/********** wxTable::Update(pSqlStmt) **********/
-bool wxTable::Update(char *pSqlStmt)
-{
-       assert(!queryOnly);
-       if (queryOnly)
-               return(FALSE);
-
-       pDb->WriteSqlLog(pSqlStmt);
-
-       return(execUpdate(pSqlStmt));
-
-}  // wxTable::Update(pSqlStmt)
-
 /********** wxTable::Update() **********/
 bool wxTable::Update(void)
 {
 /********** wxTable::Update() **********/
 bool wxTable::Update(void)
 {
@@ -1157,8 +1220,21 @@ bool wxTable::Update(void)
 
 }  // wxTable::Update()
 
 
 }  // wxTable::Update()
 
+/********** wxTable::Update(pSqlStmt) **********/
+bool wxTable::Update(const char *pSqlStmt)
+{
+       assert(!queryOnly);
+       if (queryOnly)
+               return(FALSE);
+
+       pDb->WriteSqlLog(pSqlStmt);
+
+       return(execUpdate(pSqlStmt));
+
+}  // wxTable::Update(pSqlStmt)
+
 /********** wxTable::UpdateWhere() **********/
 /********** wxTable::UpdateWhere() **********/
-bool wxTable::UpdateWhere(char *pWhereClause)
+bool wxTable::UpdateWhere(const char *pWhereClause)
 {
        assert(!queryOnly);
        if (queryOnly)
 {
        assert(!queryOnly);
        if (queryOnly)
@@ -1200,7 +1276,7 @@ bool wxTable::Delete(void)
 }  // wxTable::Delete()
 
 /********** wxTable::DeleteWhere() **********/
 }  // wxTable::Delete()
 
 /********** wxTable::DeleteWhere() **********/
-bool wxTable::DeleteWhere(char *pWhereClause)
+bool wxTable::DeleteWhere(const char *pWhereClause)
 {
        assert(!queryOnly);
        if (queryOnly)
 {
        assert(!queryOnly);
        if (queryOnly)
@@ -1237,32 +1313,8 @@ bool wxTable::DeleteMatching(void)
 
 }  // wxTable::DeleteMatching()
 
 
 }  // wxTable::DeleteMatching()
 
-/********** wxTable::execDelete() **********/
-bool wxTable::execDelete(char *pSqlStmt)
-{
-       // Execute the DELETE statement
-       if (SQLExecDirect(hstmtDelete, (UCHAR FAR *) pSqlStmt, SQL_NTS) != SQL_SUCCESS)
-               return(pDb->DispAllErrors(henv, hdbc, hstmtDelete));
-
-       // Record deleted successfully
-       return(TRUE);
-
-}  // wxTable::execDelete()
-
-/********** wxTable::execUpdate() **********/
-bool wxTable::execUpdate(char *pSqlStmt)
-{
-       // Execute the UPDATE statement
-       if (SQLExecDirect(hstmtUpdate, (UCHAR FAR *) pSqlStmt, SQL_NTS) != SQL_SUCCESS)
-               return(pDb->DispAllErrors(henv, hdbc, hstmtUpdate));
-
-       // Record deleted successfully
-       return(TRUE);
-
-}  // wxTable::execUpdate()
-
 /********** wxTable::GetUpdateStmt() **********/
 /********** wxTable::GetUpdateStmt() **********/
-void wxTable::GetUpdateStmt(char *pSqlStmt, int typeOfUpd, char *pWhereClause)
+void wxTable::GetUpdateStmt(char *pSqlStmt, int typeOfUpd, const char *pWhereClause)
 {
        assert(!queryOnly);
        if (queryOnly)
 {
        assert(!queryOnly);
        if (queryOnly)
@@ -1323,11 +1375,10 @@ void wxTable::GetUpdateStmt(char *pSqlStmt, int typeOfUpd, char *pWhereClause)
                wxStrcat(pSqlStmt, pWhereClause);
                break;
        }
                wxStrcat(pSqlStmt, pWhereClause);
                break;
        }
-
 }  // GetUpdateStmt()
 
 /********** wxTable::GetDeleteStmt() **********/
 }  // GetUpdateStmt()
 
 /********** wxTable::GetDeleteStmt() **********/
-void wxTable::GetDeleteStmt(char *pSqlStmt, int typeOfDel, char *pWhereClause)
+void wxTable::GetDeleteStmt(char *pSqlStmt, int typeOfDel, const char *pWhereClause)
 {
        assert(!queryOnly);
        if (queryOnly)
 {
        assert(!queryOnly);
        if (queryOnly)
@@ -1392,7 +1443,7 @@ void wxTable::GetDeleteStmt(char *pSqlStmt, int typeOfDel, char *pWhereClause)
  *       They are not included as part of the where clause.
  */
 
  *       They are not included as part of the where clause.
  */
 
-void wxTable::GetWhereClause(char *pWhereClause, int typeOfWhere, char *qualTableName)
+void wxTable::GetWhereClause(char *pWhereClause, int typeOfWhere, const char *qualTableName)
 {
        bool moreThanOneColumn = FALSE;
        char colValue[255];
 {
        bool moreThanOneColumn = FALSE;
        char colValue[255];
@@ -1585,7 +1636,7 @@ bool wxTable::SetQueryTimeout(UDWORD nSeconds)
 }  // wxTable::SetQueryTimeout()
 
 /********** wxTable::SetColDefs() **********/
 }  // wxTable::SetQueryTimeout()
 
 /********** wxTable::SetColDefs() **********/
-void wxTable::SetColDefs (int index, char *fieldName, int dataType, void *pData,
+void wxTable::SetColDefs (int index, const char *fieldName, int dataType, void *pData,
                                                                 int cType, int size, bool keyField, bool upd,
                                                                 bool insAllow, bool derivedCol)
 {
                                                                 int cType, int size, bool keyField, bool upd,
                                                                 bool insAllow, bool derivedCol)
 {
@@ -1769,7 +1820,7 @@ bool wxTable::SetNull(int colNo)
 }  // wxTable::SetNull(UINT colNo)
 
 /********** wxTable::SetNull(char *colName) **********/
 }  // wxTable::SetNull(UINT colNo)
 
 /********** wxTable::SetNull(char *colName) **********/
-bool wxTable::SetNull(char *colName)
+bool wxTable::SetNull(const char *colName)
 {
        int i;
        for (i = 0; i < noCols; i++)
 {
        int i;
        for (i = 0; i < noCols; i++)