X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/94613352b552b768342e6835afd697391b2e38b0..2b96d0fb4be7d684c17987d74f8f92d0cfe345b5:/samples/db/listdb.cpp diff --git a/samples/db/listdb.cpp b/samples/db/listdb.cpp index 7e6ff1b6c4..f60902a4e6 100644 --- a/samples/db/listdb.cpp +++ b/samples/db/listdb.cpp @@ -59,13 +59,7 @@ extern wxDbList WXDLLEXPORT *PtrBegDbList; /* from db.cpp, used in getting back error results from db connections */ #include "listdb.h" - -// Global structure for holding ODBC connection information -extern wxDbConnectInf DbConnectInf; - -// Global database connection -extern wxDb *READONLY_DB; - +//#include "dbtest.h" // Used for passing the selected listbox selection back to the calling // routine. This variable must be declared as 'extern' in the calling @@ -80,6 +74,8 @@ wxChar ListDB_Selection2[LOOKUP_COL_LEN+1]; const int LISTDB_NO_SPACES_BETWEEN_COLS = 3; +extern wxApp *DatabaseDemoApp; + /* * This function will return the exact string(s) from the database engine @@ -93,10 +89,10 @@ const int LISTDB_NO_SPACES_BETWEEN_COLS = 3; * NOTE: The value returned by this function is for temporary use only and * should be copied for long term use */ -const wxChar *GetExtendedDBErrorMsg2(wxChar *ErrFile, int ErrLine) +const char *GetExtendedDBErrorMsg2(wxDb *pDb, char *ErrFile, int ErrLine) { static wxString msg; - msg.Empty(); + msg = wxT(""); wxString tStr; @@ -106,45 +102,37 @@ const wxChar *GetExtendedDBErrorMsg2(wxChar *ErrFile, int ErrLine) msg += ErrFile; msg += wxT(" Line: "); tStr.Printf(wxT("%d"),ErrLine); - msg += tStr; + msg += tStr.c_str(); msg += wxT("\n"); } msg.Append (wxT("\nODBC errors:\n")); msg += wxT("\n"); - /* Scan through each database connection displaying - * any ODBC errors that have occured. */ - wxDbList *pDbList; - for (pDbList = PtrBegDbList; pDbList; pDbList = pDbList->PtrNext) + // Display errors for this connection + int i; + for (i = 0; i < DB_MAX_ERROR_HISTORY; i++) { - // Skip over any free connections - if (pDbList->Free) - continue; - // Display errors for this connection - for (int i = 0; i < DB_MAX_ERROR_HISTORY; i++) + if (pDb->errorList[i]) { - if (pDbList->PtrDb->errorList[i]) - { - msg.Append(pDbList->PtrDb->errorList[i]); - if (wxStrcmp(pDbList->PtrDb->errorList[i],wxT("")) != 0) - msg.Append(wxT("\n")); - // Clear the errmsg buffer so the next error will not - // end up showing the previous error that have occurred - wxStrcpy(pDbList->PtrDb->errorList[i],wxT("")); - } + msg.Append(pDb->errorList[i]); + if (wxStrcmp(pDb->errorList[i],wxT("")) != 0) + msg.Append(wxT("\n")); + // Clear the errmsg buffer so the next error will not + // end up showing the previous error that have occurred + wxStrcpy(pDb->errorList[i],wxT("")); } } msg += wxT("\n"); - return /*(wxChar*) (const wxChar*) msg*/msg.c_str(); + return msg.c_str(); } // GetExtendedDBErrorMsg - // Clookup constructor -Clookup::Clookup(wxChar *tblName, wxChar *colName) : - wxDbTable(READONLY_DB, tblName, 1, wxT(""), !wxDB_QUERY_ONLY, DbConnectInf.defaultDir) +Clookup::Clookup(wxChar *tblName, wxChar *colName, wxDb *pDb, const wxString &defDir) + : wxDbTable(pDb, tblName, 1, wxT(""), !wxDB_QUERY_ONLY, + defDir) { SetColDefs (0, colName, DB_DATA_TYPE_VARCHAR, lookupCol, SQL_C_CHAR, LOOKUP_COL_LEN+1, FALSE, FALSE); @@ -153,9 +141,16 @@ Clookup::Clookup(wxChar *tblName, wxChar *colName) : // Clookup2 constructor -Clookup2::Clookup2(wxChar *tblName, wxChar *colName1, wxChar *colName2, wxDb *pDb) - : wxDbTable(pDb, tblName, (1 + (wxStrlen(colName2) > 0)), NULL, !wxDB_QUERY_ONLY, DbConnectInf.defaultDir) +Clookup2::Clookup2(wxChar *tblName, wxChar *colName1, wxChar *colName2, + wxDb *pDb, const wxString &defDir) + : wxDbTable(pDb, tblName, (1 + (wxStrlen(colName2) > 0)), wxT(""), + !wxDB_QUERY_ONLY, defDir) { + wxASSERT(pDb); + wxASSERT(tblName); + wxASSERT(colName1); + wxASSERT(colName2); + int i = 0; SetColDefs (i, colName1, DB_DATA_TYPE_VARCHAR, lookupCol1, SQL_C_CHAR, LOOKUP_COL_LEN+1, FALSE, FALSE); @@ -167,15 +162,17 @@ Clookup2::Clookup2(wxChar *tblName, wxChar *colName1, wxChar *colName2, wxDb *pD BEGIN_EVENT_TABLE(ClookUpDlg, wxDialog) -// EVT_LISTBOX(LOOKUP_DIALOG_SELECT, ClookUpDlg::SelectCallback) EVT_BUTTON(LOOKUP_DIALOG_OK, ClookUpDlg::OnButton) EVT_BUTTON(LOOKUP_DIALOG_CANCEL, ClookUpDlg::OnButton) EVT_CLOSE(ClookUpDlg::OnClose) END_EVENT_TABLE() + // This is a generic lookup constructor that will work with any table and any column -ClookUpDlg::ClookUpDlg(wxWindow *parent, wxChar *windowTitle, wxChar *tableName, wxChar *colName, - wxChar *where, wxChar *orderBy) : wxDialog (parent, LOOKUP_DIALOG, wxT("Select..."), wxPoint(-1, -1), wxSize(400, 290)) +ClookUpDlg::ClookUpDlg(wxWindow *parent, wxChar *windowTitle, wxChar *tableName, + wxChar *colName, wxChar *where, wxChar *orderBy, + wxDb *pDb, const wxString &defDir) + : wxDialog (parent, LOOKUP_DIALOG, wxT("Select..."), wxPoint(-1, -1), wxSize(400, 290)) { wxBeginBusyCursor(); @@ -186,14 +183,15 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, wxChar *windowTitle, wxChar *tableName, noDisplayCols = 1; col1Len = 0; - pLookUpSelectList = new wxListBox(this, LOOKUP_DIALOG_SELECT, wxPoint( 5, 15), wxSize(384, 195), 0, 0, wxLB_SINGLE|wxLB_ALWAYS_SB, wxDefaultValidator, wxT("LookUpSelectList")); - pLookUpOkBtn = new wxButton(this, LOOKUP_DIALOG_OK, wxT("&Ok"), wxPoint(113, 222), wxSize( 70, 35), 0, wxDefaultValidator, wxT("LookUpOkBtn")); - pLookUpCancelBtn = new wxButton(this, LOOKUP_DIALOG_CANCEL, wxT("C&ancel"), wxPoint(212, 222), wxSize( 70, 35), 0, wxDefaultValidator, wxT("LookUpCancelBtn")); + pLookUpSelectList = new wxListBox(this, LOOKUP_DIALOG_SELECT, wxPoint( 5, 15), wxSize(384, 195), 0, 0, wxLB_SINGLE|wxLB_ALWAYS_SB, wxDefaultValidator, wxT("LookUpSelectList")); + pLookUpOkBtn = new wxButton(this, LOOKUP_DIALOG_OK, wxT("&Ok"), wxPoint(113, 222), wxSize( 70, 35), 0, wxDefaultValidator, wxT("LookUpOkBtn")); + pLookUpCancelBtn = new wxButton(this, LOOKUP_DIALOG_CANCEL, wxT("C&ancel"), wxPoint(212, 222), wxSize( 70, 35), 0, wxDefaultValidator, wxT("LookUpCancelBtn")); widgetPtrsSet = TRUE; // Query the lookup table and display the result set - if (!(lookup = new Clookup(tableName, colName))) + lookup = new Clookup(tableName, colName, pDb, defDir); + if (!lookup) { wxMessageBox(wxT("Error allocating memory for 'Clookup'object."),wxT("Error...")); Close(); @@ -226,7 +224,7 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, wxChar *windowTitle, wxChar *tableName, pLookUpSelectList->SetSelection(0); // Make the OK activate by pressing Enter - if (pLookUpSelectList->Number()) + if (pLookUpSelectList->GetCount()) pLookUpOkBtn->SetDefault(); else { @@ -250,7 +248,7 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, wxChar *windowTitle, wxChar *tableName, // 1) 2 columns rather than one // 2) The ability to select DISTINCT column values // -// Only set distinctValues equal to true if necessary. In many cases, the constraints +// Only set distinctValues equal to TRUE if necessary. In many cases, the constraints // of the index(es) will enforce this uniqueness. Selecting DISTINCT does require // overhead by the database to ensure that all values returned are distinct. Therefore, // use this ONLY when you need it. @@ -263,13 +261,15 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, wxChar *windowTitle, wxChar *tableName, // since it cannot be derived when you query using your own sql statement. // // The optional database connection can be used if you'd like the lookup class -// to use a database pointer other than the global READONLY_DB. This is necessary if +// to use a database pointer other than wxGetApp().READONLY_DB. This is necessary if // records are being saved, but not committed to the db, yet should be included // in the lookup window. // ClookUpDlg::ClookUpDlg(wxWindow *parent, wxChar *windowTitle, wxChar *tableName, - wxChar *dispCol1, wxChar *dispCol2, wxChar *where, wxChar *orderBy, bool distinctValues, - wxChar *selectStmt, int maxLenCol1, wxDb *pDb, bool allowOk) : wxDialog (parent, LOOKUP_DIALOG, wxT("Select..."), wxPoint(-1, -1), wxSize(400, 290)) + wxChar *dispCol1, wxChar *dispCol2, wxChar *where, wxChar *orderBy, + wxDb *pDb, const wxString &defDir, bool distinctValues, + wxChar *selectStmt, int maxLenCol1, bool allowOk) + : wxDialog (parent, LOOKUP_DIALOG, wxT("Select..."), wxPoint(-1, -1), wxSize(400, 290)) { wxBeginBusyCursor(); @@ -295,7 +295,8 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, wxChar *windowTitle, wxChar *tableName, widgetPtrsSet = TRUE; // Query the lookup table and display the result set - if (!(lookup2 = new Clookup2(tableName, dispCol1, dispCol2, pDb))) + lookup2 = new Clookup2(tableName, dispCol1, dispCol2, pDb, defDir); + if (!lookup2) { wxMessageBox(wxT("Error allocating memory for 'Clookup2' object."),wxT("Error...")); Close(); @@ -306,7 +307,7 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, wxChar *windowTitle, wxChar *tableName, { wxString tStr; tStr.Printf(wxT("Unable to open the table '%s'."),tableName); - tStr += GetExtendedDBErrorMsg2(__FILE__,__LINE__); + tStr += GetExtendedDBErrorMsg2(pDb,__FILE__,__LINE__); wxMessageBox(tStr,wxT("ODBC Error...")); Close(); return; @@ -383,7 +384,7 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, wxChar *windowTitle, wxChar *tableName, pLookUpSelectList->SetSelection(0); // Make the OK activate by pressing Enter - if (pLookUpSelectList->Number()) + if (pLookUpSelectList->GetCount()) pLookUpOkBtn->SetDefault(); else {