]> git.saurik.com Git - wxWidgets.git/blobdiff - demos/dbbrowse/browsedb.cpp
switching to native focus handling
[wxWidgets.git] / demos / dbbrowse / browsedb.cpp
index 5a659d131eee42a835c89f88364dee16064801bb..f5ee9c86f6f07348dcec31af465ddfd12ef895ec 100644 (file)
@@ -1,7 +1,7 @@
 //----------------------------------------------------------------------------------------
 // Name:        BrowserDB.h,cpp
 // Purpose:     a wxDB class
-// Author:      Mark Johnson, mj10777@gmx.net
+// Author:      Mark Johnson
 // Modified by:
 // Created:     19991127.mj10777
 // Copyright:   (c) Mark Johnson
 #include "std.h"
 //----------------------------------------------------------------------------------------
 // Global structure for holding ODBC connection information
-// - darf nur einmal im Projekte definiert werden ?? Extra Databasse Klasse ?
-struct DbStuff ConnectInf;      // Für DBase
+wxDbConnectInf DbConnectInf;
+
+#if !wxUSE_ODBC
+  #error Demo cannot be compiled unless setup.h has wxUSE_ODBC set to 1
+#endif
+
 //----------------------------------------------------------------------------------------
-extern DbList* WXDLLEXPORT PtrBegDbList;    /* from db.cpp, used in getting back error results from db connections */
+extern WXDLLEXPORT_DATA(wxDbList*) PtrBegDbList;    /* from db.cpp, used in getting back error results from db connections */
+
 //----------------------------------------------------------------------------------------
-char *GetExtendedDBErrorMsg(char *ErrFile, int ErrLine)
+wxChar *GetExtendedDBErrorMsg(wxChar *ErrFile, int ErrLine)
 {
- static wxString msg;
- wxString tStr;
- if (ErrFile || ErrLine)
- {
-  msg += "File: ";
-  msg += ErrFile;
-  msg += "   Line: ";
-  tStr.Printf("%d",ErrLine);
-  msg += tStr.GetData();
-  // msg += "\n";
- }
- msg.Append ("\nODBC errors:\n");
- // msg += "\n";
- /* Scan through each database connection displaying
-  * any ODBC errors that have occured. */
- for (DbList *pDbList = PtrBegDbList; pDbList; pDbList = pDbList->PtrNext)
- {
-  // 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 (pDbList->PtrDb->errorList[i])
-   {
-    msg.Append(pDbList->PtrDb->errorList[i]);
-    if (strcmp(pDbList->PtrDb->errorList[i],"") != 0)
-     msg.Append("\n");
-   }
-  }
- }
- msg += "\n";
- return (char*) (const char*) msg;
+    static wxString msg;
+    wxString tStr;
+    if (ErrFile || ErrLine)
+    {
+        msg += _T("File: ");
+        msg += ErrFile;
+        msg += _T("   Line: ");
+        tStr.Printf(_T("%d"),ErrLine);
+        msg += tStr.GetData();
+        // msg += _T("\n");
+    }
+    msg.Append (_T("\nODBC errors:\n"));
+    // msg += _T("\n");
+    /* Scan through each database connection displaying
+    * any ODBC errors that have occured. */
+    wxDbList *pDbList;
+    for (pDbList = PtrBegDbList; pDbList; pDbList = pDbList->PtrNext)
+    {
+        // 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 (pDbList->PtrDb->errorList[i])
+            {
+                msg.Append(pDbList->PtrDb->errorList[i]);
+                if (wxStrcmp(pDbList->PtrDb->errorList[i],_T("")) != 0)
+                    msg.Append(_T("\n"));
+            }
+        }
+    }
+    msg += _T("\n");
+    return (wxChar*) (const wxChar*) msg;
 }  // GetExtendedDBErrorMsg
 
 //----------------------------------------------------------------------------------------
 BrowserDB::BrowserDB()
 {
Zeiger_auf_NULL(0);
ODBCSource = "";             // ODBC data source name (created with ODBC Administrator under Win95/NT)
UserName   = "";             // database username - must already exist in the data source
Password   = "";             // password database username
- OnFillSqlTyp();
- OnFilldbTyp();
   PointerToNULL(0);
   ODBCSource = _T("");  // ODBC data source name (created with ODBC Administrator under Win95/NT)
   UserName   = _T("");  // database username - must already exist in the data source
   Password   = _T("");  // password database username
   OnFillSqlTyp();
   OnFilldbTyp();
 }  // BrowserDB Constructor
+
 //----------------------------------------------------------------------------------------
 BrowserDB::~BrowserDB()
 {
Zeiger_auf_NULL(1);  // Clean up Tables and Databases (Commit, Close und delete)
   PointerToNULL(1);  // Clean up Tables and Databases (Commit, Close and delete)
 }  // BrowserDB destructor
+
 //----------------------------------------------------------------------------------------
