wxDbGrid additions
Changed all TRUE/FALSEs to true/false Added wxDbLogExtendedErrorMsg() function to retrieve human readable ODBC error information from the ODBC driver General code cleanup git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10501 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -34,53 +34,30 @@
|
|||||||
// SYNOPSIS START
|
// SYNOPSIS START
|
||||||
// SYNOPSIS STOP
|
// SYNOPSIS STOP
|
||||||
*/
|
*/
|
||||||
|
#ifdef __GNUG__
|
||||||
|
#pragma implementation "db.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "wx/wxprec.h"
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
// Use this line for wxWindows v1.x
|
#pragma hdrstop
|
||||||
//#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
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DBDEBUG_CONSOLE
|
#ifdef DBDEBUG_CONSOLE
|
||||||
#include "wx/ioswrap.h"
|
#include "wx/ioswrap.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __BORLANDC__
|
#ifndef WX_PRECOMP
|
||||||
#pragma hdrstop
|
#include "wx/string.h"
|
||||||
#endif //__BORLANDC__
|
#include "wx/object.h"
|
||||||
|
#include "wx/list.h"
|
||||||
#if wxMAJOR_VERSION == 2
|
#include "wx/utils.h"
|
||||||
#ifndef WX_PRECOMP
|
#include "wx/msgdlg.h"
|
||||||
#include "wx/string.h"
|
#include "wx/log.h"
|
||||||
#include "wx/object.h"
|
|
||||||
#include "wx/list.h"
|
|
||||||
#include "wx/utils.h"
|
|
||||||
#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
|
|
||||||
#endif
|
#endif
|
||||||
|
#include "wx/filefn.h"
|
||||||
|
#include "wx/wxchar.h"
|
||||||
|
|
||||||
#if wxUSE_ODBC
|
#if wxUSE_ODBC
|
||||||
|
|
||||||
@@ -90,11 +67,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#if wxMAJOR_VERSION == 1
|
#include "wx/db.h"
|
||||||
#include "db.h"
|
|
||||||
#elif wxMAJOR_VERSION == 2
|
|
||||||
#include "wx/db.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
WXDLLEXPORT_DATA(wxDbList*) PtrBegDbList = 0;
|
WXDLLEXPORT_DATA(wxDbList*) PtrBegDbList = 0;
|
||||||
|
|
||||||
@@ -121,6 +94,7 @@ static wxString SQLLOGfn = SQL_LOG_FILENAME;
|
|||||||
// connection
|
// connection
|
||||||
wxChar DBerrorList[DB_MAX_ERROR_HISTORY][DB_MAX_ERROR_MSG_LEN];
|
wxChar DBerrorList[DB_MAX_ERROR_HISTORY][DB_MAX_ERROR_MSG_LEN];
|
||||||
|
|
||||||
|
|
||||||
// This type defines the return row-struct form
|
// This type defines the return row-struct form
|
||||||
// SQLTablePrivileges, and is used by wxDB::TablePrivileges.
|
// SQLTablePrivileges, and is used by wxDB::TablePrivileges.
|
||||||
typedef struct
|
typedef struct
|
||||||
@@ -139,7 +113,7 @@ typedef struct
|
|||||||
wxDbConnectInf::wxDbConnectInf()
|
wxDbConnectInf::wxDbConnectInf()
|
||||||
{
|
{
|
||||||
Henv = 0;
|
Henv = 0;
|
||||||
freeHenvOnDestroy = FALSE;
|
freeHenvOnDestroy = false;
|
||||||
|
|
||||||
Initialize();
|
Initialize();
|
||||||
} // Constructor
|
} // Constructor
|
||||||
@@ -151,7 +125,7 @@ wxDbConnectInf::wxDbConnectInf(HENV henv, const wxString &dsn, const wxString &u
|
|||||||
const wxString &fileType, const wxString &description)
|
const wxString &fileType, const wxString &description)
|
||||||
{
|
{
|
||||||
Henv = 0;
|
Henv = 0;
|
||||||
freeHenvOnDestroy = FALSE;
|
freeHenvOnDestroy = false;
|
||||||
|
|
||||||
Initialize();
|
Initialize();
|
||||||
|
|
||||||
@@ -182,7 +156,7 @@ wxDbConnectInf::~wxDbConnectInf()
|
|||||||
/********** wxDbConnectInf::Initialize() **********/
|
/********** wxDbConnectInf::Initialize() **********/
|
||||||
bool wxDbConnectInf::Initialize()
|
bool wxDbConnectInf::Initialize()
|
||||||
{
|
{
|
||||||
freeHenvOnDestroy = FALSE;
|
freeHenvOnDestroy = false;
|
||||||
|
|
||||||
if (freeHenvOnDestroy && Henv)
|
if (freeHenvOnDestroy && Henv)
|
||||||
FreeHenv();
|
FreeHenv();
|
||||||
@@ -195,7 +169,7 @@ bool wxDbConnectInf::Initialize()
|
|||||||
FileType.Empty();
|
FileType.Empty();
|
||||||
DefaultDir.Empty();
|
DefaultDir.Empty();
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
} // wxDbConnectInf::Initialize()
|
} // wxDbConnectInf::Initialize()
|
||||||
|
|
||||||
|
|
||||||
@@ -210,12 +184,12 @@ bool wxDbConnectInf::AllocHenv()
|
|||||||
if (SQLAllocEnv(&Henv) != SQL_SUCCESS)
|
if (SQLAllocEnv(&Henv) != SQL_SUCCESS)
|
||||||
{
|
{
|
||||||
wxLogDebug(wxT("A problem occured while trying to get a connection to the data source"));
|
wxLogDebug(wxT("A problem occured while trying to get a connection to the data source"));
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
freeHenvOnDestroy = TRUE;
|
freeHenvOnDestroy = true;
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
} // wxDbConnectInf::AllocHenv()
|
} // wxDbConnectInf::AllocHenv()
|
||||||
|
|
||||||
|
|
||||||
@@ -227,7 +201,7 @@ void wxDbConnectInf::FreeHenv()
|
|||||||
SQLFreeEnv(Henv);
|
SQLFreeEnv(Henv);
|
||||||
|
|
||||||
Henv = 0;
|
Henv = 0;
|
||||||
freeHenvOnDestroy = FALSE;
|
freeHenvOnDestroy = false;
|
||||||
|
|
||||||
} // wxDbConnectInf::FreeHenv()
|
} // wxDbConnectInf::FreeHenv()
|
||||||
|
|
||||||
@@ -373,7 +347,7 @@ int wxDbColFor::Format(int Nation, int dbDataType, SWORD sqlDataType,
|
|||||||
s_Field.Printf(wxT("Unknown Format(%d)-SQL(%d)"),dbDataType,sqlDataType); //
|
s_Field.Printf(wxT("Unknown Format(%d)-SQL(%d)"),dbDataType,sqlDataType); //
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
return TRUE;
|
return true;
|
||||||
} // wxDbColFor::Format()
|
} // wxDbColFor::Format()
|
||||||
|
|
||||||
|
|
||||||
@@ -415,7 +389,7 @@ bool wxDbColInf::Initialize()
|
|||||||
FkTableName[0] = 0;
|
FkTableName[0] = 0;
|
||||||
pColFor = NULL;
|
pColFor = NULL;
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
} // wxDbColInf::Initialize()
|
} // wxDbColInf::Initialize()
|
||||||
|
|
||||||
|
|
||||||
@@ -443,7 +417,7 @@ bool wxDbTableInf::Initialize()
|
|||||||
numCols = 0;
|
numCols = 0;
|
||||||
pColInf = NULL;
|
pColInf = NULL;
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
} // wxDbTableInf::Initialize()
|
} // wxDbTableInf::Initialize()
|
||||||
|
|
||||||
|
|
||||||
@@ -471,11 +445,11 @@ bool wxDbInf::Initialize()
|
|||||||
numTables = 0;
|
numTables = 0;
|
||||||
pTableInf = NULL;
|
pTableInf = NULL;
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
} // wxDbInf::Initialize()
|
} // wxDbInf::Initialize()
|
||||||
|
|
||||||
|
|
||||||
/********** wxDb Constructors **********/
|
/********** wxDb Constructor **********/
|
||||||
wxDb::wxDb(const HENV &aHenv, bool FwdOnlyCursors)
|
wxDb::wxDb(const HENV &aHenv, bool FwdOnlyCursors)
|
||||||
{
|
{
|
||||||
// Copy the HENV into the db class
|
// Copy the HENV into the db class
|
||||||
@@ -486,6 +460,19 @@ wxDb::wxDb(const HENV &aHenv, bool FwdOnlyCursors)
|
|||||||
} // wxDb::wxDb()
|
} // 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! **********/
|
/********** PRIVATE! wxDb::initialize PRIVATE! **********/
|
||||||
/********** wxDb::initialize() **********/
|
/********** wxDb::initialize() **********/
|
||||||
void wxDb::initialize()
|
void wxDb::initialize()
|
||||||
@@ -539,7 +526,7 @@ void wxDb::initialize()
|
|||||||
typeInfBlob.MaximumScale = 0;
|
typeInfBlob.MaximumScale = 0;
|
||||||
|
|
||||||
// Error reporting is turned OFF by default
|
// Error reporting is turned OFF by default
|
||||||
silent = TRUE;
|
silent = true;
|
||||||
|
|
||||||
// Allocate a data source connection handle
|
// Allocate a data source connection handle
|
||||||
if (SQLAllocConnect(henv, &hdbc) != SQL_SUCCESS)
|
if (SQLAllocConnect(henv, &hdbc) != SQL_SUCCESS)
|
||||||
@@ -549,7 +536,8 @@ void wxDb::initialize()
|
|||||||
DB_STATUS = 0;
|
DB_STATUS = 0;
|
||||||
|
|
||||||
// Mark database as not open as of yet
|
// Mark database as not open as of yet
|
||||||
dbIsOpen = FALSE;
|
dbIsOpen = false;
|
||||||
|
dbIsCached = false;
|
||||||
} // wxDb::initialize()
|
} // wxDb::initialize()
|
||||||
|
|
||||||
|
|
||||||
@@ -635,7 +623,7 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Mark database as open
|
// Mark database as open
|
||||||
dbIsOpen = TRUE;
|
dbIsOpen = true;
|
||||||
|
|
||||||
// Allocate a statement handle for the database connection
|
// Allocate a statement handle for the database connection
|
||||||
if (SQLAllocStmt(hdbc, &hstmt) != SQL_SUCCESS)
|
if (SQLAllocStmt(hdbc, &hstmt) != SQL_SUCCESS)
|
||||||
@@ -643,11 +631,11 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt
|
|||||||
|
|
||||||
// Set Connection Options
|
// Set Connection Options
|
||||||
if (!setConnectionOptions())
|
if (!setConnectionOptions())
|
||||||
return(FALSE);
|
return(false);
|
||||||
|
|
||||||
// Query the data source for inf. about itself
|
// Query the data source for inf. about itself
|
||||||
if (!getDbInfo())
|
if (!getDbInfo())
|
||||||
return(FALSE);
|
return(false);
|
||||||
|
|
||||||
// Query the data source regarding data type information
|
// Query the data source regarding data type information
|
||||||
|
|
||||||
@@ -693,7 +681,7 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt
|
|||||||
// VARCHAR = Variable length character string
|
// VARCHAR = Variable length character string
|
||||||
if (!getDataTypeInfo(SQL_VARCHAR, typeInfVarchar))
|
if (!getDataTypeInfo(SQL_VARCHAR, typeInfVarchar))
|
||||||
if (!getDataTypeInfo(SQL_CHAR, typeInfVarchar))
|
if (!getDataTypeInfo(SQL_CHAR, typeInfVarchar))
|
||||||
return(FALSE);
|
return(false);
|
||||||
else
|
else
|
||||||
typeInfVarchar.FsqlType = SQL_CHAR;
|
typeInfVarchar.FsqlType = SQL_CHAR;
|
||||||
else
|
else
|
||||||
@@ -705,7 +693,7 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt
|
|||||||
if (!getDataTypeInfo(SQL_FLOAT,typeInfFloat))
|
if (!getDataTypeInfo(SQL_FLOAT,typeInfFloat))
|
||||||
if (!getDataTypeInfo(SQL_DECIMAL,typeInfFloat))
|
if (!getDataTypeInfo(SQL_DECIMAL,typeInfFloat))
|
||||||
if (!getDataTypeInfo(SQL_NUMERIC,typeInfFloat))
|
if (!getDataTypeInfo(SQL_NUMERIC,typeInfFloat))
|
||||||
return(FALSE);
|
return(false);
|
||||||
else
|
else
|
||||||
typeInfFloat.FsqlType = SQL_NUMERIC;
|
typeInfFloat.FsqlType = SQL_NUMERIC;
|
||||||
else
|
else
|
||||||
@@ -723,7 +711,7 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt
|
|||||||
// If SQL_INTEGER is not supported, use the floating point
|
// If SQL_INTEGER is not supported, use the floating point
|
||||||
// data type to store integers as well as floats
|
// data type to store integers as well as floats
|
||||||
if (!getDataTypeInfo(typeInfFloat.FsqlType, typeInfInteger))
|
if (!getDataTypeInfo(typeInfFloat.FsqlType, typeInfInteger))
|
||||||
return(FALSE);
|
return(false);
|
||||||
else
|
else
|
||||||
typeInfInteger.FsqlType = typeInfFloat.FsqlType;
|
typeInfInteger.FsqlType = typeInfFloat.FsqlType;
|
||||||
}
|
}
|
||||||
@@ -733,15 +721,15 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt
|
|||||||
// Date/Time
|
// Date/Time
|
||||||
if (Dbms() != dbmsDBASE)
|
if (Dbms() != dbmsDBASE)
|
||||||
{
|
{
|
||||||
if (! getDataTypeInfo(SQL_TIMESTAMP,typeInfDate))
|
if (!getDataTypeInfo(SQL_TIMESTAMP,typeInfDate))
|
||||||
return(FALSE);
|
return(false);
|
||||||
else
|
else
|
||||||
typeInfDate.FsqlType = SQL_TIMESTAMP;
|
typeInfDate.FsqlType = SQL_TIMESTAMP;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!getDataTypeInfo(SQL_DATE,typeInfDate))
|
if (!getDataTypeInfo(SQL_DATE,typeInfDate))
|
||||||
return(FALSE);
|
return(false);
|
||||||
else
|
else
|
||||||
typeInfDate.FsqlType = SQL_DATE;
|
typeInfDate.FsqlType = SQL_DATE;
|
||||||
}
|
}
|
||||||
@@ -749,7 +737,7 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt
|
|||||||
if (!getDataTypeInfo(SQL_LONGVARBINARY, typeInfBlob))
|
if (!getDataTypeInfo(SQL_LONGVARBINARY, typeInfBlob))
|
||||||
{
|
{
|
||||||
if (!getDataTypeInfo(SQL_VARBINARY,typeInfBlob))
|
if (!getDataTypeInfo(SQL_VARBINARY,typeInfBlob))
|
||||||
return(FALSE);
|
return(false);
|
||||||
else
|
else
|
||||||
typeInfBlob.FsqlType = SQL_VARBINARY;
|
typeInfBlob.FsqlType = SQL_VARBINARY;
|
||||||
}
|
}
|
||||||
@@ -768,7 +756,7 @@ bool wxDb::Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthSt
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Completed Successfully
|
// Completed Successfully
|
||||||
return(TRUE);
|
return(true);
|
||||||
|
|
||||||
} // wxDb::Open()
|
} // wxDb::Open()
|
||||||
|
|
||||||
@@ -819,7 +807,7 @@ bool wxDb::Open(wxDb *copyDb)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Mark database as open
|
// Mark database as open
|
||||||
dbIsOpen = TRUE;
|
dbIsOpen = true;
|
||||||
|
|
||||||
// Allocate a statement handle for the database connection
|
// Allocate a statement handle for the database connection
|
||||||
if (SQLAllocStmt(hdbc, &hstmt) != SQL_SUCCESS)
|
if (SQLAllocStmt(hdbc, &hstmt) != SQL_SUCCESS)
|
||||||
@@ -827,7 +815,7 @@ bool wxDb::Open(wxDb *copyDb)
|
|||||||
|
|
||||||
// Set Connection Options
|
// Set Connection Options
|
||||||
if (!setConnectionOptions())
|
if (!setConnectionOptions())
|
||||||
return(FALSE);
|
return(false);
|
||||||
|
|
||||||
// Instead of Querying the data source for info about itself, it can just be copied
|
// Instead of Querying the data source for info about itself, it can just be copied
|
||||||
// from the wxDb instance that was passed in (copyDb).
|
// from the wxDb instance that was passed in (copyDb).
|
||||||
@@ -908,7 +896,7 @@ bool wxDb::Open(wxDb *copyDb)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Completed Successfully
|
// Completed Successfully
|
||||||
return(TRUE);
|
return(true);
|
||||||
} // wxDb::Open() 2
|
} // wxDb::Open() 2
|
||||||
|
|
||||||
|
|
||||||
@@ -975,7 +963,7 @@ bool wxDb::setConnectionOptions(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Completed Successfully
|
// Completed Successfully
|
||||||
return(TRUE);
|
return(true);
|
||||||
|
|
||||||
} // wxDb::setConnectionOptions()
|
} // wxDb::setConnectionOptions()
|
||||||
|
|
||||||
@@ -1285,7 +1273,7 @@ bool wxDb::getDbInfo(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Completed Successfully
|
// Completed Successfully
|
||||||
return(TRUE);
|
return(true);
|
||||||
|
|
||||||
} // wxDb::getDbInfo()
|
} // wxDb::getDbInfo()
|
||||||
|
|
||||||
@@ -1314,7 +1302,7 @@ bool wxDb::getDataTypeInfo(SWORD fSqlType, wxDbSqlTypeInfo &structSQLTypeInfo)
|
|||||||
#endif
|
#endif
|
||||||
DispAllErrors(henv, hdbc, hstmt);
|
DispAllErrors(henv, hdbc, hstmt);
|
||||||
SQLFreeStmt(hstmt, SQL_CLOSE);
|
SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
return(FALSE);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxChar typeName[DB_TYPE_NAME_LEN+1];
|
wxChar typeName[DB_TYPE_NAME_LEN+1];
|
||||||
@@ -1370,7 +1358,7 @@ bool wxDb::getDataTypeInfo(SWORD fSqlType, wxDbSqlTypeInfo &structSQLTypeInfo)
|
|||||||
return(DispAllErrors(henv, hdbc, hstmt));
|
return(DispAllErrors(henv, hdbc, hstmt));
|
||||||
|
|
||||||
// Completed Successfully
|
// Completed Successfully
|
||||||
return(TRUE);
|
return(true);
|
||||||
|
|
||||||
} // wxDb::getDataTypeInfo()
|
} // wxDb::getDataTypeInfo()
|
||||||
|
|
||||||
@@ -1426,8 +1414,8 @@ void wxDb::Close(void)
|
|||||||
for (i = 0; i < DB_MAX_ERROR_HISTORY; i++)
|
for (i = 0; i < DB_MAX_ERROR_HISTORY; i++)
|
||||||
wxStrcpy(DBerrorList[i], errorList[i]);
|
wxStrcpy(DBerrorList[i], errorList[i]);
|
||||||
|
|
||||||
dbmsType = dbmsUNIDENTIFIED;
|
dbmsType = dbmsUNIDENTIFIED;
|
||||||
dbIsOpen = FALSE;
|
dbIsOpen = false;
|
||||||
|
|
||||||
} // wxDb::Close()
|
} // wxDb::Close()
|
||||||
|
|
||||||
@@ -1443,7 +1431,7 @@ bool wxDb::CommitTrans(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Completed successfully
|
// Completed successfully
|
||||||
return(TRUE);
|
return(true);
|
||||||
|
|
||||||
} // wxDb::CommitTrans()
|
} // wxDb::CommitTrans()
|
||||||
|
|
||||||
@@ -1456,7 +1444,7 @@ bool wxDb::RollbackTrans(void)
|
|||||||
return(DispAllErrors(henv, hdbc));
|
return(DispAllErrors(henv, hdbc));
|
||||||
|
|
||||||
// Completed successfully
|
// Completed successfully
|
||||||
return(TRUE);
|
return(true);
|
||||||
|
|
||||||
} // wxDb::RollbackTrans()
|
} // wxDb::RollbackTrans()
|
||||||
|
|
||||||
@@ -1473,7 +1461,7 @@ bool wxDb::DispAllErrors(HENV aHenv, HDBC aHdbc, HSTMT aHstmt)
|
|||||||
* If in DBDEBUG_CONSOLE mode, the constructed string will be displayed in the console
|
* If in DBDEBUG_CONSOLE mode, the constructed string will be displayed in the console
|
||||||
* window and program execution will be paused until the user presses a key.
|
* window and program execution will be paused until the user presses a key.
|
||||||
*
|
*
|
||||||
* This function always returns a FALSE, so that functions which call this function
|
* This function always returns a false, so that functions which call this function
|
||||||
* can have a line like "return (DispAllErrors(henv, hdbc));" to indicate the failure
|
* can have a line like "return (DispAllErrors(henv, hdbc));" to indicate the failure
|
||||||
* of the users request, so that the calling code can then process the error msg log
|
* of the users request, so that the calling code can then process the error msg log
|
||||||
*/
|
*/
|
||||||
@@ -1499,7 +1487,7 @@ bool wxDb::DispAllErrors(HENV aHenv, HDBC aHdbc, HSTMT aHstmt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(FALSE); // This function always returns false.
|
return(false); // This function always returns false.
|
||||||
|
|
||||||
} // wxDb::DispAllErrors()
|
} // wxDb::DispAllErrors()
|
||||||
|
|
||||||
@@ -1508,9 +1496,9 @@ bool wxDb::DispAllErrors(HENV aHenv, HDBC aHdbc, HSTMT aHstmt)
|
|||||||
bool wxDb::GetNextError(HENV aHenv, HDBC aHdbc, HSTMT aHstmt)
|
bool wxDb::GetNextError(HENV aHenv, HDBC aHdbc, HSTMT aHstmt)
|
||||||
{
|
{
|
||||||
if (SQLError(aHenv, aHdbc, aHstmt, (UCHAR FAR *) sqlState, &nativeError, (UCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS)
|
if (SQLError(aHenv, aHdbc, aHstmt, (UCHAR FAR *) sqlState, &nativeError, (UCHAR FAR *) errorMsg, SQL_MAX_MESSAGE_LENGTH - 1, &cbErrorMsg) == SQL_SUCCESS)
|
||||||
return(TRUE);
|
return(true);
|
||||||
else
|
else
|
||||||
return(FALSE);
|
return(false);
|
||||||
|
|
||||||
} // wxDb::GetNextError()
|
} // wxDb::GetNextError()
|
||||||
|
|
||||||
@@ -1817,7 +1805,7 @@ bool wxDb::CreateView(const wxString &viewName, const wxString &colList,
|
|||||||
|
|
||||||
// Drop the view first
|
// Drop the view first
|
||||||
if (attemptDrop && !DropView(viewName))
|
if (attemptDrop && !DropView(viewName))
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
// Build the create view statement
|
// Build the create view statement
|
||||||
sqlStmt = wxT("CREATE VIEW ");
|
sqlStmt = wxT("CREATE VIEW ");
|
||||||
@@ -1848,7 +1836,7 @@ bool wxDb::CreateView(const wxString &viewName, const wxString &colList,
|
|||||||
bool wxDb::DropView(const wxString &viewName)
|
bool wxDb::DropView(const wxString &viewName)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* NOTE: This function returns TRUE if the View does not exist, but
|
* NOTE: This function returns true if the View does not exist, but
|
||||||
* only for identified databases. Code will need to be added
|
* only for identified databases. Code will need to be added
|
||||||
* below for any other databases when those databases are defined
|
* below for any other databases when those databases are defined
|
||||||
* to handle this situation consistently
|
* to handle this situation consistently
|
||||||
@@ -1875,16 +1863,16 @@ bool wxDb::DropView(const wxString &viewName)
|
|||||||
DispNextError();
|
DispNextError();
|
||||||
DispAllErrors(henv, hdbc, hstmt);
|
DispAllErrors(henv, hdbc, hstmt);
|
||||||
RollbackTrans();
|
RollbackTrans();
|
||||||
return(FALSE);
|
return(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Commit the transaction
|
// Commit the transaction
|
||||||
if (! CommitTrans())
|
if (!CommitTrans())
|
||||||
return(FALSE);
|
return(false);
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
|
|
||||||
} // wxDb::DropView()
|
} // wxDb::DropView()
|
||||||
|
|
||||||
@@ -1900,12 +1888,12 @@ bool wxDb::ExecSql(const wxString &pSqlStmt)
|
|||||||
if (retcode == SQL_SUCCESS ||
|
if (retcode == SQL_SUCCESS ||
|
||||||
(Dbms() == dbmsDB2 && (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_NO_DATA_FOUND)))
|
(Dbms() == dbmsDB2 && (retcode == SQL_SUCCESS_WITH_INFO || retcode == SQL_NO_DATA_FOUND)))
|
||||||
{
|
{
|
||||||
return(TRUE);
|
return(true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DispAllErrors(henv, hdbc, hstmt);
|
DispAllErrors(henv, hdbc, hstmt);
|
||||||
return(FALSE);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // wxDb::ExecSql()
|
} // wxDb::ExecSql()
|
||||||
@@ -1915,11 +1903,11 @@ bool wxDb::ExecSql(const wxString &pSqlStmt)
|
|||||||
bool wxDb::GetNext(void)
|
bool wxDb::GetNext(void)
|
||||||
{
|
{
|
||||||
if (SQLFetch(hstmt) == SQL_SUCCESS)
|
if (SQLFetch(hstmt) == SQL_SUCCESS)
|
||||||
return(TRUE);
|
return(true);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DispAllErrors(henv, hdbc, hstmt);
|
DispAllErrors(henv, hdbc, hstmt);
|
||||||
return(FALSE);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // wxDb::GetNext()
|
} // wxDb::GetNext()
|
||||||
@@ -1932,11 +1920,11 @@ bool wxDb::GetData(UWORD colNo, SWORD cType, PTR pData, SDWORD maxLen, SDWORD FA
|
|||||||
wxASSERT(cbReturned);
|
wxASSERT(cbReturned);
|
||||||
|
|
||||||
if (SQLGetData(hstmt, colNo, cType, pData, maxLen, cbReturned) == SQL_SUCCESS)
|
if (SQLGetData(hstmt, colNo, cType, pData, maxLen, cbReturned) == SQL_SUCCESS)
|
||||||
return(TRUE);
|
return(true);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DispAllErrors(henv, hdbc, hstmt);
|
DispAllErrors(henv, hdbc, hstmt);
|
||||||
return(FALSE);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // wxDb::GetData()
|
} // wxDb::GetData()
|
||||||
@@ -2076,7 +2064,7 @@ int wxDb::GetKeyFields(const wxString &tableName, wxDbColInf* colInf, UWORD noCo
|
|||||||
} // while
|
} // while
|
||||||
SQLFreeStmt(hstmt, SQL_CLOSE); /* Close the cursor (the hstmt is still allocated). */
|
SQLFreeStmt(hstmt, SQL_CLOSE); /* Close the cursor (the hstmt is still allocated). */
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
|
|
||||||
} // wxDb::GetKeyFields()
|
} // wxDb::GetKeyFields()
|
||||||
|
|
||||||
@@ -2112,7 +2100,7 @@ wxDbColInf *wxDb::GetColumns(wxChar *tableName[], const wxChar *userID)
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
UWORD noCols = 0;
|
UWORD noCols = 0;
|
||||||
UWORD colNo = 0;
|
UWORD colNo = 0;
|
||||||
wxDbColInf *colInf = 0;
|
wxDbColInf *colInf = 0;
|
||||||
|
|
||||||
RETCODE retcode;
|
RETCODE retcode;
|
||||||
@@ -2994,7 +2982,7 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName)
|
|||||||
|
|
||||||
FILE *fp = fopen(fileName.c_str(),wxT("wt"));
|
FILE *fp = fopen(fileName.c_str(),wxT("wt"));
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return(FALSE);
|
return(false);
|
||||||
|
|
||||||
SQLFreeStmt(hstmt, SQL_CLOSE);
|
SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
|
|
||||||
@@ -3025,7 +3013,7 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName)
|
|||||||
{
|
{
|
||||||
DispAllErrors(henv, hdbc, hstmt);
|
DispAllErrors(henv, hdbc, hstmt);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return(FALSE);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString outStr;
|
wxString outStr;
|
||||||
@@ -3067,7 +3055,7 @@ bool wxDb::Catalog(const wxChar *userID, const wxString &fileName)
|
|||||||
{
|
{
|
||||||
SQLFreeStmt(hstmt, SQL_CLOSE);
|
SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return(FALSE);
|
return(false);
|
||||||
}
|
}
|
||||||
cnt++;
|
cnt++;
|
||||||
}
|
}
|
||||||
@@ -3162,7 +3150,7 @@ bool wxDb::TableExists(const wxString &tableName, const wxChar *userID, const wx
|
|||||||
|
|
||||||
SQLFreeStmt(hstmt, SQL_CLOSE);
|
SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
|
|
||||||
return(TRUE);
|
return(true);
|
||||||
|
|
||||||
} // wxDb::TableExists()
|
} // wxDb::TableExists()
|
||||||
|
|
||||||
@@ -3223,30 +3211,30 @@ bool wxDb::TablePrivileges(const wxString &tableName, const wxString &priv, cons
|
|||||||
if ((retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO))
|
if ((retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO))
|
||||||
return(DispAllErrors(henv, hdbc, hstmt));
|
return(DispAllErrors(henv, hdbc, hstmt));
|
||||||
|
|
||||||
bool failed = FALSE;
|
bool failed = false;
|
||||||
retcode = SQLFetch(hstmt);
|
retcode = SQLFetch(hstmt);
|
||||||
while (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
|
while (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
|
||||||
{
|
{
|
||||||
if (SQLGetData(hstmt, 1, SQL_C_CHAR, (UCHAR*) result.tableQual, sizeof(result.tableQual), &cbRetVal) != SQL_SUCCESS)
|
if (SQLGetData(hstmt, 1, SQL_C_CHAR, (UCHAR*) result.tableQual, sizeof(result.tableQual), &cbRetVal) != SQL_SUCCESS)
|
||||||
failed = TRUE;
|
failed = true;
|
||||||
|
|
||||||
if (!failed && SQLGetData(hstmt, 2, SQL_C_CHAR, (UCHAR*) result.tableOwner, sizeof(result.tableOwner), &cbRetVal) != SQL_SUCCESS)
|
if (!failed && SQLGetData(hstmt, 2, SQL_C_CHAR, (UCHAR*) result.tableOwner, sizeof(result.tableOwner), &cbRetVal) != SQL_SUCCESS)
|
||||||
failed = TRUE;
|
failed = true;
|
||||||
|
|
||||||
if (!failed && SQLGetData(hstmt, 3, SQL_C_CHAR, (UCHAR*) result.tableName, sizeof(result.tableName), &cbRetVal) != SQL_SUCCESS)
|
if (!failed && SQLGetData(hstmt, 3, SQL_C_CHAR, (UCHAR*) result.tableName, sizeof(result.tableName), &cbRetVal) != SQL_SUCCESS)
|
||||||
failed = TRUE;
|
failed = true;
|
||||||
|
|
||||||
if (!failed && SQLGetData(hstmt, 4, SQL_C_CHAR, (UCHAR*) result.grantor, sizeof(result.grantor), &cbRetVal) != SQL_SUCCESS)
|
if (!failed && SQLGetData(hstmt, 4, SQL_C_CHAR, (UCHAR*) result.grantor, sizeof(result.grantor), &cbRetVal) != SQL_SUCCESS)
|
||||||
failed = TRUE;
|
failed = true;
|
||||||
|
|
||||||
if (!failed && SQLGetData(hstmt, 5, SQL_C_CHAR, (UCHAR*) result.grantee, sizeof(result.grantee), &cbRetVal) != SQL_SUCCESS)
|
if (!failed && SQLGetData(hstmt, 5, SQL_C_CHAR, (UCHAR*) result.grantee, sizeof(result.grantee), &cbRetVal) != SQL_SUCCESS)
|
||||||
failed = TRUE;
|
failed = true;
|
||||||
|
|
||||||
if (!failed && SQLGetData(hstmt, 6, SQL_C_CHAR, (UCHAR*) result.privilege, sizeof(result.privilege), &cbRetVal) != SQL_SUCCESS)
|
if (!failed && SQLGetData(hstmt, 6, SQL_C_CHAR, (UCHAR*) result.privilege, sizeof(result.privilege), &cbRetVal) != SQL_SUCCESS)
|
||||||
failed = TRUE;
|
failed = true;
|
||||||
|
|
||||||
if (!failed && SQLGetData(hstmt, 7, SQL_C_CHAR, (UCHAR*) result.grantable, sizeof(result.grantable), &cbRetVal) != SQL_SUCCESS)
|
if (!failed && SQLGetData(hstmt, 7, SQL_C_CHAR, (UCHAR*) result.grantable, sizeof(result.grantable), &cbRetVal) != SQL_SUCCESS)
|
||||||
failed = TRUE;
|
failed = true;
|
||||||
|
|
||||||
if (failed)
|
if (failed)
|
||||||
{
|
{
|
||||||
@@ -3258,31 +3246,31 @@ bool wxDb::TablePrivileges(const wxString &tableName, const wxString &priv, cons
|
|||||||
result.grantor, result.grantee);
|
result.grantor, result.grantee);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (UserID.IsSameAs(result.tableOwner,FALSE))
|
if (UserID.IsSameAs(result.tableOwner,false))
|
||||||
{
|
{
|
||||||
SQLFreeStmt(hstmt, SQL_CLOSE);
|
SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UserID.IsSameAs(result.grantee,FALSE) &&
|
if (UserID.IsSameAs(result.grantee,false) &&
|
||||||
!wxStrcmp(result.privilege,priv))
|
!wxStrcmp(result.privilege,priv))
|
||||||
{
|
{
|
||||||
SQLFreeStmt(hstmt, SQL_CLOSE);
|
SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wxStrcmp(result.grantee,curRole) &&
|
if (!wxStrcmp(result.grantee,curRole) &&
|
||||||
!wxStrcmp(result.privilege,priv))
|
!wxStrcmp(result.privilege,priv))
|
||||||
{
|
{
|
||||||
SQLFreeStmt(hstmt, SQL_CLOSE);
|
SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
retcode = SQLFetch(hstmt);
|
retcode = SQLFetch(hstmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLFreeStmt(hstmt, SQL_CLOSE);
|
SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
} // wxDb::TablePrivileges
|
} // wxDb::TablePrivileges
|
||||||
|
|
||||||
@@ -3299,7 +3287,7 @@ bool wxDb::SetSqlLogging(wxDbSqlLogState state, const wxString &filename, bool a
|
|||||||
{
|
{
|
||||||
fpSqlLog = fopen(filename, (append ? wxT("at") : wxT("wt")));
|
fpSqlLog = fopen(filename, (append ? wxT("at") : wxT("wt")));
|
||||||
if (fpSqlLog == NULL)
|
if (fpSqlLog == NULL)
|
||||||
return(FALSE);
|
return(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // sqlLogOFF
|
else // sqlLogOFF
|
||||||
@@ -3307,13 +3295,13 @@ bool wxDb::SetSqlLogging(wxDbSqlLogState state, const wxString &filename, bool a
|
|||||||
if (fpSqlLog)
|
if (fpSqlLog)
|
||||||
{
|
{
|
||||||
if (fclose(fpSqlLog))
|
if (fclose(fpSqlLog))
|
||||||
return(FALSE);
|
return(false);
|
||||||
fpSqlLog = 0;
|
fpSqlLog = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlLogState = state;
|
sqlLogState = state;
|
||||||
return(TRUE);
|
return(true);
|
||||||
|
|
||||||
} // wxDb::SetSqlLogging()
|
} // wxDb::SetSqlLogging()
|
||||||
|
|
||||||
@@ -3324,16 +3312,16 @@ bool wxDb::WriteSqlLog(const wxString &logMsg)
|
|||||||
wxASSERT(logMsg.Length());
|
wxASSERT(logMsg.Length());
|
||||||
|
|
||||||
if (fpSqlLog == 0 || sqlLogState == sqlLogOFF)
|
if (fpSqlLog == 0 || sqlLogState == sqlLogOFF)
|
||||||
return(FALSE);
|
return(false);
|
||||||
|
|
||||||
if (fputs(wxT("\n"), fpSqlLog) == EOF)
|
if (fputs(wxT("\n"), fpSqlLog) == EOF)
|
||||||
return(FALSE);
|
return(false);
|
||||||
if (fputs(logMsg, fpSqlLog) == EOF)
|
if (fputs(logMsg, fpSqlLog) == EOF)
|
||||||
return(FALSE);
|
return(false);
|
||||||
if (fputs(wxT("\n"), fpSqlLog) == EOF)
|
if (fputs(wxT("\n"), fpSqlLog) == EOF)
|
||||||
return(FALSE);
|
return(false);
|
||||||
|
|
||||||
return(TRUE);
|
return(true);
|
||||||
|
|
||||||
} // wxDb::WriteSqlLog()
|
} // wxDb::WriteSqlLog()
|
||||||
|
|
||||||
@@ -3361,7 +3349,7 @@ wxDBMS wxDb::Dbms(void)
|
|||||||
* - Does not support the SQL_TIMESTAMP structure
|
* - Does not support the SQL_TIMESTAMP structure
|
||||||
* - Supports only one cursor and one connect (apparently? with Microsoft driver only?)
|
* - Supports only one cursor and one connect (apparently? with Microsoft driver only?)
|
||||||
* - Does not automatically create the primary index if the 'keyField' param of SetColDef
|
* - Does not automatically create the primary index if the 'keyField' param of SetColDef
|
||||||
* is TRUE. The user must create ALL indexes from their program.
|
* is true. The user must create ALL indexes from their program.
|
||||||
* - Table names can only be 8 characters long
|
* - Table names can only be 8 characters long
|
||||||
* - Column names can only be 10 characters long
|
* - Column names can only be 10 characters long
|
||||||
*
|
*
|
||||||
@@ -3377,7 +3365,7 @@ wxDBMS wxDb::Dbms(void)
|
|||||||
*
|
*
|
||||||
* MY_SQL
|
* MY_SQL
|
||||||
* - If a column is part of the Primary Key, the column cannot be NULL
|
* - If a column is part of the Primary Key, the column cannot be NULL
|
||||||
* - Cannot support selecting for update [::CanSelectForUpdate()]. Always returns FALSE
|
* - Cannot support selecting for update [::CanSelectForUpdate()]. Always returns false
|
||||||
* - Columns that are part of primary or secondary keys must be defined as being NOT NULL
|
* - Columns that are part of primary or secondary keys must be defined as being NOT NULL
|
||||||
* when they are created. Some code is added in ::CreateIndex to try to adjust the
|
* when they are created. Some code is added in ::CreateIndex to try to adjust the
|
||||||
* column definition if it is not defined correctly, but it is experimental
|
* column definition if it is not defined correctly, but it is experimental
|
||||||
@@ -3485,7 +3473,7 @@ bool wxDb::ModifyColumn(const wxString &tableName, const wxString &columnName,
|
|||||||
|
|
||||||
// Must specify a columnLength if modifying a VARCHAR type column
|
// Must specify a columnLength if modifying a VARCHAR type column
|
||||||
if (dataType == DB_DATA_TYPE_VARCHAR && !columnLength)
|
if (dataType == DB_DATA_TYPE_VARCHAR && !columnLength)
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
wxString dataTypeName;
|
wxString dataTypeName;
|
||||||
wxString sqlStmt;
|
wxString sqlStmt;
|
||||||
@@ -3509,7 +3497,7 @@ bool wxDb::ModifyColumn(const wxString &tableName, const wxString &columnName,
|
|||||||
dataTypeName = typeInfBlob.TypeName;
|
dataTypeName = typeInfBlob.TypeName;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the modify or alter syntax depending on the type of database connected to
|
// Set the modify or alter syntax depending on the type of database connected to
|
||||||
@@ -3522,7 +3510,7 @@ bool wxDb::ModifyColumn(const wxString &tableName, const wxString &columnName,
|
|||||||
alterSlashModify = "ALTER COLUMN";
|
alterSlashModify = "ALTER COLUMN";
|
||||||
break;
|
break;
|
||||||
case dbmsUNIDENTIFIED :
|
case dbmsUNIDENTIFIED :
|
||||||
return FALSE;
|
return false;
|
||||||
case dbmsSYBASE_ASA :
|
case dbmsSYBASE_ASA :
|
||||||
case dbmsSYBASE_ASE :
|
case dbmsSYBASE_ASE :
|
||||||
case dbmsMY_SQL :
|
case dbmsMY_SQL :
|
||||||
@@ -3580,7 +3568,7 @@ wxDb WXDLLEXPORT *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnlyCurso
|
|||||||
(pList->PtrDb->FwdOnlyCursors() == FwdOnlyCursors) &&
|
(pList->PtrDb->FwdOnlyCursors() == FwdOnlyCursors) &&
|
||||||
(!wxStrcmp(pDbConfig->GetDsn(), pList->Dsn))) // Found a free connection
|
(!wxStrcmp(pDbConfig->GetDsn(), pList->Dsn))) // Found a free connection
|
||||||
{
|
{
|
||||||
pList->Free = FALSE;
|
pList->Free = false;
|
||||||
return(pList->PtrDb);
|
return(pList->PtrDb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3610,14 +3598,14 @@ wxDb WXDLLEXPORT *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnlyCurso
|
|||||||
|
|
||||||
// Initialize new node in the linked list
|
// Initialize new node in the linked list
|
||||||
pList->PtrNext = 0;
|
pList->PtrNext = 0;
|
||||||
pList->Free = FALSE;
|
pList->Free = false;
|
||||||
pList->Dsn = pDbConfig->GetDsn(); //glt - will this assignment work?
|
pList->Dsn = pDbConfig->GetDsn();
|
||||||
pList->Uid = pDbConfig->GetUserID();
|
pList->Uid = pDbConfig->GetUserID();
|
||||||
pList->AuthStr = pDbConfig->GetPassword();
|
pList->AuthStr = pDbConfig->GetPassword();
|
||||||
|
|
||||||
pList->PtrDb = new wxDb(pDbConfig->GetHenv(), FwdOnlyCursors);
|
pList->PtrDb = new wxDb(pDbConfig->GetHenv(), FwdOnlyCursors);
|
||||||
|
|
||||||
bool opened = FALSE;
|
bool opened = false;
|
||||||
|
|
||||||
if (!matchingDbConnection)
|
if (!matchingDbConnection)
|
||||||
opened = pList->PtrDb->Open(pDbConfig->GetDsn(), pDbConfig->GetUserID(), pDbConfig->GetPassword());
|
opened = pList->PtrDb->Open(pDbConfig->GetDsn(), pDbConfig->GetUserID(), pDbConfig->GetPassword());
|
||||||
@@ -3627,7 +3615,8 @@ wxDb WXDLLEXPORT *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnlyCurso
|
|||||||
// Connect to the datasource
|
// Connect to the datasource
|
||||||
if (opened)
|
if (opened)
|
||||||
{
|
{
|
||||||
pList->PtrDb->SetSqlLogging(SQLLOGstate,SQLLOGfn,TRUE);
|
pList->PtrDb->setCached(true); // Prevent a user from deleting a cached connection
|
||||||
|
pList->PtrDb->SetSqlLogging(SQLLOGstate,SQLLOGfn,true);
|
||||||
return(pList->PtrDb);
|
return(pList->PtrDb);
|
||||||
}
|
}
|
||||||
else // Unable to connect, destroy list item
|
else // Unable to connect, destroy list item
|
||||||
@@ -3655,11 +3644,11 @@ bool WXDLLEXPORT wxDbFreeConnection(wxDb *pDb)
|
|||||||
for (pList = PtrBegDbList; pList; pList = pList->PtrNext)
|
for (pList = PtrBegDbList; pList; pList = pList->PtrNext)
|
||||||
{
|
{
|
||||||
if (pList->PtrDb == pDb) // Found it, now free it!!!
|
if (pList->PtrDb == pDb) // Found it, now free it!!!
|
||||||
return (pList->Free = TRUE);
|
return (pList->Free = true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Never found the database object, return failure
|
// Never found the database object, return failure
|
||||||
return(FALSE);
|
return(false);
|
||||||
|
|
||||||
} // wxDbFreeConnection()
|
} // wxDbFreeConnection()
|
||||||
|
|
||||||
@@ -3675,6 +3664,7 @@ void WXDLLEXPORT wxDbCloseConnections(void)
|
|||||||
pNext = pList->PtrNext; // Save the pointer to next
|
pNext = pList->PtrNext; // Save the pointer to next
|
||||||
pList->PtrDb->CommitTrans(); // Commit any open transactions on wxDb object
|
pList->PtrDb->CommitTrans(); // Commit any open transactions on wxDb object
|
||||||
pList->PtrDb->Close(); // Close the 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->PtrDb; // Deletes the wxDb object
|
||||||
delete pList; // Deletes the linked list object
|
delete pList; // Deletes the linked list object
|
||||||
}
|
}
|
||||||
@@ -3694,7 +3684,7 @@ int WXDLLEXPORT wxDbConnectionsInUse(void)
|
|||||||
// Scan the linked list counting db connections that are currently in use
|
// Scan the linked list counting db connections that are currently in use
|
||||||
for (pList = PtrBegDbList; pList; pList = pList->PtrNext)
|
for (pList = PtrBegDbList; pList; pList = pList->PtrNext)
|
||||||
{
|
{
|
||||||
if (pList->Free == FALSE)
|
if (pList->Free == false)
|
||||||
cnt++;
|
cnt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3703,23 +3693,69 @@ int WXDLLEXPORT wxDbConnectionsInUse(void)
|
|||||||
} // wxDbConnectionsInUse()
|
} // 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() **********/
|
/********** wxDbSqlLog() **********/
|
||||||
bool wxDbSqlLog(wxDbSqlLogState state, const wxChar *filename)
|
bool wxDbSqlLog(wxDbSqlLogState state, const wxChar *filename)
|
||||||
{
|
{
|
||||||
bool append = FALSE;
|
bool append = false;
|
||||||
wxDbList *pList;
|
wxDbList *pList;
|
||||||
|
|
||||||
for (pList = PtrBegDbList; pList; pList = pList->PtrNext)
|
for (pList = PtrBegDbList; pList; pList = pList->PtrNext)
|
||||||
{
|
{
|
||||||
if (!pList->PtrDb->SetSqlLogging(state,filename,append))
|
if (!pList->PtrDb->SetSqlLogging(state,filename,append))
|
||||||
return(FALSE);
|
return(false);
|
||||||
append = TRUE;
|
append = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLLOGstate = state;
|
SQLLOGstate = state;
|
||||||
SQLLOGfn = filename;
|
SQLLOGfn = filename;
|
||||||
|
|
||||||
return(TRUE);
|
return(true);
|
||||||
|
|
||||||
} // wxDbSqlLog()
|
} // wxDbSqlLog()
|
||||||
|
|
||||||
@@ -3735,7 +3771,7 @@ int wxDbCreateDataSource(const wxString &driverName, const wxString &dsn, const
|
|||||||
* ODBC driver must be ODBC 3.0 compliant to use this function
|
* ODBC driver must be ODBC 3.0 compliant to use this function
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int result = FALSE;
|
int result = false;
|
||||||
|
|
||||||
//!!!! ONLY FUNCTIONAL UNDER MSW with VC6 !!!!
|
//!!!! ONLY FUNCTIONAL UNDER MSW with VC6 !!!!
|
||||||
#ifdef __VISUALC__
|
#ifdef __VISUALC__
|
||||||
@@ -3757,7 +3793,7 @@ int wxDbCreateDataSource(const wxString &driverName, const wxString &dsn, const
|
|||||||
int k;
|
int k;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
k = setupStr.Find((wxChar)2,TRUE);
|
k = setupStr.Find((wxChar)2,true);
|
||||||
if (k != wxNOT_FOUND)
|
if (k != wxNOT_FOUND)
|
||||||
setupStr[(UINT)k] = wxT('\0');
|
setupStr[(UINT)k] = wxT('\0');
|
||||||
}
|
}
|
||||||
@@ -3791,14 +3827,14 @@ int wxDbCreateDataSource(const wxString &driverName, const wxString &dsn, const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
result = TRUE;
|
result = true;
|
||||||
#else
|
#else
|
||||||
// Using iODBC/unixODBC or some other compiler which does not support the APIs
|
// Using iODBC/unixODBC or some other compiler which does not support the APIs
|
||||||
// necessary to use this function, so this function is not supported
|
// necessary to use this function, so this function is not supported
|
||||||
#ifdef __WXDEBUG__
|
#ifdef __WXDEBUG__
|
||||||
wxLogDebug(wxT("wxDbCreateDataSource() not available except under VC++/MSW"),wxT("ODBC DEBUG MESSAGE"));
|
wxLogDebug(wxT("wxDbCreateDataSource() not available except under VC++/MSW"),wxT("ODBC DEBUG MESSAGE"));
|
||||||
#endif
|
#endif
|
||||||
result = FALSE;
|
result = false;
|
||||||
#endif // __VISUALC__
|
#endif // __VISUALC__
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -3809,7 +3845,7 @@ int wxDbCreateDataSource(const wxString &driverName, const wxString &dsn, const
|
|||||||
|
|
||||||
/********** wxDbGetDataSource() **********/
|
/********** wxDbGetDataSource() **********/
|
||||||
bool wxDbGetDataSource(HENV henv, wxChar *Dsn, SWORD DsnMax, wxChar *DsDesc,
|
bool wxDbGetDataSource(HENV henv, wxChar *Dsn, SWORD DsnMax, wxChar *DsDesc,
|
||||||
SWORD DsDescMax, UWORD direction)
|
SWORD DsDescMax, DWORD direction)
|
||||||
/*
|
/*
|
||||||
* Dsn and DsDesc will contain the data source name and data source
|
* Dsn and DsDesc will contain the data source name and data source
|
||||||
* description upon return
|
* description upon return
|
||||||
@@ -3819,9 +3855,9 @@ bool wxDbGetDataSource(HENV henv, wxChar *Dsn, SWORD DsnMax, wxChar *DsDesc,
|
|||||||
|
|
||||||
if (SQLDataSources(henv, direction, (UCHAR FAR *) Dsn, DsnMax, &cb1,
|
if (SQLDataSources(henv, direction, (UCHAR FAR *) Dsn, DsnMax, &cb1,
|
||||||
(UCHAR FAR *) DsDesc, DsDescMax, &cb2) == SQL_SUCCESS)
|
(UCHAR FAR *) DsDesc, DsDescMax, &cb2) == SQL_SUCCESS)
|
||||||
return(TRUE);
|
return(true);
|
||||||
else
|
else
|
||||||
return(FALSE);
|
return(false);
|
||||||
|
|
||||||
} // wxDbGetDataSource()
|
} // wxDbGetDataSource()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user