// SYNOPSIS START
// SYNOPSIS STOP
*/
+#ifdef __GNUG__
+ #pragma implementation "db.h"
+#endif
#include "wx/wxprec.h"
-
-// Use this line for wxWindows v1.x
-//#include "wx_ver.h"
-// Use this line for wxWindows v2.x
-#include "wx/version.h"
-
-#if wxMAJOR_VERSION == 2
- #ifdef __GNUG__
- #pragma implementation "db.h"
- #endif
+#ifdef __BORLANDC__
+ #pragma hdrstop
#endif
#ifdef DBDEBUG_CONSOLE
#include "wx/ioswrap.h"
#endif
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif //__BORLANDC__
-
-#if wxMAJOR_VERSION == 2
- #ifndef WX_PRECOMP
- #include "wx/string.h"
- #include "wx/object.h"
- #include "wx/list.h"
- #include "wx/utils.h"
+#ifndef WX_PRECOMP
+ #include "wx/string.h"
+ #include "wx/object.h"
+ #include "wx/list.h"
+ #include "wx/utils.h"
+ #if wxUSE_GUI
#include "wx/msgdlg.h"
- #include "wx/log.h"
#endif
- #include "wx/filefn.h"
- #include "wx/wxchar.h"
-#endif
-
-
-#if wxMAJOR_VERSION == 1
-# if defined(wx_msw) || defined(wx_x)
-# ifdef WX_PRECOMP
-# include "wx_prec.h"
-# else
-# include "wx.h"
-# endif
-# endif
-# define wxUSE_ODBC 1
+ #include "wx/log.h"
#endif
+#include "wx/filefn.h"
+#include "wx/wxchar.h"
#if wxUSE_ODBC
#include <stdlib.h>
#include <ctype.h>
-#if wxMAJOR_VERSION == 1
- #include "db.h"
-#elif wxMAJOR_VERSION == 2
- #include "wx/db.h"
-#endif
+#include "wx/db.h"
WXDLLEXPORT_DATA(wxDbList*) PtrBegDbList = 0;
// connection
wxChar DBerrorList[DB_MAX_ERROR_HISTORY][DB_MAX_ERROR_MSG_LEN];
+
// This type defines the return row-struct form
// SQLTablePrivileges, and is used by wxDB::TablePrivileges.
typedef struct
} // wxDbInf::Initialize()
-/********** wxDb Constructors **********/
+/********** wxDb Constructor **********/
wxDb::wxDb(const HENV &aHenv, bool FwdOnlyCursors)
{
// Copy the HENV into the db class
} // wxDb::wxDb()
+/********** wxDb Destructor **********/
+wxDb::~wxDb()
+{
+ wxASSERT_MSG(!IsCached(),wxT("Cached connections must not be manually deleted, use\nwxDbFreeConnection() or wxDbCloseConnections()."));
+
+ if (IsOpen())
+ {
+ Close();
+ }
+} // wxDb destructor
+
+
+
/********** PRIVATE! wxDb::initialize PRIVATE! **********/
/********** wxDb::initialize() **********/
void wxDb::initialize()
// Mark database as not open as of yet
dbIsOpen = FALSE;
+ dbIsCached = FALSE;
} // wxDb::initialize()
// Date/Time
if (Dbms() != dbmsDBASE)
{
- if (! getDataTypeInfo(SQL_TIMESTAMP,typeInfDate))
+ if (!getDataTypeInfo(SQL_TIMESTAMP,typeInfDate))
return(FALSE);
else
typeInfDate.FsqlType = SQL_TIMESTAMP;
{
s.Printf(wxT("(%-20s) tableID:[%6lu] pDb:[%p]"), tiu->tableName,tiu->tableID,tiu->pDb);
s2.Printf(wxT("Orphaned found using pDb:[%p]"),this);
- wxLogDebug (s,s2);
+ wxLogDebug (s.c_str(),s2.c_str());
}
pNode = pNode->Next();
}
for (i = 0; i < DB_MAX_ERROR_HISTORY; i++)
wxStrcpy(DBerrorList[i], errorList[i]);
- dbmsType = dbmsUNIDENTIFIED;
+ dbmsType = dbmsUNIDENTIFIED;
dbIsOpen = FALSE;
} // wxDb::Close()
}
}
- return(FALSE); // This function always returns false.
+ return(FALSE); // This function always returns FALSE.
} // wxDb::DispAllErrors()
}
// Commit the transaction
- if (! CommitTrans())
+ if (!CommitTrans())
return(FALSE);
return TRUE;
*/
{
UWORD noCols = 0;
- UWORD colNo = 0;
+ UWORD colNo = 0;
wxDbColInf *colInf = 0;
RETCODE retcode;
/********** wxDb::GetColumnCount() **********/
-UWORD wxDb::GetColumnCount(const wxString &tableName, const wxChar *userID)
+int wxDb::GetColumnCount(const wxString &tableName, const wxChar *userID)
/*
* Returns a count of how many columns are in a table.
* If an error occurs in computing the number of columns
bool wxDb::TableExists(const wxString &tableName, const wxChar *userID, const wxString &tablePath)
/*
- * Table name can refer to a table, view, alias or synonym. Returns true
+ * Table name can refer to a table, view, alias or synonym. Returns TRUE
* if the object exists in the database. This function does not indicate
* whether or not the user has privleges to query or perform other functions
* on the table.
// Initialize new node in the linked list
pList->PtrNext = 0;
pList->Free = FALSE;
- pList->Dsn = pDbConfig->GetDsn(); //glt - will this assignment work?
+ pList->Dsn = pDbConfig->GetDsn();
pList->Uid = pDbConfig->GetUserID();
pList->AuthStr = pDbConfig->GetPassword();
// Connect to the datasource
if (opened)
{
+ pList->PtrDb->setCached(TRUE); // Prevent a user from deleting a cached connection
pList->PtrDb->SetSqlLogging(SQLLOGstate,SQLLOGfn,TRUE);
return(pList->PtrDb);
}
pNext = pList->PtrNext; // Save the pointer to next
pList->PtrDb->CommitTrans(); // Commit any open transactions on wxDb object
pList->PtrDb->Close(); // Close the wxDb object
+ pList->PtrDb->setCached(FALSE); // Allows deletion of the wxDb instance
delete pList->PtrDb; // Deletes the wxDb object
delete pList; // Deletes the linked list object
}
} // wxDbConnectionsInUse()
+
+/********** wxDbLogExtendedErrorMsg() **********/
+// DEBUG ONLY function
+const wxChar WXDLLEXPORT *wxDbLogExtendedErrorMsg(const wxChar *userText, wxDb *pDb,
+ char *ErrFile, int ErrLine)
+{
+ static wxString msg;
+ msg = userText;
+
+ wxString tStr;
+
+ if (ErrFile || ErrLine)
+ {
+ msg += wxT("File: ");
+ msg += ErrFile;
+ msg += wxT(" Line: ");
+ tStr.Printf(wxT("%d"),ErrLine);
+ msg += tStr.c_str();
+ msg += wxT("\n");
+ }
+
+ msg.Append (wxT("\nODBC errors:\n"));
+ msg += wxT("\n");
+
+ // Display errors for this connection
+ int i;
+ for (i = 0; i < DB_MAX_ERROR_HISTORY; i++)
+ {
+ if (pDb->errorList[i])
+ {
+ 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");
+
+ wxLogDebug(msg.c_str());
+
+ return msg.c_str();
+} // wxDbLogExtendedErrorMsg()
+
+
/********** wxDbSqlLog() **********/
bool wxDbSqlLog(wxDbSqlLogState state, const wxChar *filename)
{