-bool BrowserDB::Initialize(int Quite)
+bool BrowserDB::Initialize(int Quiet)
 {
if (!OnStartDB(Quite))
- {
-  wxLogMessage(_("\n\n-E-> BrowserDB::OnStartDB(%s) : Failed ! "),ODBCSource.c_str());
-  return FALSE;
- }
- return TRUE;
   if (!OnStartDB(Quiet))
   {
+        wxLogMessage(_("\n\n-E-> BrowserDB::OnStartDB(%s) : Failed ! "),ODBCSource.c_str());
+        return FALSE;
   }
   return TRUE;
 }  // BrowserDB:Initialize
+
 //----------------------------------------------------------------------------------------
-bool BrowserDB::OnStartDB(int Quite)
+bool BrowserDB::OnStartDB(int Quiet)
 {
- wxStopWatch sw;
- if (!Quite)
-  wxLogMessage(_("\n-I-> BrowserDB::OnStartDB(%s) : Begin "),ODBCSource.c_str());
- if (db_BrowserDB != NULL)
- {
-  if (!Quite)
-   wxLogMessage(_("\n-I-> BrowserDB::OnStartDB() : DB is allready open."));
-  return TRUE;
- }
- // Initialize the ODBC Environment for Database Operations
- if (SQLAllocEnv(&ConnectInf.Henv) != SQL_SUCCESS)
- {
-  if (!Quite)
-   wxLogMessage(_("\n-E-> BrowserDB::OnStartDB() : DB CONNECTION ERROR : A problem occured while trying to get a connection to the data source"));
-  return FALSE;
- }
- //---------------------------------------------------------------------------------------
- // Connect to datasource
- //---------------------------------------------------------------------------------------
- DlgUser *p_Dlg;
- p_Dlg = new DlgUser(pDoc->p_MainFrame,pDoc,"");
- p_Dlg->s_DSN      = ODBCSource;
- p_Dlg->s_User     = UserName;
- p_Dlg->s_Password = Password;
- p_Dlg->OnInit();
- p_Dlg->Fit();
+    wxStopWatch sw;
+    if (!Quiet)
+        wxLogMessage(_("\n-I-> BrowserDB::OnStartDB(%s) : Begin "),ODBCSource.c_str());
+    if (db_BrowserDB != NULL)
+    {
+        if (!Quiet)
+            wxLogMessage(_("\n-I-> BrowserDB::OnStartDB() : DB is already open."));
+        return TRUE;
+    }
+
+    DbConnectInf.AllocHenv();
 
- bool OK = FALSE;
- if (p_Dlg->ShowModal() == wxID_OK)
- {
-  (pDoc->p_DSN+i_Which)->Usr = p_Dlg->s_User;
-  (pDoc->p_DSN+i_Which)->Pas = p_Dlg->s_Password;
-  UserName  = p_Dlg->s_User;
-  Password  = p_Dlg->s_Password;
-  OK = TRUE;
- }
- delete p_Dlg;
- if (OK)
- {
-  //--------------------------------------------------------------------------------------
-  strcpy(ConnectInf.Dsn, ODBCSource);           // ODBC data source name (created with ODBC Administrator under Win95/NT)
-  strcpy(ConnectInf.Uid, UserName);             // database username - must already exist in the data source
-  strcpy(ConnectInf.AuthStr, Password);         // password database username
-  db_BrowserDB = GetDbConnection(&ConnectInf);
-  // wxLogMessage(">>>%s<<<>>>%s<<<",UserName.c_str(),Password.c_str());
-  if (db_BrowserDB == NULL)
-  {
-   strcpy(ConnectInf.Dsn, "");
-   strcpy(ConnectInf.Uid, "");
-   strcpy(ConnectInf.AuthStr, "");
-   if (!Quite)
-   {
-    wxLogMessage(_("\n-E-> BrowserDB::OnConnectDataSource() DB CONNECTION ERROR : Unable to connect to the data source.\n\nCheck the name of your data source to verify it has been correctly entered/spelled.\n\nWith some databases, the user name and password must\nbe created with full rights to the table prior to making a connection\n(using tools provided by the database manufacturer)"));
-    wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End - Time needed : %ld ms"),ODBCSource.c_str(),sw.Time());
-   }
-   return FALSE;
-  }
-  //--------------------------------------------------------------------------------------
-  if (!Quite)
-  {
-   Temp1 = db_BrowserDB->GetDatabaseName();
-   Temp2 = db_BrowserDB->GetDataSource();
-   wxLogMessage(_("-I-> BrowserDB::OnGetDataSourceODBC() - DatabaseName(%s) ; DataSource(%s)"),Temp1.c_str(),Temp2.c_str());
-   wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End - Time needed : %ld ms"),ODBCSource.c_str(),sw.Time());
-  }
-  return TRUE;
- } else return FALSE;
+    //---------------------------------------------------------------------------------------
+    // Connect to datasource
+    //---------------------------------------------------------------------------------------
+    DlgUser *p_Dlg;
+    p_Dlg = new DlgUser(pDoc->p_MainFrame,pDoc,_T(""));
+    p_Dlg->s_DSN      = ODBCSource;
+    p_Dlg->s_User     = UserName;
+    p_Dlg->s_Password = Password;
+    p_Dlg->OnInit();
+    p_Dlg->Fit();
+    
+    bool OK = FALSE;
+    if (p_Dlg->ShowModal() == wxID_OK)
+    {
+        (pDoc->p_DSN+i_Which)->Usr = p_Dlg->s_User;
+        (pDoc->p_DSN+i_Which)->Pas = p_Dlg->s_Password;
+        UserName  = p_Dlg->s_User;
+        Password  = p_Dlg->s_Password;
+        OK = TRUE;
+    }
+    delete p_Dlg;
+    if (OK)
+    {
+        //--------------------------------------------------------------------------------------
+        DbConnectInf.SetDsn(ODBCSource);         // ODBC data source name (created with ODBC Administrator under Win95/NT)
+        DbConnectInf.SetUserID(UserName);        // database username - must already exist in the data source
+        DbConnectInf.SetPassword(Password);      // password database username
+        db_BrowserDB = wxDbGetConnection(&DbConnectInf);
+        // wxLogMessage(">>>%s<<<>>>%s<<<",UserName.c_str(),Password.c_str());
+        if (db_BrowserDB == NULL)
+        {
+            DbConnectInf.SetDsn(wxT(""));
+            DbConnectInf.SetUserID(wxT(""));
+            DbConnectInf.SetPassword(wxT(""));
+            if (!Quiet)
+            {
+                wxLogMessage(_("\n-E-> BrowserDB::OnConnectDataSource() DB CONNECTION ERROR : Unable to connect to the data source.\n\nCheck the name of your data source to verify it has been correctly entered/spelled.\n\nWith some databases, the user name and password must\nbe created with full rights to the table prior to making a connection\n(using tools provided by the database manufacturer)"));
+                wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End - Time needed : %ld ms"),ODBCSource.c_str(),sw.Time());
+            }
+            DbConnectInf.FreeHenv();
+            return FALSE;
+        }
+        //--------------------------------------------------------------------------------------
+        if (!Quiet)
+        {
+            Temp1 = db_BrowserDB->GetDatabaseName();
+            Temp2 = db_BrowserDB->GetDataSource();
+            wxLogMessage(_("-I-> BrowserDB::OnGetDataSourceODBC() - DatabaseName(%s) ; DataSource(%s)"),Temp1.c_str(),Temp2.c_str());
+            wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End - Time needed : %ld ms"),ODBCSource.c_str(),sw.Time());
+        }
+        return TRUE;
+    }
+    else
+    {
+        DbConnectInf.FreeHenv();
+        return FALSE;
+    }
 }
