// source such as opening and closing the data source.
// Author: Doug Card
// Modified by: George Tasker
+// Bart Jourquin
+// Mark Johnson, wxWindows@mj10777.de
// Mods: Dec, 1998:
// -Added support for SQL statement logging and database cataloging
// April, 1999
// BJO 20000503: introduce new GetColumns members which are more database independant and
// return columns in the order they were created
#define OLD_GETCOLUMNS 1
-
+#define EXPERIMENTAL_WXDB_FUNCTIONS 1
// Use this line for wxWindows v1.x
//#include "wx_ver.h"
#if wxMAJOR_VERSION == 2
#ifdef __GNUG__
- #pragma interface "db.h"
+ #pragma interface "db.h"
#endif
#endif
#if wxMAJOR_VERSION == 2
extern "C" {
+#ifdef __VISUALC__
+// If you use the wxDbCreateDataSource() function with MSW/VC6,
+// you cannot use the iODBC headers, you must use the VC headers,
+// plus the odbcinst.h header - gt Nov 2 2000
+//
+// Must add "odbccp32.lib" in \wx2\wxWindows\src\makevc.env to the WINLIBS= line
+//
+ #include "sql.h"
+ #include "sqlext.h"
+ #include "odbcinst.h"
+#else
#include "wx/isql.h"
#include "wx/isqlext.h"
-// If you use the wxCreateDataSource() function with MSW/VC6,
-// you cannot use the iODBC headers, you must use the VC headers,
-// plus the odbcinst.h header
- //#include "sql.h"
- //#include "sqlext.h"
- //#include "odbcinst.h"
+#endif
}
#else // version == 1
extern "C" {
+#ifdef __VISUALC__
+// If you use the wxDbCreateDataSource() function with MSW/VC6,
+// you cannot use the iODBC headers, you must use the VC headers,
+// plus the odbcinst.h header - gt Nov 2 2000
+ #include "sql.h"
+ #include "sqlext.h"
+ #include "odbcinst.h"
+#else
#include "iodbc.h"
#include "isqlext.h"
+#endif
}
#endif
// Database Globals
const int DB_TYPE_NAME_LEN = 40;
-const int DB_MAX_STATEMENT_LEN = 2048;
-const int DB_MAX_WHERE_CLAUSE_LEN = 1024;
+const int DB_MAX_STATEMENT_LEN = 4096;
+const int DB_MAX_WHERE_CLAUSE_LEN = 2048;
const int DB_MAX_ERROR_MSG_LEN = 512;
const int DB_MAX_ERROR_HISTORY = 5;
const int DB_MAX_TABLE_NAME_LEN = 128;
public:
wxString s_Field; // Formated String for Output
wxString s_Format[7]; // Formated Objects - TIMESTAMP has the biggest (7)
- wxString s_Menge[7]; // Formated Objects - amount of things that can be formatted
- int i_Menge[7]; // Formated Objects - TT MM YYYY HH MM SS m
+ wxString s_Amount[7]; // Formated Objects - amount of things that can be formatted
+ int i_Amount[7]; // Formated Objects - TT MM YYYY HH MM SS m
int i_Nation; // 0 = timestamp , 1=EU, 2=UK, 3=International, 4=US
int i_dbDataType; // conversion of the 'sqlDataType' to the generic data type used by these classes
SWORD i_sqlDataType;
int FkCol; // Foreign key column 0=No; 1= First Key, 2 = Second Key etc.
char FkTableName[DB_MAX_TABLE_NAME_LEN+1]; // Foreign key table name
wxDbColFor *pColFor; // How should this columns be formatted
+
+ wxDbColInf();
+ ~wxDbColInf();
};
char tableRemarks[254+1];
int numCols; // How many Columns does this Table have: GetColumnCount(..);
wxDbColInf *pColInf; // pColInf = NULL ; User can later call GetColumns(..);
+ wxDbTableInf();
+ ~wxDbTableInf();
};
char schema[128+1];
int numTables; // How many tables does this database have
wxDbTableInf *pTableInf; // pTableInf = new wxDbTableInf[numTables];
+
+ wxDbInf();
+ ~wxDbInf();
};
dbmsACCESS,
dbmsDBASE,
dbmsINFORMIX,
- dbmsVIRTUOSO
+ dbmsVIRTUOSO,
+ dbmsDB2,
+ dbmsINTERBASE
};
FILE *fpSqlLog; // Sql Log file pointer
wxDbSqlLogState sqlLogState; // On or Off
bool fwdOnlyCursors;
+ wxDBMS dbmsType; // Type of datasource - i.e. Oracle, dBase, SQLServer, etc
// Private member functions
bool getDbInfo(void);
bool getDataTypeInfo(SWORD fSqlType, wxDbSqlTypeInfo &structSQLTypeInfo);
bool setConnectionOptions(void);
void logError(const char *errMsg, const char *SQLState);
+ void initialize();
#if !wxODBC_BACKWARD_COMPATABILITY
// ODBC handles
HENV henv; // ODBC Environment handle
unsigned int nTables;
// Information about logical data types VARCHAR, INTEGER, FLOAT and DATE.
- //
+ //
// This information is obtained from the ODBC driver by use of the
// SQLGetTypeInfo() function. The key piece of information is the
// type name the data source uses for each logical data type.
char databaseName[128]; // Database filename
char outerJoins[2]; // Indicates whether the data source supports outer joins
char procedureSupport[2]; // Indicates whether the data source supports stored procedures
+ char accessibleTables[2]; // Indicates whether the data source only reports accessible tables in SQLTables.
UWORD maxConnections; // Maximum # of connections the data source supports
UWORD maxStmts; // Maximum # of HSTMTs per HDBC
UWORD apiConfLvl; // ODBC API conformance level
#if wxODBC_BACKWARD_COMPATABILITY
// Information about logical data types VARCHAR, INTEGER, FLOAT and DATE.
- //
+ //
// This information is obtained from the ODBC driver by use of the
// SQLGetTypeInfo() function. The key piece of information is the
// type name the data source uses for each logical data type.
#endif
// Public member functions
- wxDb(HENV &aHenv, bool FwdOnlyCursors=(bool)TRUE);
+ wxDb(HENV &aHenv, bool FwdOnlyCursors=(bool)wxODBC_FWD_ONLY_CURSORS);
bool Open(char *Dsn, char *Uid, char *AuthStr); // Data Source Name, User ID, Password
+ bool Open(wxDb *copyDb); // pointer to a wxDb whose connection info should be copied rather than re-queried
void Close(void);
bool CommitTrans(void);
bool RollbackTrans(void);
wxDbColInf *GetColumns(char *tableName, int *numCols, const char *userID=NULL);
int GetColumnCount(char *tableName, const char *userID=NULL);
- char *GetDatabaseName(void) {return dbInf.dbmsName;}
- char *GetDataSource(void) {return dsn;}
- char *GetUsername(void) {return uid;}
- char *GetPassword(void) {return authStr;}
- bool IsOpen(void) {return dbIsOpen;}
- HENV GetHENV(void) {return henv;}
- HDBC GetHDBC(void) {return hdbc;}
- HSTMT GetHSTMT(void) {return hstmt;}
- int GetTableCount() {return nTables;}; // number of tables using this connection
- wxDbSqlTypeInfo GetTypeInfVarchar(){return typeInfVarchar;}
- wxDbSqlTypeInfo GetTypeInfInteger(){return typeInfInteger;}
- wxDbSqlTypeInfo GetTypeInfFloat() {return typeInfFloat;}
- wxDbSqlTypeInfo GetTypeInfDate() {return typeInfDate;}
+ const char *GetDatabaseName(void) {return dbInf.dbmsName;}
+ const char *GetDataSource(void) {return (const char *)dsn;}
+ const char *GetDatasourceName(void){return (const char *)dsn;}
+ const char *GetUsername(void) {return (const char *)uid;}
+ const char *GetPassword(void) {return (const char *)authStr;}
+ bool IsOpen(void) {return dbIsOpen;}
+ HENV GetHENV(void) {return henv;}
+ HDBC GetHDBC(void) {return hdbc;}
+ HSTMT GetHSTMT(void) {return hstmt;}
+ int GetTableCount() {return nTables;}; // number of tables using this connection
+ wxDbSqlTypeInfo GetTypeInfVarchar() {return typeInfVarchar;}
+ wxDbSqlTypeInfo GetTypeInfInteger() {return typeInfInteger;}
+ wxDbSqlTypeInfo GetTypeInfFloat() {return typeInfFloat;}
+ wxDbSqlTypeInfo GetTypeInfDate() {return typeInfDate;}
bool TableExists(const char *tableName, const char *userID=NULL, const char *path=NULL); // Table name can refer to a table, view, alias or synonym
- void LogError(const char *errMsg, const char *SQLState = 0) {logError(errMsg, SQLState);}
+ bool TablePrivileges(const char *tableName, const char* priv, const char *userID="", const char *schema=NULL, const char *path=""); // Table name can refer to a table, view, alias or synonym
+ void LogError(const char *errMsg, const char *SQLState = NULL) {logError(errMsg, SQLState);}
void SetDebugErrorMessages(bool state) { silent = !state; }
bool SetSqlLogging(wxDbSqlLogState state, const wxChar *filename = SQL_LOG_FILENAME, bool append = FALSE);
bool WriteSqlLog(const wxChar *logMsg);
{
wxDbList *PtrPrev; // Pointer to previous item in the list
wxChar Dsn[SQL_MAX_DSN_LENGTH+1]; // Data Source Name
+ wxChar Uid[20+1]; // User ID
+ wxChar AuthStr[20+1]; // Authorization string (password)
wxDb *PtrDb; // Pointer to the wxDb object
bool Free; // Is item free or in use?
wxDbList *PtrNext; // Pointer to next item in the list