home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / samples / db / dbtest.h < prev    next >
C/C++ Source or Header  |  2002-09-01  |  28KB  |  655 lines

  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: dbtest.h,v 1.24 2002/08/31 22:36:13 GD Exp $
  8. // Copyright:   (c) 1998 Remstar International, Inc.
  9. // Licence:     wxWindows licence
  10. ///////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifdef __GNUG__
  13. #pragma interface "dbtest.h"
  14. #endif
  15.  
  16. #include "wx/string.h"
  17. #include "wx/dbtable.h"
  18.  
  19. enum    DialogModes {mView,mCreate,mEdit,mSearch};
  20.  
  21. // ID for the menu quit command
  22. #define FILE_CREATE           100
  23. #define FILE_RECREATE_TABLE   110
  24. #define FILE_RECREATE_INDEXES 120
  25. #if wxUSE_NEW_GRID
  26. #define FILE_DBGRID_TABLE     130
  27. #endif
  28. #define FILE_EXIT             199
  29. #define EDIT_PARAMETERS       200
  30. #define HELP_ABOUT            300
  31.  
  32. // this seems to be missing, Robert Roebling (?)
  33. #ifndef MAX_PATH
  34.     #if defined(__WXMAC__)
  35.         #define MAX_PATH   260 /* max. length of full pathname */
  36.     #else  /* _MAC */
  37.         #define MAX_PATH   256 /* max. length of full pathname */
  38.     #endif
  39. #endif
  40.  
  41. // Name of the table to be created/opened
  42. const wxChar     CONTACT_TABLE_NAME[]       = "contacts";
  43.  
  44.  
  45. #define wxODBC_BLOB_EXPERIMENT 0
  46.  
  47. // Number of columns in the CONTACT table
  48. #if wxODBC_BLOB_EXPERIMENT > 0
  49. const int        CONTACT_NO_COLS            = 13;        // 0-12
  50. #else
  51. const int        CONTACT_NO_COLS            = 12;        // 0-11
  52. #endif
  53.  
  54. const wxChar     PARAM_FILENAME[]           = "dbtest.cfg";
  55.  
  56.  
  57. enum Language {langENGLISH, langFRENCH, langGERMAN, langSPANISH, langOTHER};
  58.  
  59. // Forward class declarations
  60. class CeditorDlg;
  61. class CparameterDlg;
  62.  
  63.  
  64. // Used for displaying many of the database capabilites
  65. // and usage statistics on a database connection
  66. void DisplayDbDiagnostics(wxDb *pDb);
  67.  
  68.  
  69. //
  70. // This class contains the actual data members that are used for transferring
  71. // data back and forth from the database to the program.  
  72. //
  73. // NOTE: The object described in this class is just for example purposes, and has no
  74. // real meaning other than to show each type of field being used by the database
  75. //
  76. class CstructContact : public wxObject
  77. {
  78.     public:
  79.         wxChar             Name[50+1];          //    Contact's name
  80.         wxChar             Addr1[50+1];
  81.         wxChar             Addr2[50+1];
  82.         wxChar             City[25+1];
  83.         wxChar             State[25+1];
  84.         wxChar             PostalCode[15+1];
  85.         wxChar             Country[20+1];
  86.         TIMESTAMP_STRUCT   JoinDate;            // Date on which this person joined the wxWindows project
  87.         Language           NativeLanguage;      // Enumerated type indicating person's native language
  88. #if wxODBC_BLOB_EXPERIMENT > 0
  89.         wxChar             Picture[50000];
  90. #endif
  91.         bool               IsDeveloper;         // Is this person a developer for wxWindows, or just a subscriber
  92.         UCHAR              Contributions;       // Something to show off an integer field
  93.         ULONG              LinesOfCode;         // Something to show off a 'long' field
  94. };  // CstructContact
  95.  
  96.  
  97. //
  98. // The Ccontact class derives from wxDbTable, so we have access to all
  99. // of the database table functions and the local memory variables that
  100. // the database classes will store the data into (and read the data from)
  101. // all combined in this one class.
  102. //
  103. class Ccontact : public wxDbTable, public CstructContact
  104.     private:
  105.         // Used to keep track of whether this class had a wxDb instance
  106.         // passed in to it or not.  If an existing wxDb instance was not 
  107.         // passed in at Ccontact creation time, then when the Ccontact
  108.         // instance is deleted, the connection will be freed as Ccontact
  109.         // created its own connection when it was created.
  110.         bool                 freeDbConn;
  111.  
  112.         // Calls wxDbTable::SetColDefs() once for each column that is
  113.         // to be associated with some member variable for use with
  114.         // this database object.
  115.         void                 SetupColumns();
  116.  
  117.     public:
  118.         // Used in places where we need to construct a WHERE clause to 
  119.         // be passed to the SetWhereClause() function.  From example,
  120.         // where building the WHERE clause requires using ::Printf()
  121.         // to build the string.
  122.         wxString             whereStr;
  123.  
  124.         // WHERE string returned from the query dialog
  125.         wxString             qryWhereStr;
  126.  
  127.         Ccontact(wxDb *pwxDb=NULL);
  128.         ~Ccontact();
  129.  
  130.         void                 Initialize();
  131.  
  132.         // Contains all the index definitions and calls to wxDbTable::CreateIndex()
  133.         // required to create all the indexes we wish to define for this table.
  134.         bool                 CreateIndexes(bool recreate);
  135.  
  136.         // Since we do not wish to have duplicate code blocks all over our program
  137.         // for a common query/fetch that we will need to do in many places, we
  138.         // include this member function that does it all for us in one place.
  139.         bool                 FetchByName(const wxString &name);
  140.  
  141. };  // Ccontact class definition
  142.  
  143.  
  144. typedef struct Cparameters
  145. {
  146.     wxChar    ODBCSource[SQL_MAX_DSN_LENGTH+1];
  147.     wxChar    UserName[SQL_MAX_USER_NAME_LEN+1];
  148.     wxChar    Password[SQL_MAX_AUTHSTR_LEN+1];
  149.     wxChar    DirPath[MAX_PATH+1];
  150. } Cparameters;
  151.  
  152.  
  153. // Define a new frame type
  154. class DatabaseDemoFrame: public wxFrame
  155.     private:
  156.         CeditorDlg      *pEditorDlg;
  157.         CparameterDlg   *pParamDlg;
  158.  
  159.     public:
  160.         DatabaseDemoFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& sz);
  161.         ~DatabaseDemoFrame();
  162.  
  163.         void    OnCloseWindow(wxCloseEvent& event);
  164.         void    OnCreate(wxCommandEvent& event);
  165.         void    OnRecreateTable(wxCommandEvent& event);
  166.         void    OnRecreateIndexes(wxCommandEvent& event);
  167.         void    OnExit(wxCommandEvent& event);
  168.         void    OnEditParameters(wxCommandEvent& event);
  169.         void    OnAbout(wxCommandEvent& event);
  170. #if wxUSE_NEW_GRID
  171.         void    OnDbGridTable( wxCommandEvent& );
  172. #endif 
  173.         void    CreateDataTable(bool recreate);
  174.         void    BuildEditorDialog();
  175.         void    BuildParameterDialog(wxWindow *parent);
  176.  
  177. DECLARE_EVENT_TABLE()
  178. };  // DatabaseDemoFrame
  179.  
  180.  
  181. #if wxUSE_NEW_GRID
  182.  
  183. // *************************** DBGridFrame ***************************
  184.  
  185. class DbGridFrame : public wxFrame
  186. {
  187. public:
  188.     bool     initialized;
  189.  
  190.     DbGridFrame(wxWindow *parent);
  191.  
  192.     void     OnCloseWindow(wxCloseEvent& event);
  193.     bool     Initialize();
  194.  
  195.     DECLARE_EVENT_TABLE()
  196. };
  197.  
  198. #endif
  199.  
  200. // Define a new application type
  201. class DatabaseDemoApp: public wxApp
  202. {
  203.     public:
  204.         // These are the parameters that are stored in the "PARAM_FILENAME" file
  205.         // that are read in at startup of the program that indicate the connection
  206.         // parameters to be used for connecting to the ODBC data source.
  207.         Cparameters      params;
  208.  
  209.         // Pointer to the main frame used by the App
  210.         DatabaseDemoFrame *DemoFrame;
  211.  
  212.         // Pointer to the main database connection used in the program.  This
  213.         // pointer would normally be used for doing things as database lookups
  214.         // for user login names and passwords, getting workstation settings, etc.
  215.         //         
  216.         // ---> IMPORTANT <---
  217.         // 
  218.         // For each database object created which uses this wxDb pointer
  219.         // connection to the database, when a CommitTrans() or RollBackTrans()
  220.         // will commit or rollback EVERY object which uses this wxDb pointer.
  221.         // 
  222.         // To allow each table object (those derived from wxDbTable) to be 
  223.         // individually committed or rolled back, you MUST use a different
  224.         // instance of wxDb in the constructor of the table.  Doing so creates 
  225.         // more overhead, and will use more database connections (some DBs have
  226.         // connection limits...), so use connections sparringly.
  227.         // 
  228.         // It is recommended that one "main" database connection be created for
  229.         // the entire program to use for READ-ONLY database accesses, but for each
  230.         // table object which will do a CommitTrans() or RollbackTrans() that a
  231.         // new wxDb object be created and used for it.
  232.         wxDb            *READONLY_DB;
  233.  
  234.         // Contains the ODBC connection information used by 
  235.         // all database connections
  236.         wxDbConnectInf  *DbConnectInf;
  237.  
  238.         bool             OnInit();
  239.  
  240.         // Read/Write ODBC connection parameters to the "PARAM_FILENAME" file
  241.         bool             ReadParamFile(Cparameters ¶ms);
  242.         bool             WriteParamFile(Cparameters ¶ms);
  243.  
  244.         void             CreateDataTable(bool recreate);
  245.  
  246.         // Pointer to the wxDbTable instance that is used to manipulate
  247.         // the data in memory and in the database
  248.         Ccontact        *Contact;
  249.  
  250. };  // DatabaseDemoApp
  251.  
  252.  
  253. DECLARE_APP(DatabaseDemoApp)
  254.  
  255.  
  256. // *************************** CeditorDlg ***************************
  257.  
  258. class CeditorDlg : public wxPanel
  259. {
  260.     private:
  261.         // Used to indicate whether all of the widget pointers (defined
  262.         // below) have been initialized to point to the memory for 
  263.         // the named widget.  Used as a safeguard from using the widget
  264.         // before it has been initialized.
  265.         bool             widgetPtrsSet;
  266.  
  267.         // Used when the EDIT button has been pressed to maintain the 
  268.         // original name that was displayed in the editor before the 
  269.         // EDIT button was pressed, so that if CANCEL is pressed, a
  270.         // FetchByName() can be done to retrieve the original data
  271.         // to repopulate the dialog.
  272.         wxString         saveName;
  273.  
  274.         // Pointers to all widgets on the dialog
  275.         wxButton        *pCreateBtn,  *pEditBtn,      *pDeleteBtn,  *pCopyBtn,  *pSaveBtn,  *pCancelBtn;
  276.         wxButton        *pPrevBtn,    *pNextBtn,      *pQueryBtn,   *pResetBtn, *pDoneBtn,  *pHelpBtn;
  277.         wxButton        *pNameListBtn;
  278.         wxButton        *pCatalogBtn, *pDataTypesBtn, *pDbDiagsBtn;
  279.         wxTextCtrl      *pNameTxt,    *pAddress1Txt,  *pAddress2Txt,*pCityTxt,  *pStateTxt, *pCountryTxt,*pPostalCodeTxt;
  280.         wxStaticText    *pNameMsg,    *pAddress1Msg,  *pAddress2Msg,*pCityMsg,  *pStateMsg, *pCountryMsg,*pPostalCodeMsg;
  281.         wxTextCtrl      *pJoinDateTxt,*pContribTxt,   *pLinesTxt;
  282.         wxStaticText    *pJoinDateMsg,*pContribMsg,   *pLinesMsg;
  283.         wxRadioBox      *pDeveloperRadio;
  284.         wxChoice        *pNativeLangChoice;
  285.         wxStaticText    *pNativeLangMsg;
  286.  
  287.     public:
  288.         // Indicates if the editor dialog has been initialized yet (used to
  289.         // help trap if the Initialize() function failed to load all required
  290.         // resources or not.
  291.         bool             initialized;
  292.  
  293.         enum DialogModes mode;
  294.  
  295.         CeditorDlg(wxWindow *parent);
  296.  
  297.         void    OnCloseWindow(wxCloseEvent& event);
  298.         void    OnButton( wxCommandEvent &event );
  299.         void    OnCommand(wxWindow& win, wxCommandEvent& event);
  300.         void    OnActivate(bool) {};  // necessary for hot keys
  301.  
  302.         bool    Initialize();
  303.  
  304.         // Sets wxStaticText fields to be editable or not depending
  305.         // on the current value of 'mode'
  306.         void    FieldsEditable();
  307.  
  308.         // Sets the editor mode, determining what state widgets
  309.         // on the dialog are to be in based on the operation
  310.         // being performed.
  311.         void    SetMode(enum DialogModes m);
  312.  
  313.         // Update/Retrieve data from the widgets on the dialog
  314.         bool    PutData();
  315.         bool    GetData();
  316.  
  317.         // Inserts/updates the database with the current data
  318.         // retrieved from the editor dialog
  319.         bool    Save();
  320.  
  321.         // Database functions for changing the data that is to 
  322.         // be displayed on the dialog.  GetNextRec()/GetPrevRec()
  323.         // provide database independent methods that do not require
  324.         // backward scrolling cursors to obtain the record that
  325.         // is prior to the current record in the search sequence.
  326.         bool    GetNextRec();
  327.         bool    GetPrevRec();
  328.         bool    GetRec(const wxString &whereStr);
  329.         
  330. DECLARE_EVENT_TABLE()
  331. };  // CeditorDlg
  332.  
  333. #define EDITOR_DIALOG                   199
  334.  
  335. // Editor dialog control ids
  336. #define EDITOR_DIALOG_FN_GROUP          200
  337. #define EDITOR_DIALOG_SEARCH_GROUP      201
  338. #define EDITOR_DIALOG_CREATE            202
  339. #define EDITOR_DIALOG_EDIT              203
  340. #define EDITOR_DIALOG_DELETE            204
  341. #define EDITOR_DIALOG_COPY              205
  342. #define EDITOR_DIALOG_SAVE              206
  343. #define EDITOR_DIALOG_CANCEL            207
  344. #define EDITOR_DIALOG_PREV              208
  345. #define EDITOR_DIALOG_NEXT              209
  346. #define EDITOR_DIALOG_QUERY             211
  347. #define EDITOR_DIALOG_RESET             212
  348. #define EDITOR_DIALOG_NAME_MSG          213
  349. #define EDITOR_DIALOG_NAME_TEXT         214
  350. #define EDITOR_DIALOG_LOOKUP            215
  351. #define EDITOR_DIALOG_ADDRESS1_MSG      216
  352. #define EDITOR_DIALOG_ADDRESS1_TEXT     217
  353. #define EDITOR_DIALOG_ADDRESS2_MSG      218
  354. #define EDITOR_DIALOG_ADDRESS2_TEXT     219
  355. #define EDITOR_DIALOG_CITY_MSG          220
  356. #define EDITOR_DIALOG_CITY_TEXT         221
  357. #define EDITOR_DIALOG_COUNTRY_MSG       222
  358. #define EDITOR_DIALOG_COUNTRY_TEXT      223
  359. #define EDITOR_DIALOG_POSTAL_MSG        224
  360. #define EDITOR_DIALOG_POSTAL_TEXT       225
  361. #define EDITOR_DIALOG_LANG_MSG          226
  362. #define EDITOR_DIALOG_LANG_CHOICE       227
  363. #define EDITOR_DIALOG_DATE_MSG          228
  364. #define EDITOR_DIALOG_DATE_TEXT         229
  365. #define EDITOR_DIALOG_CONTRIB_MSG       230
  366. #define EDITOR_DIALOG_CONTRIB_TEXT      231
  367. #define EDITOR_DIALOG_LINES_MSG         232
  368. #define EDITOR_DIALOG_LINES_TEXT        233
  369. #define EDITOR_DIALOG_STATE_MSG         234
  370. #define EDITOR_DIALOG_STATE_TEXT        235
  371. #define EDITOR_DIALOG_DEVELOPER         236
  372. #define EDITOR_DIALOG_JOIN_MSG          237
  373. #define EDITOR_DIALOG_JOIN_TEXT         238
  374. #define EDITOR_DIALOG_CATALOG           240
  375. #define EDITOR_DIALOG_DATATYPES         250
  376. #define EDITOR_DIALOG_DB_DIAGS          260
  377.  
  378. // *************************** CparameterDlg ***************************
  379.  
  380. class CparameterDlg : public wxDialog
  381. {
  382.     private:
  383.         // Used to indicate whether all of the widget pointers (defined
  384.         // below) have been initialized to point to the memory for 
  385.         // the named widget.  Used as a safeguard from using the widget
  386.         // before it has been initialized.
  387.         bool                 widgetPtrsSet;
  388.  
  389.         enum DialogModes     mode;
  390.  
  391.         // Have the parameters been saved yet, or do they 
  392.         // need to be saved to update the params on disk
  393.         bool                 saved;
  394.  
  395.         // Original params
  396.         Cparameters          savedParamSettings;
  397.  
  398.         // Pointers to all widgets on the dialog
  399.         wxStaticText        *pParamODBCSourceMsg;
  400.         wxListBox           *pParamODBCSourceList;
  401.         wxStaticText        *pParamUserNameMsg,        *pParamPasswordMsg,    *pParamDirPathMsg;
  402.         wxTextCtrl          *pParamUserNameTxt,        *pParamPasswordTxt,    *pParamDirPathTxt;
  403.         wxButton            *pParamSaveBtn,            *pParamCancelBtn;
  404.  
  405.     public:
  406.         CparameterDlg(wxWindow *parent);
  407.  
  408.         void    OnCloseWindow(wxCloseEvent& event);
  409.         void    OnButton( wxCommandEvent &event );
  410.         void    OnCommand(wxWindow& win, wxCommandEvent& event);
  411.         void    OnActivate(bool) {};  // necessary for hot keys
  412.  
  413.         // Update/Retrieve data from the widgets on the dialog
  414.         bool    PutData();
  415.         bool    GetData();
  416.  
  417.         // Stores the defined parameter for connecting to the selected ODBC
  418.         // data source to the config file name in "PARAM_FILENAME"
  419.         bool    Save();
  420.  
  421.         // Populates the 'pParamODBCSourceList' listbox with the names of all
  422.         // ODBC datasource defined for use at the current workstation
  423.         void    FillDataSourceList();
  424.  
  425. DECLARE_EVENT_TABLE()
  426. };  // CparameterDlg
  427.  
  428. #define PARAMETER_DIALOG                    400
  429.  
  430. // Parameter dialog control ids
  431. #define PARAMETER_DIALOG_SOURCE_MSG         401
  432. #define PARAMETER_DIALOG_SOURCE_LISTBOX     402
  433. #define PARAMETER_DIALOG_NAME_MSG           403
  434. #define PARAMETER_DIALOG_NAME_TEXT          404
  435. #define PARAMETER_DIALOG_PASSWORD_MSG       405
  436. #define PARAMETER_DIALOG_PASSWORD_TEXT      406
  437. #define PARAMETER_DIALOG_DIRPATH_MSG        407
  438. #define PARAMETER_DIALOG_DIRPATH_TEXT       408
  439. #define PARAMETER_DIALOG_SAVE               409
  440. #define PARAMETER_DIALOG_CANCEL             410
  441.  
  442. // *************************** CqueryDlg ***************************
  443.  
  444.  
  445. // QUERY DIALOG
  446. enum qryOp
  447. {
  448.     qryOpEQ,
  449.     qryOpLT,
  450.     qryOpGT,
  451.     qryOpLE,
  452.     qryOpGE,
  453.     qryOpBEGINS,
  454.     qryOpCONTAINS,
  455.     qryOpLIKE,
  456.     qryOpBETWEEN
  457. };
  458.  
  459.  
  460. // Query strings
  461. wxChar * const langQRY_EQ           = "column = column | value";
  462. wxChar * const langQRY_LT           = "column < column | value";
  463. wxChar * const langQRY_GT           = "column > column | value";
  464. wxChar * const langQRY_LE           = "column <= column | value";
  465. wxChar * const langQRY_GE           = "column >= column | value";
  466. wxChar * const langQRY_BEGINS       = "columns that BEGIN with the string entered";
  467. wxChar * const langQRY_CONTAINS     = "columns that CONTAIN the string entered";
  468. wxChar * const langQRY_LIKE         = "% matches 0 or more of any char; _ matches 1 char";
  469. wxChar * const langQRY_BETWEEN      = "column BETWEEN value AND value";
  470.  
  471.  
  472. class CqueryDlg : public wxDialog
  473. {
  474.     private:
  475.         wxDbColInf  *colInf;            // Column inf. returned by db->GetColumns()
  476.         wxDbTable   *dbTable;           // generic wxDbTable object for attaching to the table to query
  477.         wxChar      *masterTableName;   // Name of the table that 'dbTable' will be associated with
  478.         wxString     pWhere;            // A pointer to the storage for the resulting where clause
  479.         wxDb        *pDB;
  480.  
  481.     public:
  482.         // Used to indicate whether all of the widget pointers (defined
  483.         // below) have been initialized to point to the memory for 
  484.         // the named widget.  Used as a safeguard from using the widget
  485.         // before it has been initialized.
  486.         bool                     widgetPtrsSet;
  487.  
  488.         // Widget pointers
  489.         wxStaticText            *pQueryCol1Msg;
  490.         wxChoice                *pQueryCol1Choice;
  491.         wxStaticText            *pQueryNotMsg;
  492.         wxCheckBox              *pQueryNotCheck;
  493.         wxStaticText            *pQueryOperatorMsg;
  494.         wxChoice                *pQueryOperatorChoice;
  495.         wxStaticText            *pQueryCol2Msg;
  496.         wxChoice                *pQueryCol2Choice;
  497.         wxStaticText            *pQueryValue1Msg;
  498.         wxTextCtrl              *pQueryValue1Txt;
  499.         wxStaticText            *pQueryValue2Msg;
  500.         wxTextCtrl              *pQueryValue2Txt;
  501.         wxStaticText            *pQuerySqlWhereMsg;
  502.         wxTextCtrl              *pQuerySqlWhereMtxt;
  503.         wxButton                *pQueryAddBtn;
  504.         wxButton                *pQueryAndBtn;
  505.         wxButton                *pQueryOrBtn;
  506.         wxButton                *pQueryLParenBtn;
  507.         wxButton                *pQueryRParenBtn;
  508.         wxButton                *pQueryDoneBtn;
  509.         wxButton                *pQueryClearBtn;
  510.         wxButton                *pQueryCountBtn;
  511.         wxButton                *pQueryHelpBtn;
  512.         wxStaticBox             *pQueryHintGrp;
  513.         wxStaticText            *pQueryHintMsg;
  514.  
  515.         wxTextCtrl              *pFocusTxt;
  516.  
  517.         CqueryDlg(wxWindow *parent, wxDb *pDb, wxChar *tblName[], const wxString &pWhereArg);
  518.         ~CqueryDlg();
  519.  
  520.         void        OnButton( wxCommandEvent &event );
  521.         void        OnCommand(wxWindow& win, wxCommandEvent& event);
  522.         void        OnCloseWindow(wxCloseEvent& event);
  523.         void        OnActivate(bool) {};  // necessary for hot keys
  524.  
  525.         void        AppendToWhere(wxChar *s);
  526.         void        ProcessAddBtn();
  527.         void        ProcessCountBtn();
  528.         bool        ValidateWhereClause();
  529.  
  530. DECLARE_EVENT_TABLE()
  531. };  // CqueryDlg
  532.  
  533. #define QUERY_DIALOG                    300
  534.  
  535. // Parameter dialog control ids
  536. #define QUERY_DIALOG_COL_MSG            301
  537. #define QUERY_DIALOG_COL_CHOICE         302
  538. #define QUERY_DIALOG_NOT_MSG            303
  539. #define QUERY_DIALOG_NOT_CHECKBOX       304
  540. #define QUERY_DIALOG_OP_MSG             305
  541. #define QUERY_DIALOG_OP_CHOICE          306
  542. #define QUERY_DIALOG_COL2_MSG           307
  543. #define QUERY_DIALOG_COL2_CHOICE        308
  544. #define QUERY_DIALOG_WHERE_MSG          309
  545. #define QUERY_DIALOG_WHERE_TEXT         310
  546. #define QUERY_DIALOG_ADD                311
  547. #define QUERY_DIALOG_AND                312
  548. #define QUERY_DIALOG_OR                 313
  549. #define QUERY_DIALOG_LPAREN             314
  550. #define QUERY_DIALOG_RPAREN             315
  551. #define QUERY_DIALOG_DONE               316
  552. #define QUERY_DIALOG_CLEAR              317
  553. #define QUERY_DIALOG_COUNT              318
  554. #define QUERY_DIALOG_VALUE1_MSG         319
  555. #define QUERY_DIALOG_VALUE1_TEXT        320
  556. #define QUERY_DIALOG_VALUE2_MSG         321
  557. #define QUERY_DIALOG_VALUE2_TEXT        322
  558. #define QUERY_DIALOG_HINT_GROUP         323
  559. #define QUERY_DIALOG_HINT_MSG           324
  560.  
  561. char * const langNO                        = "No";
  562. char * const langYES                       = "Yes";
  563. char * const langDBINF_DB_NAME             = "Database Name = ";
  564. char * const langDBINF_DB_VER              = "Database Version = ";
  565. char * const langDBINF_DRIVER_NAME         = "Driver Name = ";
  566. char * const langDBINF_DRIVER_ODBC_VER     = "Driver ODBC Version = ";
  567. char * const langDBINF_DRIVER_MGR_ODBC_VER = "Driver Manager ODBC Version = ";
  568. char * const langDBINF_DRIVER_VER          = "Driver Version = ";
  569. char * const langDBINF_SERVER_NAME         = "Server Name = ";
  570. char * const langDBINF_FILENAME            = "Filename = ";
  571. char * const langDBINF_OUTER_JOINS         = "Outer Joins = ";
  572. char * const langDBINF_STORED_PROC         = "Stored Procedures = ";
  573. char * const langDBINF_MAX_HDBC            = "Max # of Db connections = ";
  574. char * const langDBINF_MAX_HSTMT           = "Max # of cursors (per db connection) = ";
  575. char * const langDBINF_UNLIMITED           = "Unlimited or Unknown"; 
  576. char * const langDBINF_API_LVL             = "ODBC API conformance level = ";
  577. char * const langDBINF_CLI_LVL             = "Client (SAG) conformance level = ";
  578. char * const langDBINF_SQL_LVL             = "SQL conformance level = ";
  579. char * const langDBINF_COMMIT_BEHAVIOR     = "Commit Behavior = ";
  580. char * const langDBINF_ROLLBACK_BEHAVIOR   = "Rollback Behavior = ";
  581. char * const langDBINF_SUPP_NOT_NULL       = "Support NOT NULL clause = ";
  582. char * const langDBINF_SUPP_IEF            = "Support IEF = ";
  583. char * const langDBINF_TXN_ISOLATION       = "Transaction Isolation Level (default) = ";
  584. char * const langDBINF_TXN_ISOLATION_CURR  = "Transaction Isolation Level (current) = ";
  585. char * const langDBINF_TXN_ISOLATION_OPTS  = "Transaction Isolation Options Available = ";
  586. char * const langDBINF_FETCH_DIRS          = "Fetch Directions = ";
  587. char * const langDBINF_LOCK_TYPES          = "Lock Types (SQLSetPos) = ";
  588. char * const langDBINF_POS_OPERS           = "Position Operations (SQLSetPos) = ";
  589. char * const langDBINF_POS_STMTS           = "Position Statements = ";
  590. char * const langDBINF_SCROLL_CONCURR      = "Concurrency Options (scrollable cursors) = ";
  591. char * const langDBINF_SCROLL_OPTS         = "Scroll Options (scrollable cursors) = ";
  592. char * const langDBINF_STATIC_SENS         = "Static Sensitivity = ";
  593. char * const langDBINF_TXN_CAPABLE         = "Transaction Support = ";
  594. char * const langDBINF_LOGIN_TIMEOUT       = "Login Timeout = ";
  595. char * const langDBINF_NONE                = "None";
  596. char * const langDBINF_LEVEL1              = "Level 1";
  597. char * const langDBINF_LEVEL2              = "Level 2";
  598. char * const langDBINF_NOT_COMPLIANT       = "Not Compliant";
  599. char * const langDBINF_COMPLIANT           = "Compliant";
  600. char * const langDBINF_MIN_GRAMMAR         = "Minimum Grammer";
  601. char * const langDBINF_CORE_GRAMMAR        = "Core Grammer";
  602. char * const langDBINF_EXT_GRAMMAR         = "Extended Grammer";
  603. char * const langDBINF_DELETE_CURSORS      = "Delete cursors";
  604. char * const langDBINF_CLOSE_CURSORS       = "Close cursors";
  605. char * const langDBINF_PRESERVE_CURSORS    = "Preserve cursors";
  606. char * const langDBINF_READ_UNCOMMITTED    = "Read Uncommitted";
  607. char * const langDBINF_READ_COMMITTED      = "Read Committed";
  608. char * const langDBINF_REPEATABLE_READ     = "Repeatable Read";
  609. char * const langDBINF_SERIALIZABLE        = "Serializable";
  610. char * const langDBINF_VERSIONING          = "Versioning";
  611. char * const langDBINF_NEXT                = "Next";
  612. char * const langDBINF_PREV                = "Prev";
  613. char * const langDBINF_FIRST               = "First";
  614. char * const langDBINF_LAST                = "Last";
  615. char * const langDBINF_ABSOLUTE            = "Absolute";
  616. char * const langDBINF_RELATIVE            = "Relative";
  617. char * const langDBINF_RESUME              = "Resume";
  618. char * const langDBINF_BOOKMARK            = "Bookmark";
  619. char * const langDBINF_NO_CHANGE           = "No Change";
  620. char * const langDBINF_EXCLUSIVE           = "Exclusive";
  621. char * const langDBINF_UNLOCK              = "Unlock";
  622. char * const langDBINF_POSITION            = "Position";
  623. char * const langDBINF_REFRESH             = "Refresh";
  624. char * const langDBINF_UPD                 = "Upd";
  625. char * const langDBINF_DEL                 = "Del";
  626. char * const langDBINF_ADD                 = "Add";
  627. char * const langDBINF_POS_DEL             = "Pos Delete";
  628. char * const langDBINF_POS_UPD             = "Pos Update";
  629. char * const langDBINF_SELECT_FOR_UPD      = "Select For Update";
  630. char * const langDBINF_READ_ONLY           = "Read Only";
  631. char * const langDBINF_LOCK                = "Lock";
  632. char * const langDBINF_OPT_ROWVER          = "Opt. Rowver";
  633. char * const langDBINF_OPT_VALUES          = "Opt. Values";
  634. char * const langDBINF_FWD_ONLY            = "Fwd Only";
  635. char * const langDBINF_STATIC              = "Static";
  636. char * const langDBINF_KEYSET_DRIVEN       = "Keyset Driven";
  637. char * const langDBINF_DYNAMIC             = "Dynamic";
  638. char * const langDBINF_MIXED               = "Mixed";
  639. char * const langDBINF_ADDITIONS           = "Additions";
  640. char * const langDBINF_DELETIONS           = "Deletions";
  641. char * const langDBINF_UPDATES             = "Updates";
  642. char * const langDBINF_DML_ONLY            = "DML Only";
  643. char * const langDBINF_DDL_COMMIT          = "DDL Commit";
  644. char * const langDBINF_DDL_IGNORE          = "DDL Ignore";
  645. char * const langDBINF_DDL_AND_DML         = "DDL and DML";
  646. char * const langDBINF_ORACLE_BANNER       = ">>> ORACLE STATISTICS AND TUNING INFORMATION <<<";
  647. char * const langDBINF_DB_BLOCK_GETS       = "DB block gets";
  648. char * const langDBINF_CONSISTENT_GETS     = "Consistent gets";
  649. char * const langDBINF_PHYSICAL_READS      = "Physical reads";
  650. char * const langDBINF_CACHE_HIT_RATIO     = "Cache hit ratio";
  651. char * const langDBINF_TABLESPACE_IO       = "TABLESPACE I/O LEVELS";
  652. char * const langDBINF_PHYSICAL_WRITES     = "Physical writes";
  653.