+
 //----------------------------------------------------------------------------------------
-bool BrowserDB::OnCloseDB(int Quite)
+bool BrowserDB::OnCloseDB(int Quiet)
 {
- if (!Quite)
-  wxLogMessage(_("-I-> BrowserDB::OnCloseDB() : Begin "));
- if (db_BrowserDB)
- {
-  db_BrowserDB->Close();
-  FreeDbConnection(db_BrowserDB);
+    if (!Quiet)
+        wxLogMessage(_("-I-> BrowserDB::OnCloseDB() : Begin "));
+    if (db_BrowserDB)
+    {
+//        db_BrowserDB->Close();
+        wxDbFreeConnection(db_BrowserDB);
+
+        DbConnectInf.FreeHenv();
 
-  // Free Environment Handle that ODBC uses
-  if (SQLFreeEnv(&ConnectInf.Henv) != SQL_SUCCESS)
-  {
-   // Error freeing environment handle
-  }
-  db_BrowserDB = NULL;
- }
- if (!Quite)
-  wxLogMessage(_("\n-I-> BrowserDB::OnCloseDB() : End "));
- return TRUE;
+        db_BrowserDB = NULL;
+    }
+    if (!Quiet)
+        wxLogMessage(_("\n-I-> BrowserDB::OnCloseDB() : End "));
+    return TRUE;
 }
+
 //----------------------------------------------------------------------------------------
