X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9f8de18fb64df24b778c92600af59338f606e1a0..ed673c6a48b3479beac60a93ff8f44611e44415f:/include/wx/dbtable.h diff --git a/include/wx/dbtable.h b/include/wx/dbtable.h index 004f02a299..71ef8d2e7d 100644 --- a/include/wx/dbtable.h +++ b/include/wx/dbtable.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: table.h +// Name: dbtable.h // Purpose: Declaration of the wxTable class. // Author: Doug Card // Modified by: @@ -23,16 +23,30 @@ // SYNOPSIS STOP */ -#ifndef TABLE_DOT_H -#define TABLE_DOT_H +#ifndef DBTABLE_DOT_H +#define DBTABLE_DOT_H -#ifdef __GNUG__ -#pragma interface "dbtable.h" +// Use this line for wxWindows v1.x +//#include "wx_ver.h" +// Use this line for wxWindows v2.x +#include "wx/version.h" + +#if wxMAJOR_VERSION == 2 + #ifdef __GNUG__ + #pragma interface "dbtable.h" + #endif #endif -#include "wx/db.h" +#if wxMAJOR_VERSION == 2 + #include "wx/db.h" +#else + #include "db.h" +#endif -const int ROWID_LEN = 24; // 18 is the max, 24 is in case it gets larger +const int ROWID_LEN = 24; // 18 is the max, 24 is in case it gets larger +const int DEFAULT_CURSOR = 0; +const bool QUERY_ONLY = TRUE; +const bool DISABLE_VIEW = TRUE; // The following class is used to define a column of a table. // The wxTable constructor will dynamically allocate as many of @@ -46,7 +60,7 @@ const int ROWID_LEN = 24; // 18 is the max, 24 is in case it gets larger class WXDLLEXPORT CcolDef { public: - char ColName[DB_MAX_COLUMN_NAME_LEN+1]; // Column Name glt 4/19/97 added one for the null terminator + char ColName[DB_MAX_COLUMN_NAME_LEN+1]; // Column Name int DbDataType; // Logical Data Type; e.g. DB_DATA_TYPE_INTEGER int SqlCtype; // C data type; e.g. SQL_C_LONG void *PtrDataObj; // Address of the data object @@ -56,13 +70,14 @@ public: bool InsertAllowed; // Specifies whether this column should be included in an INSERT statement bool DerivedCol; // Specifies whether this column is a derived value SDWORD CbValue; // Internal use only!!! + bool Null; // NOT FULLY IMPLEMENTED - Allows NULL values in Inserts and Updates }; // CcolDef // This structure is used when creating secondary indexes. class WXDLLEXPORT CidxDef { public: - char ColName[DB_MAX_COLUMN_NAME_LEN+1]; // Column Name glt 4/19/97 added one for the null terminator + char ColName[DB_MAX_COLUMN_NAME_LEN+1]; bool Ascending; }; // CidxDef @@ -70,8 +85,10 @@ class WXDLLEXPORT wxTable { private: + ULONG tableID; // Used for debugging. This can help to match up mismatched constructors/destructors + // Private member variables - int currCursorNo; + UDWORD cursorType; // Private member functions bool bindInsertParams(void); @@ -91,17 +108,20 @@ public: HENV henv; // ODBC Environment handle HDBC hdbc; // ODBC DB Connection handle HSTMT hstmt; // ODBC Statement handle -// HSTMT c0, c1, c2, c3, c4, c5; // Cursors 0 through 5 - HSTMT c0, c1, c2; // Limited to Cursors 0 through 2 for now + HSTMT *hstmtDefault; // Default cursor HSTMT hstmtInsert; // ODBC Statement handle used specifically for inserts HSTMT hstmtDelete; // ODBC Statement handle used specifically for deletes HSTMT hstmtUpdate; // ODBC Statement handle used specifically for updates - HSTMT hstmtCount; // ODBC Statement handle used specifically for COUNT(*) + HSTMT hstmtInternal; // ODBC Statement handle used internally only + HSTMT *hstmtCount; // ODBC Statement handle used by Count() function (No binding of columns) // Table Inf. char tableName[DB_MAX_TABLE_NAME_LEN+1]; // Table name char queryTableName[DB_MAX_TABLE_NAME_LEN+1]; // Query Table Name int noCols; // # of columns in the table + bool queryOnly; // Query Only, no inserts, updates or deletes + + char tablePath[DB_PATH_MAX]; // needed for dBase tables // Column Definitions CcolDef *colDefs; // Array of CcolDef structures @@ -109,17 +129,20 @@ public: // Where, Order By and From clauses char *where; // Standard SQL where clause, minus the word WHERE char *orderBy; // Standard SQL order by clause, minus the ORDER BY - char *from; // Allows for joins in a Ctable::Query(). Format: ",tbl,tbl..." + char *from; // Allows for joins in a wxTable::Query(). Format: ",tbl,tbl..." // Flags bool selectForUpdate; // Public member functions - wxTable(wxDB *pwxDB, const char *tblName, const int nCols, const char *qryTblName = 0); + wxTable(wxDB *pwxDB, const char *tblName, const int nCols, + const char *qryTblName = 0, bool qryOnly = !QUERY_ONLY, char *tblPath=NULL); virtual ~wxTable(); bool Open(void); - bool CreateTable(void); - bool CreateIndex(char * idxName, bool unique, int noIdxCols, CidxDef *pIdxDefs); + bool CreateTable(bool attemptDrop=TRUE); + bool DropTable(void); + bool CreateIndex(char * idxName, bool unique, int noIdxCols, CidxDef *pIdxDefs, bool attemptDrop=TRUE); + bool DropIndex(char * idxName); bool CloseCursor(HSTMT cursor); int Insert(void); bool Update(void); @@ -154,11 +177,19 @@ public: void SetColDefs (int index, char *fieldName, int dataType, void *pData, int cType, int size, bool keyField = FALSE, bool upd = TRUE, bool insAllow = TRUE, bool derivedCol = FALSE); - bool SetCursor(int cursorNo = DB_CURSOR0); - int GetCursor(void) { return(currCursorNo); } + HSTMT *NewCursor(bool setCursor = FALSE, bool bindColumns = TRUE); + bool DeleteCursor(HSTMT *hstmtDel); + void SetCursor(HSTMT *hstmtActivate = (void **) DEFAULT_CURSOR); + HSTMT GetCursor(void) { return(hstmt); } ULONG Count(void); int DB_STATUS(void) { return(pDb->DB_STATUS); } bool Refresh(void); + bool SetNull(int colNo); + bool SetNull(char *colName); + +#if __WXDEBUG__ > 0 + ULONG GetTableID() { return tableID; }; +#endif }; // wxTable