Initial revision
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
322
include/wx/odbc.h
Normal file
322
include/wx/odbc.h
Normal file
@@ -0,0 +1,322 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: odbc.h
|
||||
// Purpose: ODBC classes
|
||||
// Author: Olaf Klein, Patrick Halke, Julian Smart
|
||||
// Modified by:
|
||||
// Created: 01/02/97
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart and Markus Holzem
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "wx/setup.h"
|
||||
|
||||
#if USE_ODBC
|
||||
|
||||
#ifndef __ODBCH__
|
||||
#define __ODBCH__
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <sqlext.h>
|
||||
|
||||
#include "wx/defs.h"
|
||||
#include "wx/list.h"
|
||||
#include "wx/string.h"
|
||||
|
||||
typedef RETCODE wxRETCODE;
|
||||
|
||||
// Recordset open types
|
||||
#define wxOPEN_TYPE_DYNASET 1
|
||||
#define wxOPEN_TYPE_SNAPSHOT 2
|
||||
#define wxOPEN_TYPE_FORWARD_ONLY 3
|
||||
|
||||
// Recordset open options
|
||||
#define wxOPTION_DEFAULT 1
|
||||
#define wxOPTION_APPEND_ONLY 2
|
||||
#define wxOPTION_READ_ONLY 3
|
||||
|
||||
// Data types
|
||||
class WXDLLEXPORT wxRecordSet;
|
||||
|
||||
class WXDLLEXPORT wxDatabase: public wxObject
|
||||
{
|
||||
// JACS
|
||||
DECLARE_DYNAMIC_CLASS(wxDatabase)
|
||||
private:
|
||||
protected:
|
||||
static HENV hEnv;
|
||||
static int refCount;
|
||||
|
||||
HDBC hDBC;
|
||||
char* username;
|
||||
char* password;
|
||||
char* datasource;
|
||||
char* dbname;
|
||||
char* connectstring;
|
||||
bool isOpen;
|
||||
|
||||
// error-handling variables
|
||||
wxRETCODE retcode;
|
||||
char sqlstate[SQL_SQLSTATE_SIZE+1]; // error class and subclass
|
||||
char errmsg[SQL_MAX_MESSAGE_LENGTH]; // error message
|
||||
long nat_err; // error number by ODBC driver
|
||||
bool err_occured;
|
||||
|
||||
wxList recordSets; // Record sets: Added by JACS
|
||||
|
||||
public:
|
||||
wxDatabase(void);
|
||||
~wxDatabase(void);
|
||||
|
||||
bool Open(char *, bool exclusive =FALSE, bool readOnly =TRUE, char *username ="ODBC", char *password ="");
|
||||
bool Close(void);
|
||||
|
||||
// Cleanup operations, added by JACS
|
||||
void DeleteRecordSets(void); // Called when the database is deleted
|
||||
void ResetRecordSets(void); // Required if the database is closed
|
||||
inline wxList& GetRecordSets(void) { return recordSets; }
|
||||
|
||||
inline char *GetUsername(void) { return username; }
|
||||
inline char *GetPassword(void) { return password; }
|
||||
inline char *GetDataSource(void) { return datasource; }
|
||||
inline bool IsOpen(void) { return isOpen; }
|
||||
inline wxRETCODE GetErrorCode(void) { return retcode; }
|
||||
inline HDBC GetHDBC(void) { return hDBC; }
|
||||
inline HENV GetHENV(void) { return hEnv; }
|
||||
|
||||
void SetPassword(char *s);
|
||||
void SetUsername(char *s);
|
||||
void SetDataSource(char *s);
|
||||
|
||||
// Database attributes
|
||||
char *GetDatabaseName(void);
|
||||
bool CanUpdate(void);
|
||||
bool CanTransact(void);
|
||||
bool InWaitForDataSource(void);
|
||||
void SetLoginTimeout(long seconds);
|
||||
void SetQueryTimeout(long seconds);
|
||||
void SetSynchronousMode(bool synchronous);
|
||||
|
||||
// Database operations
|
||||
bool BeginTrans(void);
|
||||
bool CommitTrans(void);
|
||||
bool RollbackTrans(void);
|
||||
void Cancel(void);
|
||||
|
||||
// Error handling
|
||||
bool ErrorOccured(void);
|
||||
char* GetErrorMessage(void);
|
||||
long GetErrorNumber(void);
|
||||
char* GetErrorClass(void);
|
||||
inline void ErrorSnapshot(HSTMT =SQL_NULL_HSTMT);
|
||||
|
||||
// Overridables
|
||||
virtual void OnSetOptions(wxRecordSet *recordSet);
|
||||
virtual void OnWaitForDataSource(bool stillExecuting);
|
||||
|
||||
bool GetInfo(long infoType, long *buf);
|
||||
bool GetInfo(long infoType, char *buf, int bufSize = -1);
|
||||
|
||||
// implementation = TRUE means get the DLL version.
|
||||
// Otherwise, returns header file version.
|
||||
wxString GetODBCVersionString(bool implementation = TRUE);
|
||||
float GetODBCVersionFloat(bool implementation = TRUE);
|
||||
};
|
||||
|
||||
// Represents a data row
|
||||
class WXDLLEXPORT wxQueryField: public wxObject
|
||||
{
|
||||
// JACS
|
||||
DECLARE_DYNAMIC_CLASS(wxQueryField)
|
||||
private:
|
||||
void *data;
|
||||
short type;
|
||||
long size;
|
||||
bool dirty;
|
||||
|
||||
bool AllocData(void);
|
||||
|
||||
public:
|
||||
wxQueryField(void);
|
||||
~wxQueryField(void);
|
||||
|
||||
bool SetData(void*, long);
|
||||
void SetDirty(bool =TRUE);
|
||||
void ClearData(void);
|
||||
void SetType(short);
|
||||
void SetSize(long);
|
||||
|
||||
void* GetData(void);
|
||||
short GetType(void);
|
||||
long GetSize(void);
|
||||
|
||||
bool IsDirty(void);
|
||||
};
|
||||
|
||||
// Represents a column description
|
||||
class WXDLLEXPORT wxQueryCol: public wxObject
|
||||
{
|
||||
// JACS
|
||||
DECLARE_DYNAMIC_CLASS(wxQueryCol)
|
||||
private:
|
||||
short type;
|
||||
char *name;
|
||||
bool nullable;
|
||||
long varsize;
|
||||
void* var;
|
||||
|
||||
public:
|
||||
wxList fields;
|
||||
|
||||
wxQueryCol(void);
|
||||
~wxQueryCol(void);
|
||||
|
||||
void* BindVar(void*, long);
|
||||
void FillVar(int);
|
||||
void AppendField(void*, long);
|
||||
bool SetData(int, void*, long);
|
||||
void SetName(char*);
|
||||
void SetNullable(bool);
|
||||
void SetFieldDirty(int, bool =TRUE);
|
||||
void SetType(short);
|
||||
|
||||
char* GetName(void);
|
||||
short GetType(void);
|
||||
bool IsNullable(void);
|
||||
void* GetData(int);
|
||||
long GetSize(int);
|
||||
|
||||
bool IsFieldDirty(int);
|
||||
};
|
||||
|
||||
class WXDLLEXPORT wxRecordSet: public wxObject
|
||||
{
|
||||
// JACS
|
||||
DECLARE_DYNAMIC_CLASS(wxRecordSet)
|
||||
private:
|
||||
int cursor;
|
||||
int type;
|
||||
int options;
|
||||
|
||||
protected:
|
||||
HSTMT hStmt;
|
||||
int nFields;
|
||||
int nParams;
|
||||
int nRecords;
|
||||
short nCols;
|
||||
char *recordFilter;
|
||||
char *sortString;
|
||||
char *defaultSQL;
|
||||
char* tablename;
|
||||
wxDatabase *parentdb;
|
||||
wxRETCODE retcode;
|
||||
wxList cols;
|
||||
wxList fetchbuf;
|
||||
|
||||
void FillVars(int);
|
||||
|
||||
public:
|
||||
// JACS gave parent a default value for benefit of IMPLEMENT_DYNAMIC_CLASS
|
||||
wxRecordSet(wxDatabase *parent = NULL, int =wxOPEN_TYPE_DYNASET, int =wxOPTION_DEFAULT);
|
||||
~wxRecordSet(void);
|
||||
|
||||
// My own, lower-level functions.
|
||||
bool BeginQuery(int openType, char *sql = NULL, int options = wxOPTION_DEFAULT);
|
||||
bool EndQuery(void);
|
||||
bool Query(char* columns, char* table =NULL, char *filter =NULL);
|
||||
|
||||
// Attributes
|
||||
inline int GetNumberFields(void) { return nFields; }
|
||||
inline int GetNumberParams(void) { return nParams; }
|
||||
long GetNumberRecords(void);
|
||||
long GetNumberCols(void);
|
||||
inline char *GetFilter(void) { return recordFilter; }
|
||||
inline char *GetSortString(void) { return sortString; }
|
||||
inline wxDatabase *GetDatabase(void) { return parentdb; }
|
||||
inline wxRETCODE GetErrorCode(void) { return retcode; }
|
||||
bool CanAppend(void);
|
||||
bool CanRestart(void);
|
||||
bool CanScroll(void);
|
||||
bool CanTransact(void);
|
||||
bool CanUpdate(void);
|
||||
long GetCurrentRecord(void);
|
||||
bool RecordCountFinal(void);
|
||||
bool GetResultSet(void);
|
||||
bool ExecuteSQL(char*);
|
||||
bool GetTables(void);
|
||||
bool GetColumns(char* =NULL);
|
||||
bool GetPrimaryKeys(char* =NULL);
|
||||
bool GetForeignKeys(char* , char * );
|
||||
char *GetTableName(void);
|
||||
void SetTableName(char*);
|
||||
char *GetSQL(void);
|
||||
bool IsOpen(void);
|
||||
bool IsBOF(void);
|
||||
bool IsEOF(void);
|
||||
bool IsDeleted(void);
|
||||
|
||||
bool GetFieldData(int colPos, int dataType, void *dataPtr);
|
||||
bool GetFieldData(const char*, int dataType, void *dataPtr);
|
||||
void* GetFieldDataPtr(int, int);
|
||||
void* GetFieldDataPtr(const char*, int);
|
||||
char* GetColName(int);
|
||||
short GetColType(int);
|
||||
short GetColType(const char*);
|
||||
void* BindVar(int, void*, long);
|
||||
void* BindVar(const char*, void*, long);
|
||||
|
||||
void SetType(int);
|
||||
int GetType(void);
|
||||
void SetOptions(int);
|
||||
int GetOptions(void);
|
||||
|
||||
// Update operations
|
||||
void AddNew(void);
|
||||
bool Delete(void);
|
||||
void Edit(void);
|
||||
bool Update(void);
|
||||
|
||||
// Record navigation
|
||||
virtual bool Move(long rows);
|
||||
virtual bool MoveFirst(void);
|
||||
virtual bool MoveLast(void);
|
||||
virtual bool MoveNext(void);
|
||||
virtual bool MovePrev(void);
|
||||
virtual bool GoTo(long);
|
||||
|
||||
// Others
|
||||
bool GetDataSources(void);
|
||||
|
||||
// Associate a column name/position with a data location
|
||||
// bool BindColumn(int colPos, int dataType, void *dataPtr);
|
||||
|
||||
void Cancel(void);
|
||||
bool IsFieldDirty(int);
|
||||
bool IsFieldDirty(const char*);
|
||||
bool IsFieldNull(int);
|
||||
bool IsFieldNull(const char*);
|
||||
bool IsColNullable(int);
|
||||
bool IsColNullable(const char*);
|
||||
virtual bool Requery(void);
|
||||
virtual void SetFieldDirty(int, bool dirty = TRUE);
|
||||
virtual void SetFieldDirty(const char*, bool dirty = TRUE);
|
||||
void SetFieldNull(void *p, bool isNull = TRUE);
|
||||
|
||||
// Overridables
|
||||
virtual char *GetDefaultConnect(void);
|
||||
virtual char *GetDefaultSQL(void);
|
||||
|
||||
// Internal
|
||||
|
||||
// Build SQL query from column specification
|
||||
bool ConstructDefaultSQL(void);
|
||||
void SetDefaultSQL(char *s);
|
||||
bool ReleaseHandle(void); // Added JACS
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif // USE_ODBC
|
Reference in New Issue
Block a user