bool CreateView(const wxString &viewName, const wxString &colList, const wxString &pSqlStmt, bool attemptDrop=true);
bool DropView(const wxString &viewName);
bool ExecSql(const wxString &pSqlStmt);
+ bool ExecSql(const wxString &pSqlStmt, wxDbColInf** columns, short& numcols);
bool GetNext(void);
bool GetData(UWORD colNo, SWORD cType, PTR pData, SDWORD maxLen, SDWORD FAR *cbReturned);
bool Grant(int privileges, const wxString &tableName, const wxString &userList = wxT("PUBLIC"));
} // wxDb::ExecSql()
+/********** wxDb::ExecSql() with column info **********/
+bool wxDb::ExecSqlGetInf(const wxString &pSqlStmt, wxDbColInf** columns, short& numcols)
+{
+ //execute the statement first
+ if (! ExecSql(pSqlStmt)) return false;
+
+ SWORD noCols;
+ if (SQLNumResultCols (hstmt, &noCols) != SQL_SUCCESS)
+ {
+ DispAllErrors(henv, hdbc, hstmt);
+ return false;
+ }
+
+ if (noCols == 0) return false;
+ else numcols = noCols;
+
+ // Get column information
+ short colNum;
+ UCHAR name[DB_MAX_COLUMN_NAME_LEN+1];
+ SWORD Sword;
+ SDWORD Sdword;
+ wxDbColInf* pColInf = new wxDbColInf[noCols];
+
+ //fill in column information (name, datatype)
+ for (colNum = 0; colNum < noCols; colNum++)
+ {
+ if (SQLColAttributes(hstmt,colNum+1, SQL_COLUMN_NAME,
+ name, sizeof(name),
+ &Sword, &Sdword) != SQL_SUCCESS)
+ {
+ DispAllErrors(henv, hdbc, hstmt);
+ delete[] pColInf;
+ return false;
+ }
+
+ wxStrncpy(pColInf[colNum].colName, (const char*) name, DB_MAX_COLUMN_NAME_LEN);
+
+ if (SQLColAttributes(hstmt,colNum+1, SQL_COLUMN_TYPE,
+ NULL, 0, &Sword, &Sdword) != SQL_SUCCESS)
+ {
+ DispAllErrors(henv, hdbc, hstmt);
+ delete[] pColInf;
+ return false;
+ }
+
+ switch (Sdword)
+ {
+ case SQL_VARCHAR:
+ case SQL_CHAR:
+ pColInf[colNum].dbDataType = DB_DATA_TYPE_VARCHAR;
+ break;
+
+ case SQL_TINYINT:
+ case SQL_SMALLINT:
+ case SQL_INTEGER:
+ case SQL_BIT:
+ pColInf[colNum].dbDataType = DB_DATA_TYPE_INTEGER;
+ break;
+ case SQL_DOUBLE:
+ case SQL_DECIMAL:
+ case SQL_NUMERIC:
+ case SQL_FLOAT:
+ case SQL_REAL:
+ pColInf[colNum].dbDataType = DB_DATA_TYPE_FLOAT;
+ break;
+ case SQL_DATE:
+ case SQL_TIMESTAMP:
+ pColInf[colNum].dbDataType = DB_DATA_TYPE_DATE;
+ break;
+ case SQL_BINARY:
+ pColInf[colNum].dbDataType = DB_DATA_TYPE_BLOB;
+ break;
+#ifdef __WXDEBUG__
+ default:
+ wxString errMsg;
+ errMsg.Printf(wxT("SQL Data type %d currently not supported by wxWindows"), Sdword);
+ wxLogDebug(errMsg,wxT("ODBC DEBUG MESSAGE"));
+#endif
+ }
+ }
+
+ *columns = pColInf;
+ return true;
+} // wxDb::ExecSqlGetInf()
+
/********** wxDb::GetNext() **********/
bool wxDb::GetNext(void)
{