X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..25a1459592a6770de301d320b1c9091e9b1077e4:/samples/db/listdb.cpp diff --git a/samples/db/listdb.cpp b/samples/db/listdb.cpp index 57e48dd087..f60902a4e6 100644 --- a/samples/db/listdb.cpp +++ b/samples/db/listdb.cpp @@ -22,7 +22,7 @@ single selection listbox. The string selected from the list box is stored in the Global variable - "ListDB_Seclection", and will remain set until another interation of this + "ListDB_Selection", and will remain set until another interation of this routine is called. For each object (database) type that is to be used, an overridden @@ -59,27 +59,23 @@ 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 // source module -char ListDB_Selection[LOOKUP_COL_LEN+1]; +wxChar ListDB_Selection[LOOKUP_COL_LEN+1]; // If the listbox contains two columns of data, the second column is // returned in this variable. -char ListDB_Selection2[LOOKUP_COL_LEN+1]; +wxChar ListDB_Selection2[LOOKUP_COL_LEN+1]; // Constants const int LISTDB_NO_SPACES_BETWEEN_COLS = 3; +extern wxApp *DatabaseDemoApp; + /* * This function will return the exact string(s) from the database engine @@ -93,53 +89,50 @@ 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 */ -char *GetExtendedDBErrorMsg2(char *ErrFile, int ErrLine) +const char *GetExtendedDBErrorMsg2(wxDb *pDb, char *ErrFile, int ErrLine) { static wxString msg; + msg = wxT(""); wxString tStr; if (ErrFile || ErrLine) { - msg += "File: "; + msg += wxT("File: "); msg += ErrFile; - msg += " Line: "; - tStr.Printf("%d",ErrLine); + msg += wxT(" Line: "); + tStr.Printf(wxT("%d"),ErrLine); msg += tStr.c_str(); - msg += "\n"; + msg += wxT("\n"); } - msg.Append ("\nODBC errors:\n"); - msg += "\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],"") != 0) - msg.Append("\n"); - } + 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 += "\n"; + msg += wxT("\n"); - return (char*) (const char*) msg; + return msg.c_str(); } // GetExtendedDBErrorMsg - // Clookup constructor -Clookup::Clookup(char *tblName, char *colName) : wxDbTable(READONLY_DB, tblName, 1, NULL, !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); @@ -148,9 +141,16 @@ Clookup::Clookup(char *tblName, char *colName) : wxDbTable(READONLY_DB, tblName, // Clookup2 constructor -Clookup2::Clookup2(char *tblName, char *colName1, char *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); @@ -162,35 +162,38 @@ Clookup2::Clookup2(char *tblName, char *colName1, char *colName2, wxDb *pDb) 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, char *windowTitle, char *tableName, char *colName, - char *where, char *orderBy) : wxDialog (parent, LOOKUP_DIALOG, "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(); - wxStrcpy(ListDB_Selection,""); + wxStrcpy(ListDB_Selection,wxT("")); widgetPtrsSet = FALSE; lookup = 0; lookup2 = 0; 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, "LookUpSelectList"); - pLookUpOkBtn = new wxButton(this, LOOKUP_DIALOG_OK, "&Ok", wxPoint(113, 222), wxSize( 70, 35), 0, wxDefaultValidator, "LookUpOkBtn"); - pLookUpCancelBtn = new wxButton(this, LOOKUP_DIALOG_CANCEL, "C&ancel", wxPoint(212, 222), wxSize( 70, 35), 0, wxDefaultValidator, "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("Error allocating memory for 'Clookup'object.","Error..."); + wxMessageBox(wxT("Error allocating memory for 'Clookup'object."),wxT("Error...")); Close(); return; } @@ -198,8 +201,8 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, cha if (!lookup->Open()) { wxString tStr; - tStr.Printf("Unable to open the table '%s'.",tableName); - wxMessageBox(tStr,"ODBC Error..."); + tStr.Printf(wxT("Unable to open the table '%s'."),tableName); + wxMessageBox(tStr,wxT("ODBC Error...")); Close(); return; } @@ -208,7 +211,7 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, cha lookup->SetWhereClause(where); if (!lookup->Query()) { - wxMessageBox("ODBC error during Query()","ODBC Error..."); + wxMessageBox(wxT("ODBC error during Query()"),wxT("ODBC Error...")); Close(); return; } @@ -221,7 +224,7 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, cha pLookUpSelectList->SetSelection(0); // Make the OK activate by pressing Enter - if (pLookUpSelectList->Number()) + if (pLookUpSelectList->GetCount()) pLookUpOkBtn->SetDefault(); else { @@ -245,7 +248,7 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, cha // 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. @@ -258,18 +261,20 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, cha // 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, char *windowTitle, char *tableName, - char *dispCol1, char *dispCol2, char *where, char *orderBy, bool distinctValues, - char *selectStmt, int maxLenCol1, wxDb *pDb, bool allowOk) : wxDialog (parent, LOOKUP_DIALOG, "Select...", wxPoint(-1, -1), wxSize(400, 290)) +ClookUpDlg::ClookUpDlg(wxWindow *parent, wxChar *windowTitle, wxChar *tableName, + 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(); - wxStrcpy(ListDB_Selection,""); - wxStrcpy(ListDB_Selection2,""); + wxStrcpy(ListDB_Selection,wxT("")); + wxStrcpy(ListDB_Selection2,wxT("")); widgetPtrsSet = FALSE; lookup = 0; lookup2 = 0; @@ -280,19 +285,20 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, // this is done with fixed font so that the second column (if any) will be left // justified in the second column - pLookUpSelectList = new wxListBox(this, LOOKUP_DIALOG_SELECT, wxPoint(5, 15), wxSize(384, 195), 0, 0, wxLB_SINGLE|wxLB_ALWAYS_SB, wxDefaultValidator, "LookUpSelectList"); + pLookUpSelectList = new wxListBox(this, LOOKUP_DIALOG_SELECT, wxPoint(5, 15), wxSize(384, 195), 0, 0, wxLB_SINGLE|wxLB_ALWAYS_SB, wxDefaultValidator, wxT("LookUpSelectList")); pLookUpSelectList->SetFont(fixedFont); - pLookUpOkBtn = new wxButton(this, LOOKUP_DIALOG_OK, "&Ok", wxPoint(113, 222), wxSize(70, 35), 0, wxDefaultValidator, "LookUpOkBtn"); - pLookUpCancelBtn = new wxButton(this, LOOKUP_DIALOG_CANCEL, "C&ancel", wxPoint(212, 222), wxSize(70, 35), 0, wxDefaultValidator, "LookUpCancelBtn"); + 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 (!(lookup2 = new Clookup2(tableName, dispCol1, dispCol2, pDb))) + lookup2 = new Clookup2(tableName, dispCol1, dispCol2, pDb, defDir); + if (!lookup2) { - wxMessageBox("Error allocating memory for 'Clookup2'object.","Error..."); + wxMessageBox(wxT("Error allocating memory for 'Clookup2' object."),wxT("Error...")); Close(); return; } @@ -300,9 +306,9 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, if (!lookup2->Open()) { wxString tStr; - tStr.Printf("Unable to open the table '%s'.",tableName); - tStr += GetExtendedDBErrorMsg2(__FILE__,__LINE__); - wxMessageBox(tStr,"ODBC Error..."); + tStr.Printf(wxT("Unable to open the table '%s'."),tableName); + tStr += GetExtendedDBErrorMsg2(pDb,__FILE__,__LINE__); + wxMessageBox(tStr,wxT("ODBC Error...")); Close(); return; } @@ -316,26 +322,26 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, maxColLen = LOOKUP_COL_LEN; if (wxStrlen(dispCol2)) { - wxString q = "SELECT MAX({fn LENGTH("; + wxString q = wxT("SELECT MAX({fn LENGTH("); q += dispCol1; - q += ")}), NULL"; - q += " FROM "; + q += wxT(")}), NULL"); + q += wxT(" FROM "); q += tableName; if (wxStrlen(where)) { - q += " WHERE "; + q += wxT(" WHERE "); q += where; } - if (!lookup2->QueryBySqlStmt((char*) (const char*) q)) + if (!lookup2->QueryBySqlStmt(q)) { - wxMessageBox("ODBC error during QueryBySqlStmt()","ODBC Error..."); + wxMessageBox(wxT("ODBC error during QueryBySqlStmt()"),wxT("ODBC Error...")); Close(); return; } if (lookup2->GetNext()) maxColLen = col1Len = atoi(lookup2->lookupCol1); else - wxMessageBox("ODBC error during GetNext()","ODBC Error..."); + wxMessageBox(wxT("ODBC error during GetNext()"),wxT("ODBC Error...")); } } @@ -344,7 +350,7 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, { if (!lookup2->QueryBySqlStmt(selectStmt)) { - wxMessageBox("ODBC error during QueryBySqlStmt()","ODBC Error..."); + wxMessageBox(wxT("ODBC error during QueryBySqlStmt()"),wxT("ODBC Error...")); Close(); return; } @@ -355,7 +361,7 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, lookup2->SetWhereClause(where); if (!lookup2->Query(FALSE, distinctValues)) { - wxMessageBox("ODBC error during Query()","ODBC Error..."); + wxMessageBox(wxT("ODBC error during Query()"),wxT("ODBC Error...")); Close(); return; } @@ -368,7 +374,7 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, s = lookup2->lookupCol1; if (wxStrlen(dispCol2)) // Append the optional column 2 { - s.Append(' ', (maxColLen + LISTDB_NO_SPACES_BETWEEN_COLS - wxStrlen(lookup2->lookupCol1))); + s.Append(wxT(' '), (maxColLen + LISTDB_NO_SPACES_BETWEEN_COLS - wxStrlen(lookup2->lookupCol1))); s.Append(lookup2->lookupCol2); } pLookUpSelectList->Append(s); @@ -378,7 +384,7 @@ ClookUpDlg::ClookUpDlg(wxWindow *parent, char *windowTitle, char *tableName, pLookUpSelectList->SetSelection(0); // Make the OK activate by pressing Enter - if (pLookUpSelectList->Number()) + if (pLookUpSelectList->GetCount()) pLookUpOkBtn->SetDefault(); else { @@ -407,8 +413,10 @@ void ClookUpDlg::OnClose(wxCloseEvent& event) if (lookup2) delete lookup2; + SetReturnCode(1); + while (wxIsBusy()) wxEndBusyCursor(); - event.Skip(); + event.Skip(); // return TRUE; @@ -451,8 +459,8 @@ void ClookUpDlg::OnCommand(wxWindow& win, wxCommandEvent& event) } else { - wxStrcpy(ListDB_Selection,""); - wxStrcpy(ListDB_Selection2,""); + wxStrcpy(ListDB_Selection,wxT("")); + wxStrcpy(ListDB_Selection2,wxT("")); } Close(); } // OK Button @@ -460,8 +468,8 @@ void ClookUpDlg::OnCommand(wxWindow& win, wxCommandEvent& event) // Cancel Button if (widgetName == pLookUpCancelBtn->GetName()) { - wxStrcpy (ListDB_Selection,""); - wxStrcpy (ListDB_Selection2,""); + wxStrcpy (ListDB_Selection,wxT("")); + wxStrcpy (ListDB_Selection2,wxT("")); Close(); } // Cancel Button }