X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/049977d042858eaef70b0720ab101b1b40c5e308..302e251b4df575dc60eb5bfafc931652dad165ec:/samples/db/dbtest.h diff --git a/samples/db/dbtest.h b/samples/db/dbtest.h index 59d56bbdf0..91ffdf60f0 100644 --- a/samples/db/dbtest.h +++ b/samples/db/dbtest.h @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // Name: dbtest.h -// Purpose: wxWindows database demo app +// Purpose: wxWidgets database demo app // Author: George Tasker // Modified by: // Created: 1998 @@ -9,23 +9,26 @@ // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "dbtest.h" #endif -#include -#include -#include +#include "wx/string.h" +#include "wx/dbtable.h" enum DialogModes {mView,mCreate,mEdit,mSearch}; // ID for the menu quit command -#define FILE_CREATE 100 +#define FILE_CREATE_ID 100 #define FILE_RECREATE_TABLE 110 #define FILE_RECREATE_INDEXES 120 + +#if wxUSE_GRID +#define FILE_DBGRID_TABLE 130 +#endif #define FILE_EXIT 199 #define EDIT_PARAMETERS 200 -#define ABOUT_DEMO 300 +#define HELP_ABOUT 300 // this seems to be missing, Robert Roebling (?) #ifndef MAX_PATH @@ -37,12 +40,18 @@ enum DialogModes {mView,mCreate,mEdit,mSearch}; #endif // Name of the table to be created/opened -const wxChar CONTACT_TABLE_NAME[] = "contacts"; +const wxChar CONTACT_TABLE_NAME[] = wxT("contacts"); + +#define wxODBC_BLOB_SUPPORT // Number of columns in the CONTACT table -const int CONTACT_NO_COLS = 12; // 0-11 +#ifdef wxODBC_BLOB_SUPPORT + const int CONTACT_NO_COLS = 13; // 0-12 +#else + const int CONTACT_NO_COLS = 12; // 0-11 +#endif -const wxChar PARAM_FILENAME[] = "dbtest.cfg"; +const wxChar PARAM_FILENAME[] = wxT("dbtest.cfg"); enum Language {langENGLISH, langFRENCH, langGERMAN, langSPANISH, langOTHER}; @@ -51,6 +60,12 @@ enum Language {langENGLISH, langFRENCH, langGERMAN, langSPANISH, langOTHER}; class CeditorDlg; class CparameterDlg; + +// Used for displaying many of the database capabilites +// and usage statistics on a database connection +void DisplayDbDiagnostics(wxDb *pDb); + + // // This class contains the actual data members that are used for transferring // data back and forth from the database to the program. @@ -68,9 +83,10 @@ class CstructContact : public wxObject wxChar State[25+1]; wxChar PostalCode[15+1]; wxChar Country[20+1]; - TIMESTAMP_STRUCT JoinDate; // Date on which this person joined the wxWindows project + TIMESTAMP_STRUCT JoinDate; // Date on which this person joined the wxWidgets project Language NativeLanguage; // Enumerated type indicating person's native language - bool IsDeveloper; // Is this person a developer for wxWindows, or just a subscriber + wxChar Picture[50000]; + bool IsDeveloper; // Is this person a developer for wxWidgets, or just a subscriber UCHAR Contributions; // Something to show off an integer field ULONG LinesOfCode; // Something to show off a 'long' field }; // CstructContact @@ -114,7 +130,7 @@ class Ccontact : public wxDbTable, public CstructContact // Contains all the index definitions and calls to wxDbTable::CreateIndex() // required to create all the indexes we wish to define for this table. - bool CreateIndexes(void); + bool CreateIndexes(bool recreate); // Since we do not wish to have duplicate code blocks all over our program // for a common query/fetch that we will need to do in many places, we @@ -142,6 +158,7 @@ class DatabaseDemoFrame: public wxFrame public: DatabaseDemoFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& sz); + ~DatabaseDemoFrame(); void OnCloseWindow(wxCloseEvent& event); void OnCreate(wxCommandEvent& event); @@ -150,7 +167,10 @@ class DatabaseDemoFrame: public wxFrame void OnExit(wxCommandEvent& event); void OnEditParameters(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); - +#if wxUSE_GRID + void OnDbGridTable( wxCommandEvent& ); +#endif + void CreateDataTable(bool recreate); void BuildEditorDialog(); void BuildParameterDialog(wxWindow *parent); @@ -158,6 +178,25 @@ DECLARE_EVENT_TABLE() }; // DatabaseDemoFrame +#if wxUSE_GRID + +// *************************** DBGridFrame *************************** + +class DbGridFrame : public wxFrame +{ +public: + bool initialized; + + DbGridFrame(wxWindow *parent); + + void OnCloseWindow(wxCloseEvent& event); + bool Initialize(); + + DECLARE_EVENT_TABLE() +}; + +#endif + // Define a new application type class DatabaseDemoApp: public wxApp { @@ -203,6 +242,11 @@ class DatabaseDemoApp: public wxApp bool WriteParamFile(Cparameters ¶ms); void CreateDataTable(bool recreate); + + // Pointer to the wxDbTable instance that is used to manipulate + // the data in memory and in the database + Ccontact *Contact; + }; // DatabaseDemoApp @@ -231,6 +275,7 @@ class CeditorDlg : public wxPanel wxButton *pCreateBtn, *pEditBtn, *pDeleteBtn, *pCopyBtn, *pSaveBtn, *pCancelBtn; wxButton *pPrevBtn, *pNextBtn, *pQueryBtn, *pResetBtn, *pDoneBtn, *pHelpBtn; wxButton *pNameListBtn; + wxButton *pCatalogBtn, *pDataTypesBtn, *pDbDiagsBtn; wxTextCtrl *pNameTxt, *pAddress1Txt, *pAddress2Txt,*pCityTxt, *pStateTxt, *pCountryTxt,*pPostalCodeTxt; wxStaticText *pNameMsg, *pAddress1Msg, *pAddress2Msg,*pCityMsg, *pStateMsg, *pCountryMsg,*pPostalCodeMsg; wxTextCtrl *pJoinDateTxt,*pContribTxt, *pLinesTxt; @@ -247,10 +292,6 @@ class CeditorDlg : public wxPanel enum DialogModes mode; - // Pointer to the wxDbTable instance that is used to manipulate - // the data in memory and in the database - Ccontact *Contact; - CeditorDlg(wxWindow *parent); void OnCloseWindow(wxCloseEvent& event); @@ -330,6 +371,9 @@ DECLARE_EVENT_TABLE() #define EDITOR_DIALOG_DEVELOPER 236 #define EDITOR_DIALOG_JOIN_MSG 237 #define EDITOR_DIALOG_JOIN_TEXT 238 +#define EDITOR_DIALOG_CATALOG 240 +#define EDITOR_DIALOG_DATATYPES 250 +#define EDITOR_DIALOG_DB_DIAGS 260 // *************************** CparameterDlg *************************** @@ -414,15 +458,15 @@ enum qryOp // Query strings -wxChar * const langQRY_EQ = "column = column | value"; -wxChar * const langQRY_LT = "column < column | value"; -wxChar * const langQRY_GT = "column > column | value"; -wxChar * const langQRY_LE = "column <= column | value"; -wxChar * const langQRY_GE = "column >= column | value"; -wxChar * const langQRY_BEGINS = "columns that BEGIN with the string entered"; -wxChar * const langQRY_CONTAINS = "columns that CONTAIN the string entered"; -wxChar * const langQRY_LIKE = "% matches 0 or more of any char; _ matches 1 char"; -wxChar * const langQRY_BETWEEN = "column BETWEEN value AND value"; +wxChar * const langQRY_EQ = wxT("column = column | value"); +wxChar * const langQRY_LT = wxT("column < column | value"); +wxChar * const langQRY_GT = wxT("column > column | value"); +wxChar * const langQRY_LE = wxT("column <= column | value"); +wxChar * const langQRY_GE = wxT("column >= column | value"); +wxChar * const langQRY_BEGINS = wxT("columns that BEGIN with the string entered"); +wxChar * const langQRY_CONTAINS = wxT("columns that CONTAIN the string entered"); +wxChar * const langQRY_LIKE = wxT("% matches 0 or more of any char; _ matches 1 char"); +wxChar * const langQRY_BETWEEN = wxT("column BETWEEN value AND value"); class CqueryDlg : public wxDialog @@ -431,7 +475,7 @@ class CqueryDlg : public wxDialog wxDbColInf *colInf; // Column inf. returned by db->GetColumns() wxDbTable *dbTable; // generic wxDbTable object for attaching to the table to query wxChar *masterTableName; // Name of the table that 'dbTable' will be associated with - wxChar *pWhere; // A pointer to the storage for the resulting where clause + wxString pWhere; // A pointer to the storage for the resulting where clause wxDb *pDB; public: @@ -470,7 +514,7 @@ class CqueryDlg : public wxDialog wxTextCtrl *pFocusTxt; - CqueryDlg(wxWindow *parent, wxDb *pDb, wxChar *tblName[], wxChar *pWhereArg); + CqueryDlg(wxWindow *parent, wxDb *pDb, wxChar *tblName[], const wxString &pWhereArg); ~CqueryDlg(); void OnButton( wxCommandEvent &event ); @@ -514,3 +558,95 @@ DECLARE_EVENT_TABLE() #define QUERY_DIALOG_HINT_GROUP 323 #define QUERY_DIALOG_HINT_MSG 324 +wxChar * const langNO = wxT("No"); +wxChar * const langYES = wxT("Yes"); +wxChar * const langDBINF_DB_NAME = wxT("Database Name = "); +wxChar * const langDBINF_DB_VER = wxT("Database Version = "); +wxChar * const langDBINF_DRIVER_NAME = wxT("Driver Name = "); +wxChar * const langDBINF_DRIVER_ODBC_VER = wxT("Driver ODBC Version = "); +wxChar * const langDBINF_DRIVER_MGR_ODBC_VER = wxT("Driver Manager ODBC Version = "); +wxChar * const langDBINF_DRIVER_VER = wxT("Driver Version = "); +wxChar * const langDBINF_SERVER_NAME = wxT("Server Name = "); +wxChar * const langDBINF_FILENAME = wxT("Filename = "); +wxChar * const langDBINF_OUTER_JOINS = wxT("Outer Joins = "); +wxChar * const langDBINF_STORED_PROC = wxT("Stored Procedures = "); +wxChar * const langDBINF_MAX_HDBC = wxT("Max # of Db connections = "); +wxChar * const langDBINF_MAX_HSTMT = wxT("Max # of cursors (per db connection) = "); +wxChar * const langDBINF_UNLIMITED = wxT("Unlimited or Unknown"); +wxChar * const langDBINF_API_LVL = wxT("ODBC API conformance level = "); +wxChar * const langDBINF_CLI_LVL = wxT("Client (SAG) conformance level = "); +wxChar * const langDBINF_SQL_LVL = wxT("SQL conformance level = "); +wxChar * const langDBINF_COMMIT_BEHAVIOR = wxT("Commit Behavior = "); +wxChar * const langDBINF_ROLLBACK_BEHAVIOR = wxT("Rollback Behavior = "); +wxChar * const langDBINF_SUPP_NOT_NULL = wxT("Support NOT NULL clause = "); +wxChar * const langDBINF_SUPP_IEF = wxT("Support IEF = "); +wxChar * const langDBINF_TXN_ISOLATION = wxT("Transaction Isolation Level (default) = "); +wxChar * const langDBINF_TXN_ISOLATION_CURR = wxT("Transaction Isolation Level (current) = "); +wxChar * const langDBINF_TXN_ISOLATION_OPTS = wxT("Transaction Isolation Options Available = "); +wxChar * const langDBINF_FETCH_DIRS = wxT("Fetch Directions = "); +wxChar * const langDBINF_LOCK_TYPES = wxT("Lock Types (SQLSetPos) = "); +wxChar * const langDBINF_POS_OPERS = wxT("Position Operations (SQLSetPos) = "); +wxChar * const langDBINF_POS_STMTS = wxT("Position Statements = "); +wxChar * const langDBINF_SCROLL_CONCURR = wxT("Concurrency Options (scrollable cursors) = "); +wxChar * const langDBINF_SCROLL_OPTS = wxT("Scroll Options (scrollable cursors) = "); +wxChar * const langDBINF_STATIC_SENS = wxT("Static Sensitivity = "); +wxChar * const langDBINF_TXN_CAPABLE = wxT("Transaction Support = "); +wxChar * const langDBINF_LOGIN_TIMEOUT = wxT("Login Timeout = "); +wxChar * const langDBINF_NONE = wxT("None"); +wxChar * const langDBINF_LEVEL1 = wxT("Level 1"); +wxChar * const langDBINF_LEVEL2 = wxT("Level 2"); +wxChar * const langDBINF_NOT_COMPLIANT = wxT("Not Compliant"); +wxChar * const langDBINF_COMPLIANT = wxT("Compliant"); +wxChar * const langDBINF_MIN_GRAMMAR = wxT("Minimum Grammer"); +wxChar * const langDBINF_CORE_GRAMMAR = wxT("Core Grammer"); +wxChar * const langDBINF_EXT_GRAMMAR = wxT("Extended Grammer"); +wxChar * const langDBINF_DELETE_CURSORS = wxT("Delete cursors"); +wxChar * const langDBINF_CLOSE_CURSORS = wxT("Close cursors"); +wxChar * const langDBINF_PRESERVE_CURSORS = wxT("Preserve cursors"); +wxChar * const langDBINF_READ_UNCOMMITTED = wxT("Read Uncommitted"); +wxChar * const langDBINF_READ_COMMITTED = wxT("Read Committed"); +wxChar * const langDBINF_REPEATABLE_READ = wxT("Repeatable Read"); +wxChar * const langDBINF_SERIALIZABLE = wxT("Serializable"); +wxChar * const langDBINF_VERSIONING = wxT("Versioning"); +wxChar * const langDBINF_NEXT = wxT("Next"); +wxChar * const langDBINF_PREV = wxT("Prev"); +wxChar * const langDBINF_FIRST = wxT("First"); +wxChar * const langDBINF_LAST = wxT("Last"); +wxChar * const langDBINF_ABSOLUTE = wxT("Absolute"); +wxChar * const langDBINF_RELATIVE = wxT("Relative"); +wxChar * const langDBINF_RESUME = wxT("Resume"); +wxChar * const langDBINF_BOOKMARK = wxT("Bookmark"); +wxChar * const langDBINF_NO_CHANGE = wxT("No Change"); +wxChar * const langDBINF_EXCLUSIVE = wxT("Exclusive"); +wxChar * const langDBINF_UNLOCK = wxT("Unlock"); +wxChar * const langDBINF_POSITION = wxT("Position"); +wxChar * const langDBINF_REFRESH = wxT("Refresh"); +wxChar * const langDBINF_UPD = wxT("Upd"); +wxChar * const langDBINF_DEL = wxT("Del"); +wxChar * const langDBINF_ADD = wxT("Add"); +wxChar * const langDBINF_POS_DEL = wxT("Pos Delete"); +wxChar * const langDBINF_POS_UPD = wxT("Pos Update"); +wxChar * const langDBINF_SELECT_FOR_UPD = wxT("Select For Update"); +wxChar * const langDBINF_READ_ONLY = wxT("Read Only"); +wxChar * const langDBINF_LOCK = wxT("Lock"); +wxChar * const langDBINF_OPT_ROWVER = wxT("Opt. Rowver"); +wxChar * const langDBINF_OPT_VALUES = wxT("Opt. Values"); +wxChar * const langDBINF_FWD_ONLY = wxT("Fwd Only"); +wxChar * const langDBINF_STATIC = wxT("Static"); +wxChar * const langDBINF_KEYSET_DRIVEN = wxT("Keyset Driven"); +wxChar * const langDBINF_DYNAMIC = wxT("Dynamic"); +wxChar * const langDBINF_MIXED = wxT("Mixed"); +wxChar * const langDBINF_ADDITIONS = wxT("Additions"); +wxChar * const langDBINF_DELETIONS = wxT("Deletions"); +wxChar * const langDBINF_UPDATES = wxT("Updates"); +wxChar * const langDBINF_DML_ONLY = wxT("DML Only"); +wxChar * const langDBINF_DDL_COMMIT = wxT("DDL Commit"); +wxChar * const langDBINF_DDL_IGNORE = wxT("DDL Ignore"); +wxChar * const langDBINF_DDL_AND_DML = wxT("DDL and DML"); +wxChar * const langDBINF_ORACLE_BANNER = wxT(">>> ORACLE STATISTICS AND TUNING INFORMATION <<<"); +wxChar * const langDBINF_DB_BLOCK_GETS = wxT("DB block gets"); +wxChar * const langDBINF_CONSISTENT_GETS = wxT("Consistent gets"); +wxChar * const langDBINF_PHYSICAL_READS = wxT("Physical reads"); +wxChar * const langDBINF_CACHE_HIT_RATIO = wxT("Cache hit ratio"); +wxChar * const langDBINF_TABLESPACE_IO = wxT("TABLESPACE I/O LEVELS"); +wxChar * const langDBINF_PHYSICAL_WRITES = wxT("Physical writes");