-bool BrowserDB::OnGetNext(int Cols,int Quite)
+bool BrowserDB::OnGetNext(int Cols,int WXUNUSED(Quiet))
 {
- SDWORD cb;
- int      i_dbDataType;
- int   i=0;
- char             s_temp[1024+1];
- long             l_temp;
- double           f_temp;
- int              AnzError=0;
- TIMESTAMP_STRUCT t_temp;
- wxString Temp0;
- //-----------------------------
- if (!db_BrowserDB->GetNext())
- {
-  return FALSE;
-  Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext \n-E-> "));
-  Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
-  wxLogMessage(Temp0);
-  wxMessageBox(Temp0);
- }
- else
- {
-  for (i=0;i<Cols;i++)
-  {
-   strcpy((cl_BrowserDB+i)->tableName,"-E->");
-   i_dbDataType = (cl_BrowserDB->pColFor+i)->i_dbDataType;
-   if (i_dbDataType == 0)                        // Filter unsupported dbDataTypes
-   {
-    if (((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_VARCHAR) || ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_LONGVARCHAR))
-     i_dbDataType = DB_DATA_TYPE_VARCHAR;
-    if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_DATE)
-     i_dbDataType = DB_DATA_TYPE_DATE;
-    if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_BIT)
-     i_dbDataType = DB_DATA_TYPE_INTEGER;
-    if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_NUMERIC)
-     i_dbDataType = DB_DATA_TYPE_VARCHAR;
-    if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_REAL)
-     i_dbDataType = DB_DATA_TYPE_FLOAT;
-   }
-   if ((i_dbDataType == DB_DATA_TYPE_INTEGER) && ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_DOUBLE))
-   {   // DBASE Numeric
-    i_dbDataType = DB_DATA_TYPE_FLOAT;
-   }
-   switch(i_dbDataType)
-   {
-    case DB_DATA_TYPE_VARCHAR:
-     strcpy(s_temp,"");
-     if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_dbDataType,&s_temp,sizeof(s_temp), &cb))
-     {
-      Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext of >%s<.\n-E-> "),(cl_BrowserDB+i)->tableName);
-      Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
-      wxLogMessage(Temp0);
-     }
-     Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,s_temp);
-     strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
-    break;
-    case DB_DATA_TYPE_INTEGER:
-     l_temp = 0;
-     if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&l_temp,sizeof(l_temp), &cb))
-     {
-      Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> "));
-      Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
-     }
-     else
-     {
-      Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,l_temp);
-      strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
-     }
-    break;
-    case DB_DATA_TYPE_FLOAT:
-     f_temp = 0;
-     if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&f_temp,sizeof(f_temp), &cb))
-     {
-      Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> "));
-      Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
-      wxMessageBox(Temp0);
-     }
-     else
-     {
-      Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,f_temp);
-      strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
-     }
-    break;
-    case DB_DATA_TYPE_DATE:
-     t_temp.day = t_temp.month = t_temp.year = t_temp.hour = t_temp.minute = t_temp.second = t_temp.fraction = 0;
-     if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&t_temp,sizeof(t_temp), &cb))
-     {
-      Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> "));
-      Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
-     }
-     else
-     {
-      // i_Nation =  0 = timestamp , 1=EU, 2=UK, 3=International, 4=US
-      if (((cl_BrowserDB->pColFor+i)->i_Nation == 0)  ||  // TS  YYYY-MM-DD
-          ((cl_BrowserDB->pColFor+i)->i_Nation == 3))     // IT  YYYY-MM-DD
-      {
-       Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.year,t_temp.month,t_temp.day,
-                                   t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction);
-       strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
-      }
-      if (((cl_BrowserDB->pColFor+i)->i_Nation == 1) ||  // EU  DD.MM.YYYY
-           ((cl_BrowserDB->pColFor+i)->i_Nation == 2))   // UK  DD/MM/YYYY
-      {
-       Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.day,t_temp.month,t_temp.year,
-                                   t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction);
-       strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
-      }
-      if ((cl_BrowserDB->pColFor+i)->i_Nation == 3)      // US  MM/DD/YYYY
-      {
-       Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.month,t_temp.day,t_temp.year,
-                                   t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction);
-       strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
-      }
-     }
-    break;
-    default:
-     AnzError++;
-     if (AnzError <= 100)
-     {
-      Temp0 = (cl_BrowserDB+i)->colName;
-      wxLogMessage(_("-E-> BrowserDB::OnGetNext - DB_DATA_TYPE_?? (%d) in Col(%s)"),(cl_BrowserDB->pColFor+i)->i_dbDataType,Temp0.c_str());
-     }
-     else
-      return TRUE;
-     Temp0.Printf(_("-E-> unknown Format(%d) - sql(%d)"),(cl_BrowserDB->pColFor+i)->i_dbDataType,(cl_BrowserDB->pColFor+i)->i_sqlDataType);
-     strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
-    break;
-   };
-  }
- }
- // wxLogMessage("-E-> BrowserDB::OnGetNext - End");
- return TRUE;
+    SDWORD cb;
+    int i_dbDataType;
+    wxChar s_temp[1024+1];
+    long l_temp;
+    double f_temp;
+    int AnzError=0;
+    TIMESTAMP_STRUCT t_temp;
+    wxString Temp0;
+    //-----------------------------
+    if (!db_BrowserDB->GetNext())
+    {
+#ifdef __WXDEBUG__
+        Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext \n-E-> "));
+        Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__);
+        wxLogMessage(Temp0);
+        wxMessageBox(Temp0);
+#endif
+        return FALSE;
+    }
+    else
+    {
+        int i;
+        for (i=0;i<Cols;i++)
+        {
+            wxStrcpy((cl_BrowserDB+i)->tableName,_T("-E->"));
+            i_dbDataType = (cl_BrowserDB+i)->pColFor->i_dbDataType;
+            if (i_dbDataType == 0)         // Filter unsupported dbDataTypes
+            {
+                if (((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_VARCHAR) ||
+                          ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_LONGVARCHAR))
+                    i_dbDataType = DB_DATA_TYPE_VARCHAR;
+                if ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_C_DATE)
+                    i_dbDataType = DB_DATA_TYPE_DATE;
+                if ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_C_BIT)
+                    i_dbDataType = DB_DATA_TYPE_INTEGER;
+                if ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_NUMERIC)
+                    i_dbDataType = DB_DATA_TYPE_VARCHAR;
+                if ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_REAL)
+                    i_dbDataType = DB_DATA_TYPE_FLOAT;
+            }
+            if ((i_dbDataType == DB_DATA_TYPE_INTEGER) &&
+                     ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_C_DOUBLE))
+            {    // DBASE Numeric
+                i_dbDataType = DB_DATA_TYPE_FLOAT;
+            }
+            switch(i_dbDataType)
+            {
+            case DB_DATA_TYPE_VARCHAR:
+                wxStrcpy(s_temp,_T(""));
+                if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB+i)->pColFor->i_dbDataType,&s_temp,sizeof(s_temp), &cb))
+                {
+                    Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext of >%s<.\n-E-> "),(cl_BrowserDB+i)->tableName);
+                    Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__);
+                    wxLogMessage(Temp0);
+                }
+                Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,s_temp);
+                wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
+                break;
+            case DB_DATA_TYPE_INTEGER:
+                l_temp = 0;
+                if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB+i)->pColFor->i_sqlDataType,&l_temp,sizeof(l_temp), &cb))
+                {
+                    Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> "));
+                    Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__);
+                }
+                else
+                {
+                    Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,l_temp);
+                    wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
+                }
+                break;
+            case DB_DATA_TYPE_FLOAT:
+                f_temp = 0;
+                if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB+i)->pColFor->i_sqlDataType,&f_temp,sizeof(f_temp), &cb))
+                {
+                    Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> "));
+                    Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__);
+                    wxMessageBox(Temp0);
+                }
+                else
+                {
+                    Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,f_temp);
+                    wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
+                }
+                break;
+            case DB_DATA_TYPE_DATE:
+                t_temp.day = t_temp.month = t_temp.year = t_temp.hour = t_temp.minute = t_temp.second = t_temp.fraction = 0;
+                if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB+i)->pColFor->i_sqlDataType,&t_temp,sizeof(t_temp), &cb))
+                {
+                    Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> "));
+                    Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__);
+                }
+                else
+                {
+                    // i_Nation =  0 = timestamp , 1=EU, 2=UK, 3=International, 4=US
+                    if (((cl_BrowserDB+i)->pColFor->i_Nation == 0)    ||    // TS  YYYY-MM-DD
+                        ((cl_BrowserDB+i)->pColFor->i_Nation == 3))     // IT  YYYY-MM-DD
+                    {
+                        Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,t_temp.year,t_temp.month,t_temp.day,
+                            t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction);
+                        wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
+                    }
+                    if (((cl_BrowserDB+i)->pColFor->i_Nation == 1) ||  // EU  DD.MM.YYYY
+                        ((cl_BrowserDB+i)->pColFor->i_Nation == 2))   // UK  DD/MM/YYYY
+                    {
+                        Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,t_temp.day,t_temp.month,t_temp.year,
+                            t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction);
+                        wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
+                    }
+                    if ((cl_BrowserDB+i)->pColFor->i_Nation == 3)    // US  MM/DD/YYYY
+                    {
+                        Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,t_temp.month,t_temp.day,t_temp.year,
+                            t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction);
+                        wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
+                    }
+                }
+                break;
+            default:
+                AnzError++;
+                if (AnzError <= 100)
+                {
+                    Temp0 = (cl_BrowserDB+i)->colName;
+                    wxLogMessage(_("-E-> BrowserDB::OnGetNext - DB_DATA_TYPE_?? (%d) in Col(%s)"),(cl_BrowserDB+i)->pColFor->i_dbDataType,Temp0.c_str());
+                }
+                else
+                    return TRUE;
+                Temp0.Printf(_("-E-> unknown Format(%d) - sql(%d)"),(cl_BrowserDB+i)->pColFor->i_dbDataType,(cl_BrowserDB+i)->pColFor->i_sqlDataType);
+                wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
+                break;
+            };  // switch
+        }  // for
+    }  // else
+
+    return TRUE;
 }
