/*
* This function will return the exact string(s) from the database engine
- * indicating all error conditions which have just occured during the
+ * indicating all error conditions which have just occurred during the
* last call to the database engine.
*
* This demo uses the returned string by displaying it in a wxMessageBox. The
* NOTE: The value returned by this function is for temporary use only and
* should be copied for long term use
*/
-const wxChar *GetExtendedDBErrorMsg2(wxDb *pDb, wxChar *ErrFile, int ErrLine)
+wxString GetExtendedDBErrorMsg2(wxDb *pDb, wxChar *ErrFile, int ErrLine)
{
static wxString msg;
msg = wxT("");
}
msg += wxT("\n");
- return msg.c_str();
+ return msg;
} // GetExtendedDBErrorMsg
// Clookup constructor
Clookup::Clookup(wxString tblName, wxString colName, wxDb *pDb, const wxString &defDir)
- : wxDbTable(pDb, tblName, 1, wxEmptyString, !wxDB_QUERY_ONLY,
+ : wxDbTable(pDb, tblName, 1, (const wxString &)wxEmptyString, !wxDB_QUERY_ONLY,
defDir)
{
- SetColDefs (0, colName, DB_DATA_TYPE_VARCHAR, lookupCol, SQL_C_CHAR, LOOKUP_COL_LEN+1, false, false);
+ SetColDefs (0, colName, DB_DATA_TYPE_VARCHAR, lookupCol, SQL_C_WXCHAR, LOOKUP_COL_LEN+1, false, false);
} // Clookup()
// Clookup2 constructor
Clookup2::Clookup2(wxString tblName, wxString colName1, wxString colName2,
wxDb *pDb, const wxString &defDir)
- : wxDbTable(pDb, tblName, (UWORD)(1 + (wxStrlen(colName2) > 0)), wxEmptyString,
+ : wxDbTable(pDb, tblName, (UWORD)(1 + (wxStrlen(colName2) > 0)), (const wxString &)wxEmptyString,
!wxDB_QUERY_ONLY, defDir)
{
wxASSERT(pDb);
int i = 0;
- SetColDefs ((UWORD)i, colName1, DB_DATA_TYPE_VARCHAR, lookupCol1, SQL_C_CHAR, LOOKUP_COL_LEN+1, false, false);
+ SetColDefs ((UWORD)i, colName1, DB_DATA_TYPE_VARCHAR, lookupCol1, SQL_C_WXCHAR, LOOKUP_COL_LEN+1, false, false);
if (wxStrlen(colName2) > 0)
- SetColDefs ((UWORD)(++i), colName2, DB_DATA_TYPE_VARCHAR, lookupCol2, SQL_C_CHAR, LOOKUP_COL_LEN+1, false, false);
+ SetColDefs ((UWORD)(++i), colName2, DB_DATA_TYPE_VARCHAR, lookupCol2, SQL_C_WXCHAR, LOOKUP_COL_LEN+1, false, false);
} // Clookup2()
EVT_BUTTON(LOOKUP_DIALOG_OK, ClookUpDlg::OnButton)
EVT_BUTTON(LOOKUP_DIALOG_CANCEL, ClookUpDlg::OnButton)
EVT_CLOSE(ClookUpDlg::OnClose)
+ EVT_LISTBOX_DCLICK(LOOKUP_DIALOG_SELECT, ClookUpDlg::OnDClick)
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,
+ClookUpDlg::ClookUpDlg(wxWindow *parent, const wxString &windowTitle, const wxString &tableName,
+ const wxString &colName, const wxString &where, const wxString &orderBy,
wxDb *pDb, const wxString &defDir)
: wxDialog (parent, LOOKUP_DIALOG, wxT("Select..."), wxDefaultPosition, wxSize(400, 290))
{
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;
lookup = new Clookup(tableName, colName, pDb, defDir);
if (!lookup)
{
- wxMessageBox(wxT("Error allocating memory for 'Clookup'object."),wxT("Error..."));
+ wxMessageBox(wxT("Error allocating memory for 'Clookup' object."),wxT("Error..."));
Close();
return;
}
if (!lookup->Open())
{
wxString tStr;
- tStr.Printf(wxT("Unable to open the table '%s'."),tableName);
- wxMessageBox(tStr,wxT("ODBC Error..."));
+ tStr.Printf(wxT("Unable to open the table '%s'."), tableName.c_str());
+ wxMessageBox(wxDbLogExtendedErrorMsg(tStr.c_str(),lookup->GetDb(),__TFILE__,__LINE__),
+ wxT("ODBC Error..."),wxOK | wxICON_EXCLAMATION);
+
Close();
return;
}
lookup->SetWhereClause(where);
if (!lookup->Query())
{
- wxMessageBox(wxT("ODBC error during Query()"),wxT("ODBC Error..."));
+ wxString tStr;
+ tStr = wxT("ODBC error during Query()\n\n");
+ wxMessageBox(wxDbLogExtendedErrorMsg(tStr.c_str(),lookup->GetDb(),__TFILE__,__LINE__),
+ wxT("ODBC Error..."),wxOK | wxICON_EXCLAMATION);
+
Close();
return;
}
// 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,
+ClookUpDlg::ClookUpDlg(wxWindow *parent, const wxString &windowTitle, const wxString &tableName,
+ const wxString &dispCol1, const wxString &dispCol2,
+ const wxString &where, const wxString &orderBy,
wxDb *pDb, const wxString &defDir, bool distinctValues,
- wxChar *selectStmt, int maxLenCol1, bool allowOk)
+ const wxString &selectStmt, int maxLenCol1, bool allowOk)
: wxDialog (parent, LOOKUP_DIALOG, wxT("Select..."), wxDefaultPosition, wxSize(400, 290))
{
wxBeginBusyCursor();
widgetPtrsSet = false;
lookup = 0;
lookup2 = 0;
- noDisplayCols = (wxStrlen(dispCol2) ? 2 : 1);
+
+ noDisplayCols = (dispCol2.Length() == 0 ? 1 : 2);
col1Len = 0;
- wxFont fixedFont(12,wxMODERN,wxNORMAL,wxNORMAL);
+ wxFont fixedFont(12, wxMODERN, wxNORMAL, wxNORMAL);
// this is done with fixed font so that the second column (if any) will be left
// justified in the second column
if (!lookup2->Open())
{
wxString tStr;
- tStr.Printf(wxT("Unable to open the table '%s'."),tableName);
+ tStr.Printf(wxT("Unable to open the table '%s'."),tableName.c_str());
tStr += GetExtendedDBErrorMsg2(pDb,__TFILE__,__LINE__);
wxMessageBox(tStr,wxT("ODBC Error..."));
Close();
// If displaying 2 columns, determine the maximum length of column1
int maxColLen;
- if (maxLenCol1)
+ if (maxLenCol1 > 0)
maxColLen = col1Len = maxLenCol1; // user passed in max col length for column 1
else
{
+ // NOTE: Some databases (Firebird/Interbase) cannot handle the "fn" and "MAX()" functions
+
maxColLen = LOOKUP_COL_LEN;
if (wxStrlen(dispCol2))
{
}
if (!lookup2->QueryBySqlStmt(q))
{
- wxMessageBox(wxT("ODBC error during QueryBySqlStmt()"),wxT("ODBC Error..."));
+ wxString tStr;
+ tStr = wxT("ODBC error during QueryBySqlStmt()\n\n");
+ wxMessageBox(wxDbLogExtendedErrorMsg(tStr.c_str(),lookup2->GetDb(),__TFILE__,__LINE__),
+ wxT("ODBC Error..."),wxOK | wxICON_EXCLAMATION);
+
Close();
return;
}
if (lookup2->GetNext())
maxColLen = col1Len = wxAtoi(lookup2->lookupCol1);
else
- wxMessageBox(wxT("ODBC error during GetNext()"),wxT("ODBC Error..."));
+ {
+ wxString tStr;
+ tStr = wxT("ODBC error during GetNext()\n\n");
+ wxMessageBox(wxDbLogExtendedErrorMsg(tStr.c_str(),lookup2->GetDb(),__TFILE__,__LINE__),
+ wxT("ODBC Error..."),wxOK | wxICON_EXCLAMATION);
+ }
}
}
{
if (!lookup2->QueryBySqlStmt(selectStmt))
{
- wxMessageBox(wxT("ODBC error during QueryBySqlStmt()"),wxT("ODBC Error..."));
+ wxString tStr;
+ tStr = wxT("ODBC error during QueryBySqlStmt()\n\n");
+ wxMessageBox(wxDbLogExtendedErrorMsg(tStr.c_str(),lookup2->GetDb(),__TFILE__,__LINE__),
+ wxT("ODBC Error..."),wxOK | wxICON_EXCLAMATION);
+
Close();
return;
}
lookup2->SetWhereClause(where);
if (!lookup2->Query(false, distinctValues))
{
- wxMessageBox(wxT("ODBC error during Query()"),wxT("ODBC Error..."));
+ wxString tStr;
+ tStr = wxT("ODBC error during Query()\n\n");
+ wxMessageBox(wxDbLogExtendedErrorMsg(tStr.c_str(),lookup2->GetDb(),__TFILE__,__LINE__),
+ wxT("ODBC Error..."),wxOK | wxICON_EXCLAMATION);
+
Close();
return;
}
} // ClookUpDlg::OnClose
+void ClookUpDlg::OnDClick( wxCommandEvent &event )
+{
+ wxWindow *win = (wxWindow*) event.GetEventObject();
+ OnCommand( *win, event );
+}
+
+
void ClookUpDlg::OnButton( wxCommandEvent &event )
{
wxWindow *win = (wxWindow*) event.GetEventObject();
if (widgetPtrsSet)
{
+ bool doubleclick = false;
+ // Double click
+ if (widgetName == pLookUpSelectList->GetName())
+ {
+ doubleclick = true;
+ } // Double click
+
// OK Button
- if (widgetName == pLookUpOkBtn->GetName())
+ if (widgetName == pLookUpOkBtn->GetName() || doubleclick)
{
if (pLookUpSelectList->GetSelection() != -1)
{
wxStrcpy (ListDB_Selection2,wxT(""));
Close();
} // Cancel Button
+
}
}; // ClookUpDlg::OnCommand