]> git.saurik.com Git - wxWidgets.git/blob - samples/db/dbtest.h
Added ODBC database classes and sample from RemStar (sample needs work for wxWin 2)
[wxWidgets.git] / samples / db / dbtest.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: dbtest.h
3 // Purpose: wxWindows database demo app
4 // Author: George Tasker
5 // Modified by:
6 // Created: 1998
7 // RCS-ID: $Id$
8 // Copyright: (c) 1998 Remstar International, Inc.
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
11
12 #pragma interface "dbtest.h"
13
14 #include <wx/string.h>
15 #include <wx/dbtable.h>
16
17 enum DialogModes {mView,mCreate,mEdit,mSearch};
18
19 // ID for the menu quit command
20 #define FILE_CREATE 100
21 #define FILE_EXIT 199
22 #define EDIT_PARAMETERS 200
23 #define ABOUT_DEMO 300
24
25
26 // Name of the table to be created/opened
27 const char CONTACT_TABLE_NAME[] = "CONTACTS";
28
29 // Nuber of columns in the above table
30 const int CONTACT_NO_COLS = 12; // 0-11
31
32 // Global structure for holding ODBC connection information
33 struct DbStuff DbConnectInf;
34
35 enum Language {langENGLISH, langFRENCH, langGERMAN, langSPANISH, langOTHER};
36
37 // Forward class declarations
38 class CeditorDlg;
39 class CparameterDlg;
40
41 const char paramFilename[] = "database.cfg";
42
43
44 /*
45 * This class contains the actual data members that are used for transferring
46 * data back and forth from the database to the program.
47 *
48 * NOTE: The object described in this class is just for example purposes, and has no
49 * real meaning other than to show each type of field being used by the database
50 */
51 class CstructContact : public wxObject
52 {
53 public:
54 char Name[ 50+1 ]; // Contact's name
55 char Addr1[ 50+1 ];
56 char Addr2[ 50+1 ];
57 char City[ 25+1 ];
58 char State[ 25+1 ];
59 char PostalCode[ 15+1 ];
60 char Country[ 20+1 ];
61 TIMESTAMP_STRUCT JoinDate; // Date on which this person joined the wxWindows project
62 Language NativeLanguage; // Enumerated type indicating person's native language
63 bool IsDeveloper; // Is this person a developer for wxWindows, or just a subscriber
64 int Contributions; // Something to show off an integer field
65 ULONG LinesOfCode; // Something to show off a 'long' field
66 }; // CstructContact
67
68
69 //
70 // NOTE: Ccontact inherits wxTable, which gives access to all the database functionality
71 //
72 class Ccontact : public wxTable, public CstructContact
73 {
74 private:
75 bool freeDbConn;
76 void SetupColumns();
77
78 public:
79 wxString whereStr;
80 wxString qryWhereStr; // Where string returned from the query dialog
81
82 Ccontact(wxDB *pwxDB=NULL);
83 ~Ccontact();
84
85 void Initialize();
86 bool CreateIndexes(void);
87 bool FetchByName(char *name);
88
89 }; // Ccontact class definition
90
91
92 typedef struct Cparameters
93 {
94 // The length of these strings were arbitrarily picked, and are
95 // dependent on the OS and database engine you will be using.
96 char ODBCSource[100+1];
97 char UserName[25+1];
98 char Password[25+1];
99 } Cparameters;
100
101
102 // Define a new application type
103 class DatabaseDemoApp: public wxApp
104 {
105 public:
106 Cparameters params;
107 wxFrame *OnInit(void);
108 }; // DatabaseDemoApp
109
110 DECLARE_APP(DatabaseDemoApp)
111
112 // Define a new frame type
113 class DatabaseDemoFrame: public wxFrame
114 {
115 private:
116 CeditorDlg *pEditorDlg;
117 CparameterDlg *pParamDlg;
118
119 public:
120 DatabaseDemoFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
121
122 void OnMenuCommand(int id);
123 bool OnClose(void);
124
125 void CreateDataTable();
126 void BuildEditorDialog();
127 void BuildParameterDialog(wxWindow *parent);
128 }; // DatabaseDemoFrame
129
130
131
132 // *************************** CeditorDlg ***************************
133
134 class CeditorDlg : public wxPanel
135 {
136 private:
137 bool widgetPtrsSet;
138 wxString saveName;
139
140 // Pointers to all widgets on the dialog
141 wxButton *pCreateBtn, *pEditBtn, *pDeleteBtn, *pCopyBtn, *pSaveBtn, *pCancelBtn;
142 wxButton *pPrevBtn, *pNextBtn, *pQueryBtn, *pResetBtn, *pDoneBtn, *pHelpBtn;
143 wxButton *pNameListBtn;
144 wxText *pNameTxt, *pAddress1Txt, *pAddress2Txt,*pCityTxt, *pStateTxt, *pCountryTxt,*pPostalCodeTxt;
145 wxMessage *pNameMsg, *pAddress1Msg, *pAddress2Msg,*pCityMsg, *pStateMsg, *pCountryMsg,*pPostalCodeMsg;
146 wxText *pJoinDateTxt,*pContribTxt, *pLinesTxt;
147 wxMessage *pJoinDateMsg,*pContribMsg, *pLinesMsg;
148 wxRadioBox *pDeveloperRadio;
149 wxChoice *pNativeLangChoice;
150 wxMessage *pNativeLangMsg;
151
152 public:
153 enum DialogModes mode;
154 Ccontact *Contact; // this is the table object that will be being manipulated
155
156 CeditorDlg(wxWindow *parent);
157 bool OnClose(void);
158 void OnCommand(wxWindow& win, wxCommandEvent& event);
159 void OnActivate(bool) {}; // necessary for hot keys
160
161 void FieldsEditable();
162 void SetMode(enum DialogModes m);
163 bool PutData();
164 bool GetData();
165 bool Save();
166 bool GetNextRec();
167 bool GetPrevRec();
168 bool GetRec(char *whereStr);
169 }; // CeditorDlg
170
171
172 // *************************** CparameterDlg ***************************
173
174 class CparameterDlg : public wxDialogBox
175 {
176 private:
177 bool widgetPtrsSet;
178 enum DialogModes mode;
179 bool saved;
180 Cparameters savedParamSettings;
181
182 // Pointers to all widgets on the dialog
183 wxMessage *pParamODBCSourceMsg;
184 wxListBox *pParamODBCSourceList;
185 wxMessage *pParamUserNameMsg, *pParamPasswordMsg;
186 wxText *pParamUserNameTxt, *pParamPasswordTxt;
187 wxButton *pParamSaveBtn, *pParamCancelBtn;
188
189 public:
190 CparameterDlg(wxWindow *parent);
191 bool OnClose(void);
192 void OnCommand(wxWindow& win, wxCommandEvent& event);
193 void OnActivate(bool) {}; // necessary for hot keys
194
195 bool PutData();
196 bool GetData();
197 bool Save();
198 void FillDataSourceList();
199
200 }; // CparameterDlg
201
202
203 // *************************** CqueryDlg ***************************
204
205
206 // QUERY DIALOG
207 enum qryOp
208 {
209 qryOpEQ,
210 qryOpLT,
211 qryOpGT,
212 qryOpLE,
213 qryOpGE,
214 qryOpBEGINS,
215 qryOpCONTAINS,
216 qryOpLIKE,
217 qryOpBETWEEN
218 };
219
220
221 // Query strings
222 char * const langQRY_EQ = "column = column | value";
223 char * const langQRY_LT = "column < column | value";
224 char * const langQRY_GT = "column > column | value";
225 char * const langQRY_LE = "column <= column | value";
226 char * const langQRY_GE = "column >= column | value";
227 char * const langQRY_BEGINS = "columns that BEGIN with the string entered";
228 char * const langQRY_CONTAINS = "columns that CONTAIN the string entered";
229 char * const langQRY_LIKE = "% matches 0 or more of any char; _ matches 1 char";
230 char * const langQRY_BETWEEN = "column BETWEEN value AND value";
231
232
233 class CqueryDlg : public wxDialogBox
234 {
235 private:
236 CcolInf *colInf; // Column inf. returned by db->GetColumns()
237 wxTable *dbTable;
238 char *masterTableName;
239 char *pWhere; // A pointer to the storage for the resulting where clause
240 wxDB *pDB;
241
242 public:
243 bool widgetPtrsSet;
244
245 // Widget pointers
246 wxMessage *pQueryCol1Msg;
247 wxChoice *pQueryCol1Choice;
248 wxMessage *pQueryNotMsg;
249 wxCheckBox *pQueryNotCheck;
250 wxMessage *pQueryOperatorMsg;
251 wxChoice *pQueryOperatorChoice;
252 wxMessage *pQueryCol2Msg;
253 wxChoice *pQueryCol2Choice;
254 wxMessage *pQueryValue1Msg;
255 wxText *pQueryValue1Txt;
256 wxMessage *pQueryValue2Msg;
257 wxText *pQueryValue2Txt;
258 wxMessage *pQuerySqlWhereMsg;
259 wxMultiText *pQuerySqlWhereMtxt;
260 wxButton *pQueryAddBtn;
261 wxButton *pQueryAndBtn;
262 wxButton *pQueryOrBtn;
263 wxButton *pQueryLParenBtn;
264 wxButton *pQueryRParenBtn;
265 wxButton *pQueryDoneBtn;
266 wxButton *pQueryClearBtn;
267 wxButton *pQueryCountBtn;
268 wxButton *pQueryHelpBtn;
269 wxGroupBox *pQueryHintGrp;
270 wxMessage *pQueryHintMsg;
271
272 wxText *pFocusTxt;
273
274 CqueryDlg(wxWindow *parent, wxDB *pDb, char *tblName[], char *pWhereArg);
275
276 void OnCommand(wxWindow& win, wxCommandEvent& event);
277 bool OnClose();
278 void OnActivate(bool) {}; // necessary for hot keys
279
280 // bool SetWidgetPtrs();
281 void AppendToWhere(char *s);
282 void ProcessAddBtn();
283 void ProcessCountBtn();
284 bool ValidateWhereClause();
285
286 }; // CqueryDlg