+
 //----------------------------------------------------------------------------------------
-bool BrowserDB::OnSelect(wxString tb_Name, int Quite)
+bool BrowserDB::OnSelect(wxString tb_Name, int Quiet)
 {
- wxStopWatch sw;
- wxString SQLStmt;
- i_Records = 0;
- //---------------------------------------------------------------------------------------
- SQLStmt.sprintf("SELECT * FROM %s",tb_Name.c_str());
- if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData())))
- {
-  Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str());
-  Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
-  wxLogMessage(Temp0);
-  wxMessageBox("-E-> BrowserDB::OnSelect - GetData()");
-  return FALSE;
- }
- //---------------------------------------------------------------------------------------
- while (db_BrowserDB->GetNext())
- {
-  i_Records++;
- }
- //---------------------------------------------------------------------------------------
- if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData())))
- {
-  Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str());
-  Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
-  wxLogMessage(Temp0);
-  return FALSE;
- }
- //---------------------------------------------------------------------------------------
- // SetColDefs ( 0,"NAME",     DB_DATA_TYPE_VARCHAR,  Name,     SQL_C_CHAR,      sizeof(Name),    TRUE, TRUE);  // Primary index
- //---------------------------------------------------------------------------------------
- if (!Quite)
- {
-  wxLogMessage(_("\n-I-> BrowserDB::OnSelect(%s) Records(%d): End - Time needed : %ld ms"),tb_Name.c_str(),i_Records,sw.Time());
- }
- return TRUE;
+    wxStopWatch sw;
+    wxString SQLStmt;
+    i_Records = 0;
+    //---------------------------------------------------------------------------------------
+    wxString tablename = db_BrowserDB->SQLTableName(tb_Name.c_str());
+    SQLStmt.sprintf(_T("SELECT * FROM %s"),tablename.c_str());
+    if (!db_BrowserDB->ExecSql((wxChar *)(SQLStmt.GetData())))
+    {
+        Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str());
+        Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__);
+        wxLogMessage(Temp0);
+        wxMessageBox(_T("-E-> BrowserDB::OnSelect - GetData()"));
+        return FALSE;
+    }
+    //---------------------------------------------------------------------------------------
+    while (db_BrowserDB->GetNext())
+    {
+        i_Records++;
+    }
+    //---------------------------------------------------------------------------------------
+    if (!db_BrowserDB->ExecSql((wxChar *)(SQLStmt.GetData())))
+    {
+        Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str());
+        Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__);
+        wxLogMessage(Temp0);
+        return FALSE;
+    }
+    //---------------------------------------------------------------------------------------
+    // SetColDefs ( 0,"NAME",    DB_DATA_TYPE_VARCHAR,  Name,     SQL_C_CHAR,          sizeof(Name),    TRUE, TRUE);  // Primary index
+    //---------------------------------------------------------------------------------------
+    if (!Quiet)
+    {
+        wxLogMessage(_("\n-I-> BrowserDB::OnSelect(%s) Records(%d): End - Time needed : %ld ms"),tb_Name.c_str(),i_Records,sw.Time());
+    }
+    return TRUE;
 }
