Unicode corrections in new SqlExec() overload

SQL_BIT and SQL_TIMESTAMP were not being correctly interpreted in ::GetColumns()
Source reformatting to match WX conventions


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30361 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
George Tasker
2004-11-08 12:21:09 +00:00
parent d34fb3b8f5
commit c906510440

View File

@@ -2167,21 +2167,24 @@ bool wxDb::ExecSql(const wxString &pSqlStmt)
bool wxDb::ExecSql(const wxString &pSqlStmt, wxDbColInf** columns, short& numcols) bool wxDb::ExecSql(const wxString &pSqlStmt, wxDbColInf** columns, short& numcols)
{ {
//execute the statement first //execute the statement first
if (! ExecSql(pSqlStmt)) return false; if (!ExecSql(pSqlStmt))
return false;
SWORD noCols; SWORD noCols;
if (SQLNumResultCols (hstmt, &noCols) != SQL_SUCCESS) if (SQLNumResultCols(hstmt, &noCols) != SQL_SUCCESS)
{ {
DispAllErrors(henv, hdbc, hstmt); DispAllErrors(henv, hdbc, hstmt);
return false; return false;
} }
if (noCols == 0) return false; if (noCols == 0)
else numcols = noCols; return false;
else
numcols = noCols;
// Get column information // Get column information
short colNum; short colNum;
UCHAR name[DB_MAX_COLUMN_NAME_LEN+1]; wxChar name[DB_MAX_COLUMN_NAME_LEN+1];
SWORD Sword; SWORD Sword;
SDWORD Sdword; SDWORD Sdword;
wxDbColInf* pColInf = new wxDbColInf[noCols]; wxDbColInf* pColInf = new wxDbColInf[noCols];
@@ -2189,7 +2192,7 @@ bool wxDb::ExecSql(const wxString &pSqlStmt, wxDbColInf** columns, short& numcol
//fill in column information (name, datatype) //fill in column information (name, datatype)
for (colNum = 0; colNum < noCols; colNum++) for (colNum = 0; colNum < noCols; colNum++)
{ {
if (SQLColAttributes(hstmt,colNum+1, SQL_COLUMN_NAME, if (SQLColAttributes(hstmt, colNum+1, SQL_COLUMN_NAME,
name, sizeof(name), name, sizeof(name),
&Sword, &Sdword) != SQL_SUCCESS) &Sword, &Sdword) != SQL_SUCCESS)
{ {
@@ -2198,9 +2201,9 @@ bool wxDb::ExecSql(const wxString &pSqlStmt, wxDbColInf** columns, short& numcol
return false; return false;
} }
wxStrncpy(pColInf[colNum].colName, (const char*) name, DB_MAX_COLUMN_NAME_LEN); wxStrncpy(pColInf[colNum].colName, name, DB_MAX_COLUMN_NAME_LEN);
if (SQLColAttributes(hstmt,colNum+1, SQL_COLUMN_TYPE, if (SQLColAttributes(hstmt, colNum+1, SQL_COLUMN_TYPE,
NULL, 0, &Sword, &Sdword) != SQL_SUCCESS) NULL, 0, &Sword, &Sdword) != SQL_SUCCESS)
{ {
DispAllErrors(henv, hdbc, hstmt); DispAllErrors(henv, hdbc, hstmt);
@@ -2210,43 +2213,42 @@ bool wxDb::ExecSql(const wxString &pSqlStmt, wxDbColInf** columns, short& numcol
switch (Sdword) switch (Sdword)
{ {
case SQL_VARCHAR: case SQL_VARCHAR:
case SQL_CHAR: case SQL_CHAR:
pColInf[colNum].dbDataType = DB_DATA_TYPE_VARCHAR; pColInf[colNum].dbDataType = DB_DATA_TYPE_VARCHAR;
break; break;
case SQL_TINYINT:
case SQL_TINYINT: case SQL_SMALLINT:
case SQL_SMALLINT: case SQL_INTEGER:
case SQL_INTEGER: case SQL_BIT:
case SQL_BIT: pColInf[colNum].dbDataType = DB_DATA_TYPE_INTEGER;
pColInf[colNum].dbDataType = DB_DATA_TYPE_INTEGER; break;
break; case SQL_DOUBLE:
case SQL_DOUBLE: case SQL_DECIMAL:
case SQL_DECIMAL: case SQL_NUMERIC:
case SQL_NUMERIC: case SQL_FLOAT:
case SQL_FLOAT: case SQL_REAL:
case SQL_REAL: pColInf[colNum].dbDataType = DB_DATA_TYPE_FLOAT;
pColInf[colNum].dbDataType = DB_DATA_TYPE_FLOAT; break;
break; case SQL_DATE:
case SQL_DATE: case SQL_TIMESTAMP:
case SQL_TIMESTAMP: pColInf[colNum].dbDataType = DB_DATA_TYPE_DATE;
pColInf[colNum].dbDataType = DB_DATA_TYPE_DATE; break;
break; case SQL_BINARY:
case SQL_BINARY: pColInf[colNum].dbDataType = DB_DATA_TYPE_BLOB;
pColInf[colNum].dbDataType = DB_DATA_TYPE_BLOB; break;
break;
#ifdef __WXDEBUG__ #ifdef __WXDEBUG__
default: default:
wxString errMsg; wxString errMsg;
errMsg.Printf(wxT("SQL Data type %d currently not supported by wxWindows"), Sdword); errMsg.Printf(wxT("SQL Data type %d currently not supported by wxWidgets"), Sdword);
wxLogDebug(errMsg,wxT("ODBC DEBUG MESSAGE")); wxLogDebug(errMsg,wxT("ODBC DEBUG MESSAGE"));
#endif #endif
} }
} }
*columns = pColInf; *columns = pColInf;
return true; return true;
} // wxDb::ExecSqlGetInf() } // wxDb::ExecSql()
/********** wxDb::GetNext() **********/ /********** wxDb::GetNext() **********/
bool wxDb::GetNext(void) bool wxDb::GetNext(void)
@@ -2984,10 +2986,10 @@ wxDbColInf *wxDb::GetColumns(const wxString &tableName, int *numCols, const wxCh
case SQL_CHAR: case SQL_CHAR:
colInf[colNo].dbDataType = DB_DATA_TYPE_VARCHAR; colInf[colNo].dbDataType = DB_DATA_TYPE_VARCHAR;
break; break;
case SQL_TINYINT: case SQL_TINYINT:
case SQL_SMALLINT: case SQL_SMALLINT:
case SQL_INTEGER: case SQL_INTEGER:
case SQL_BIT:
colInf[colNo].dbDataType = DB_DATA_TYPE_INTEGER; colInf[colNo].dbDataType = DB_DATA_TYPE_INTEGER;
break; break;
case SQL_DOUBLE: case SQL_DOUBLE:
@@ -2998,6 +3000,7 @@ wxDbColInf *wxDb::GetColumns(const wxString &tableName, int *numCols, const wxCh
colInf[colNo].dbDataType = DB_DATA_TYPE_FLOAT; colInf[colNo].dbDataType = DB_DATA_TYPE_FLOAT;
break; break;
case SQL_DATE: case SQL_DATE:
case SQL_TIMESTAMP:
colInf[colNo].dbDataType = DB_DATA_TYPE_DATE; colInf[colNo].dbDataType = DB_DATA_TYPE_DATE;
break; break;
case SQL_BINARY: case SQL_BINARY: