Added support for dBase, PostGres, MySQL, Access, MS SQL Server.

Added QUERY_ONLY data connection types.
SQL logging code addded.
Cleaned up handling compilation under both 1.6x and 2.x.
Added debug code to warn when connections were not released on program termination.
MS-VC6 corrections due to larger memory buffers required.
Parameter added to not require CreateView() and CreateTable() to drop the view or table first.
DropView() function added.
Database UserIDs can now be passed to functions that need them.
SQLUnbind() called where needed now to prevent resource leaks.
TableExists() function now handles dBase files.
Dbms() function added to determine which database the program is currently running against.
Comments have been added to the Dbms() function to indicate issues specific to different data sources.
Dynamic cursor support added (no longer creates 5-7 cursors for every wxTable instance).
wxTable dtor is now virtual.
Parameter added to not require CreateIndex() and CreateTable() to drop the view or table first.
DropIndex() and DropTable() functions added.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3868 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
George Tasker
1999-10-07 14:19:57 +00:00
parent 9b64e79868
commit a2115c88f3
4 changed files with 1255 additions and 467 deletions

View File

@@ -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