+
 //----------------------------------------------------------------------------------------
-bool BrowserDB::OnExecSql(wxString SQLStmt, int Quite)
+bool BrowserDB::OnExecSql(wxString SQLStmt, int Quiet)
 {
- //---------------------------------------------------------------------------------------
if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData())))
- {
-  Temp0.Printf(_("\n-E-> BrowserDB::OnExecSQL - ODBC-Error with ExecSql of >%s<.\n-E-> "),SQLStmt.c_str());
-  Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
-  if (!Quite)
-   wxLogMessage(Temp0);
-  else
-   wxMessageBox("-E-> BrowserDB::OnExecSql - ExecSql()");
-  return FALSE;
- }
if (!Quite)
- {
-  // wxLogMessage(_("\n-I-> BrowserDB::OnExecSql(%s) - End - Time needed : %ld ms"),SQLStmt.c_str(),sw.Time());
- }
- return TRUE;
   //---------------------------------------------------------------------------------------
   if (!db_BrowserDB->ExecSql((wxChar *)(SQLStmt.GetData())))
   {
+        Temp0.Printf(_("\n-E-> BrowserDB::OnExecSQL - ODBC-Error with ExecSql of >%s<.\n-E-> "),SQLStmt.c_str());
+        Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__);
+        if (!Quiet)
+            wxLogMessage(Temp0);
+        else
+            wxMessageBox(_T("-E-> BrowserDB::OnExecSql - ExecSql()"));
+        return FALSE;
   }
   if (!Quiet)
   {
+        // wxLogMessage(_("\n-I-> BrowserDB::OnExecSql(%s) - End - Time needed : %ld ms"),SQLStmt.c_str(),sw.Time());
   }
   return TRUE;
 }
+
 //----------------------------------------------------------------------------------------
-wxDbInf* BrowserDB::OnGetCatalog(int Quite)
+wxDbInf* BrowserDB::OnGetCatalog(int WXUNUSED(Quiet))
 {
char UName[255];
strcpy(UName,UserName);
- ct_BrowserDB = db_BrowserDB->GetCatalog(UName);
- return ct_BrowserDB;
   wxChar UName[255];
   wxStrcpy(UName,UserName);
   ct_BrowserDB = db_BrowserDB->GetCatalog(UName);
   return ct_BrowserDB;
 }
+
 //----------------------------------------------------------------------------------------
-wxColInf* BrowserDB::OnGetColumns(char *tableName, int numCols,int Quite)
+wxDbColInf* BrowserDB::OnGetColumns(wxChar *tableName, UWORD numCols, int WXUNUSED(Quiet))
 {
- char UName[255];
- int i;
- strcpy(UName,UserName);
- cl_BrowserDB = db_BrowserDB->GetColumns(tableName,&numCols,UName);
- cl_BrowserDB->pColFor = new wxColFor[numCols];
- for (i=0;i<numCols;i++)
- {
-  (cl_BrowserDB->pColFor+i)->Format(1,(cl_BrowserDB+i)->dbDataType,(cl_BrowserDB+i)->sqlDataType,
-  (cl_BrowserDB+i)->columnSize, (cl_BrowserDB+i)->decimalDigits);
- }
- return cl_BrowserDB;
+    wxChar UName[255];
+    int i;
+    wxStrcpy(UName,UserName);
+    cl_BrowserDB = db_BrowserDB->GetColumns(tableName,&numCols,UName);
+//    cl_BrowserDB->pColFor = new wxDbColFor[numCols];
+    for (i=0;i<numCols;i++)
+    {
+//        (cl_BrowserDB->pColFor+i)->Format(1,(cl_BrowserDB+i)->dbDataType,(cl_BrowserDB+i)->sqlDataType,
+//            (cl_BrowserDB+i)->columnSize, (cl_BrowserDB+i)->decimalDigits);
+        (cl_BrowserDB+i)->pColFor = new wxDbColFor;
+        (cl_BrowserDB+i)->pColFor->Format(1,
+                                        (cl_BrowserDB+i)->dbDataType,
+                                        (cl_BrowserDB+i)->sqlDataType,
+                                        (cl_BrowserDB+i)->columnSize, 
+                                        (cl_BrowserDB+i)->decimalDigits);
+    }
+    return cl_BrowserDB;
 }
+
 //----------------------------------------------------------------------------------------
-void BrowserDB::Zeiger_auf_NULL(int Art)
+void BrowserDB::PointerToNULL(int Art)
 {
- if (Art == 1) // Löschen
- {
-  if (cl_BrowserDB != NULL)
-  { // Destroy the memory
-   delete [] cl_BrowserDB;
-  }
-  if (ct_BrowserDB != NULL)
-  { // Destroy the memory
-   delete [] ct_BrowserDB;
-  }
-  if (db_BrowserDB != NULL)
-  {
-   db_BrowserDB->CommitTrans();
-   db_BrowserDB->Close();
-   CloseDbConnections();
-   delete db_BrowserDB;
-  }
- }
- cl_BrowserDB       = NULL;
- ct_BrowserDB       = NULL;
- db_BrowserDB       = NULL;
- p_LogWindow        = NULL;
   if (Art == 1) // Löschen
   {
+        if (cl_BrowserDB != NULL)
+        { // Destroy the memory
+            delete [] cl_BrowserDB;
+        }
+        if (ct_BrowserDB != NULL)
+        { // Destroy the memory
+            delete [] ct_BrowserDB;
+        }
+        if (db_BrowserDB != NULL)
+        {
+            db_BrowserDB->CommitTrans();
+            db_BrowserDB->Close();
+            wxDbCloseConnections();
+            delete db_BrowserDB;
+        }
   }
   cl_BrowserDB       = NULL;
   ct_BrowserDB       = NULL;
   db_BrowserDB       = NULL;
   p_LogWindow        = NULL;
 }
+
 //----------------------------------------------------------------------------------------
 void BrowserDB::OnFillSqlTyp()
 {
i_SqlTyp[1]  = SQL_C_BINARY;     s_SqlTyp[1]  = "SQL_C_BINARY";
i_SqlTyp[2]  = SQL_C_BIT;        s_SqlTyp[2]  = "SQL_C_BIT";
i_SqlTyp[3]  = SQL_C_BOOKMARK;   s_SqlTyp[3]  = "SQL_C_BOOKMARK";
i_SqlTyp[4]  = SQL_C_CHAR;       s_SqlTyp[4]  = "SQL_C_CHAR";
i_SqlTyp[5]  = SQL_C_DATE;       s_SqlTyp[5]  = "SQL_C_DATE";
i_SqlTyp[6]  = SQL_C_DEFAULT;    s_SqlTyp[6]  = "SQL_C_DEFAULT";
i_SqlTyp[7]  = SQL_C_DOUBLE;     s_SqlTyp[7]  = "SQL_C_DOUBLE";
i_SqlTyp[8]  = SQL_C_FLOAT;      s_SqlTyp[8]  = "SQL_C_FLOAT";
i_SqlTyp[9]  = SQL_C_LONG;       s_SqlTyp[9]  = "SQL_C_LONG";
i_SqlTyp[10] = SQL_C_SHORT;      s_SqlTyp[10] = "SQL_C_SHORT";
i_SqlTyp[11] = SQL_C_SLONG;      s_SqlTyp[11] = "SQL_C_SLONG";
i_SqlTyp[12] = SQL_C_SSHORT;     s_SqlTyp[12] = "SQL_C_SSHORT";
i_SqlTyp[13] = SQL_C_STINYINT;   s_SqlTyp[13] = "SQL_C_STINYINT";
i_SqlTyp[14] = SQL_C_TIME;       s_SqlTyp[14] = "SQL_C_TIME";
i_SqlTyp[15] = SQL_C_TIMESTAMP;  s_SqlTyp[15] = "SQL_C_TIMESTAMP";
i_SqlTyp[16] = SQL_C_TINYINT;    s_SqlTyp[16] = "SQL_C_TINYINT";
i_SqlTyp[17] = SQL_C_ULONG;      s_SqlTyp[17] = "SQL_C_ULONG";
i_SqlTyp[18] = SQL_C_USHORT;     s_SqlTyp[18] = "SQL_C_USHORT";
i_SqlTyp[19] = SQL_C_UTINYINT;   s_SqlTyp[19] = "SQL_C_UTINYINT";
i_SqlTyp[20] = SQL_VARCHAR;      s_SqlTyp[20] = "SQL_VARCHAR";
i_SqlTyp[21] = SQL_NUMERIC;      s_SqlTyp[21] = "SQL_NUMERIC";
i_SqlTyp[22] = SQL_LONGVARCHAR;  s_SqlTyp[22] = "SQL_LONGVARCHAR";
i_SqlTyp[23] = SQL_REAL;         s_SqlTyp[23] = "SQL_REAL";
i_SqlTyp[0]  = 23;               s_SqlTyp[0]  = "";
   i_SqlTyp[1]  = SQL_C_BINARY;    s_SqlTyp[1]  = _T("SQL_C_BINARY");
   i_SqlTyp[2]  = SQL_C_BIT;       s_SqlTyp[2]  = _T("SQL_C_BIT");
   i_SqlTyp[3]  = SQL_C_BOOKMARK;  s_SqlTyp[3]  = _T("SQL_C_BOOKMARK");
   i_SqlTyp[4]  = SQL_C_CHAR;      s_SqlTyp[4]  = _T("SQL_C_CHAR");
   i_SqlTyp[5]  = SQL_C_DATE;      s_SqlTyp[5]  = _T("SQL_C_DATE");
   i_SqlTyp[6]  = SQL_C_DEFAULT;   s_SqlTyp[6]  = _T("SQL_C_DEFAULT");
   i_SqlTyp[7]  = SQL_C_DOUBLE;    s_SqlTyp[7]  = _T("SQL_C_DOUBLE");
   i_SqlTyp[8]  = SQL_C_FLOAT;     s_SqlTyp[8]  = _T("SQL_C_FLOAT");
   i_SqlTyp[9]  = SQL_C_LONG;      s_SqlTyp[9]  = _T("SQL_C_LONG");
   i_SqlTyp[10] = SQL_C_SHORT;     s_SqlTyp[10] = _T("SQL_C_SHORT");
   i_SqlTyp[11] = SQL_C_SLONG;     s_SqlTyp[11] = _T("SQL_C_SLONG");
   i_SqlTyp[12] = SQL_C_SSHORT;    s_SqlTyp[12] = _T("SQL_C_SSHORT");
   i_SqlTyp[13] = SQL_C_STINYINT;  s_SqlTyp[13] = _T("SQL_C_STINYINT");
   i_SqlTyp[14] = SQL_C_TIME;      s_SqlTyp[14] = _T("SQL_C_TIME");
   i_SqlTyp[15] = SQL_C_TIMESTAMP; s_SqlTyp[15] = _T("SQL_C_TIMESTAMP");
   i_SqlTyp[16] = SQL_C_TINYINT;   s_SqlTyp[16] = _T("SQL_C_TINYINT");
   i_SqlTyp[17] = SQL_C_ULONG;     s_SqlTyp[17] = _T("SQL_C_ULONG");
   i_SqlTyp[18] = SQL_C_USHORT;    s_SqlTyp[18] = _T("SQL_C_USHORT");
   i_SqlTyp[19] = SQL_C_UTINYINT;  s_SqlTyp[19] = _T("SQL_C_UTINYINT");
   i_SqlTyp[20] = SQL_VARCHAR;     s_SqlTyp[20] = _T("SQL_VARCHAR");
   i_SqlTyp[21] = SQL_NUMERIC;     s_SqlTyp[21] = _T("SQL_NUMERIC");
   i_SqlTyp[22] = SQL_LONGVARCHAR; s_SqlTyp[22] = _T("SQL_LONGVARCHAR");
   i_SqlTyp[23] = SQL_REAL;        s_SqlTyp[23] = _T("SQL_REAL");
   i_SqlTyp[0]  = 23;              s_SqlTyp[0]  = _T("");
 }
+
 //----------------------------------------------------------------------------------------
 void BrowserDB::OnFilldbTyp()
 {
i_dbTyp[1]   = DB_DATA_TYPE_VARCHAR;     s_dbTyp[1]  = "DB_DATA_TYPE_VARCHAR";
i_dbTyp[2]   = DB_DATA_TYPE_INTEGER;     s_dbTyp[2]  = "DB_DATA_TYPE_INTEGER";
i_dbTyp[3]   = DB_DATA_TYPE_FLOAT;       s_dbTyp[3]  = "DB_DATA_TYPE_FLOAT";
i_dbTyp[4]   = DB_DATA_TYPE_DATE;        s_dbTyp[4]  = "DB_DATA_TYPE_DATE";
i_dbTyp[0]   = 4;                        s_dbTyp[0]   = "";
   i_dbTyp[1] = DB_DATA_TYPE_VARCHAR; s_dbTyp[1] = _T("DB_DATA_TYPE_VARCHAR");
   i_dbTyp[2] = DB_DATA_TYPE_INTEGER; s_dbTyp[2] = _T("DB_DATA_TYPE_INTEGER");
   i_dbTyp[3] = DB_DATA_TYPE_FLOAT;   s_dbTyp[3] = _T("DB_DATA_TYPE_FLOAT");
   i_dbTyp[4] = DB_DATA_TYPE_DATE;    s_dbTyp[4] = _T("DB_DATA_TYPE_DATE");
   i_dbTyp[0] = 4;                    s_dbTyp[0] = _T("");
 }
 //----------------------------------------------------------------------------------------