// will overwrite the errors of the previously destroyed wxDb object in
// this variable. NOTE: This occurs during a CLOSE, not a FREEing of the
// connection
-wxChar DBerrorList[DB_MAX_ERROR_HISTORY][DB_MAX_ERROR_MSG_LEN];
+wxChar DBerrorList[DB_MAX_ERROR_HISTORY][DB_MAX_ERROR_MSG_LEN+1];
// This type defines the return row-struct form
if (i_dbDataType == 0) // Filter unsupported dbDataTypes
{
- if ((i_sqlDataType == SQL_VARCHAR) || (i_sqlDataType == SQL_LONGVARCHAR) ||
- (i_sqlDataType == SQL_WCHAR) || (i_sqlDataType == SQL_WVARCHAR))
+ if ((i_sqlDataType == SQL_VARCHAR)
+#if wxUSE_UNICODE
+ #if defined(SQL_WCHAR)
+ || (i_sqlDataType == SQL_WCHAR)
+ #endif
+ #if defined(SQL_WVARCHAR)
+ || (i_sqlDataType == SQL_WVARCHAR)
+ #endif
+#endif
+ || (i_sqlDataType == SQL_LONGVARCHAR))
i_dbDataType = DB_DATA_TYPE_VARCHAR;
if ((i_sqlDataType == SQL_C_DATE) || (i_sqlDataType == SQL_C_TIMESTAMP))
i_dbDataType = DB_DATA_TYPE_DATE;
|| Dbms() == dbmsXBASE_SEQUITER )
UserID.Empty();
- // Oracle user names may only be in uppercase, so force
- // the name to uppercase
- if (Dbms() == dbmsORACLE)
+ // Some databases require user names to be specified in uppercase,
+ // so force the name to uppercase
+ if ((Dbms() == dbmsORACLE) ||
+ (Dbms() == dbmsMAXDB))
UserID = UserID.Upper();
return UserID.c_str();
bool wxDb::determineDataTypes(bool failOnDataTypeUnsupported)
{
- int iIndex;
+ size_t iIndex;
// These are the possible SQL types we check for use against the datasource we are connected
// to for the purpose of determining which data type to use for the basic character strings
// column types
//
- // NOTE: The first type in this enumeration that is determined to be supported by the
+ // NOTE: The first type in this enumeration that is determined to be supported by the
// datasource/driver is the one that will be used.
SWORD PossibleSqlCharTypes[] = {
#if wxUSE_UNICODE && defined(SQL_WVARCHAR)
// to for the purpose of determining which data type to use for the basic non-floating point
// column types
//
- // NOTE: The first type in this enumeration that is determined to be supported by the
+ // NOTE: The first type in this enumeration that is determined to be supported by the
// datasource/driver is the one that will be used.
SWORD PossibleSqlIntegerTypes[] = {
SQL_INTEGER
// to for the purpose of determining which data type to use for the basic floating point number
// column types
//
- // NOTE: The first type in this enumeration that is determined to be supported by the
+ // NOTE: The first type in this enumeration that is determined to be supported by the
// datasource/driver is the one that will be used.
SWORD PossibleSqlFloatTypes[] = {
SQL_DOUBLE,
// These are the possible SQL types we check for use agains the datasource we are connected
// to for the purpose of determining which data type to use for the date/time column types
//
- // NOTE: The first type in this enumeration that is determined to be supported by the
+ // NOTE: The first type in this enumeration that is determined to be supported by the
// datasource/driver is the one that will be used.
SWORD PossibleSqlDateTypes[] = {
SQL_TIMESTAMP,
// These are the possible SQL types we check for use agains the datasource we are connected
// to for the purpose of determining which data type to use for the BLOB column types.
//
- // NOTE: The first type in this enumeration that is determined to be supported by the
+ // NOTE: The first type in this enumeration that is determined to be supported by the
// datasource/driver is the one that will be used.
SWORD PossibleSqlBlobTypes[] = {
SQL_LONGVARBINARY,
if (!getDbInfo(failOnDataTypeUnsupported))
return false;
- // --------------- Varchar - (Variable length character string) ---------------
- for (iIndex = 0; iIndex < WXSIZEOF(PossibleSqlCharTypes) &&
+ // --------------- Varchar - (Variable length character string) ---------------
+ for (iIndex = 0; iIndex < WXSIZEOF(PossibleSqlCharTypes) &&
!getDataTypeInfo(PossibleSqlCharTypes[iIndex], typeInfVarchar); ++iIndex)
{}
else if (failOnDataTypeUnsupported)
return false;
- // --------------- Float ---------------
- for (iIndex = 0; iIndex < WXSIZEOF(PossibleSqlFloatTypes) &&
+ // --------------- Float ---------------
+ for (iIndex = 0; iIndex < WXSIZEOF(PossibleSqlFloatTypes) &&
!getDataTypeInfo(PossibleSqlFloatTypes[iIndex], typeInfFloat); ++iIndex)
{}
return false;
// --------------- Integer -------------
- for (iIndex = 0; iIndex < WXSIZEOF(PossibleSqlIntegerTypes) &&
+ for (iIndex = 0; iIndex < WXSIZEOF(PossibleSqlIntegerTypes) &&
!getDataTypeInfo(PossibleSqlIntegerTypes[iIndex], typeInfInteger); ++iIndex)
{}
typeInfInteger.FsqlType = typeInfFloat.FsqlType;
}
- // --------------- Date/Time ---------------
- for (iIndex = 0; iIndex < WXSIZEOF(PossibleSqlDateTypes) &&
+ // --------------- Date/Time ---------------
+ for (iIndex = 0; iIndex < WXSIZEOF(PossibleSqlDateTypes) &&
!getDataTypeInfo(PossibleSqlDateTypes[iIndex], typeInfDate); ++iIndex)
{}
else if (failOnDataTypeUnsupported)
return false;
- // --------------- BLOB ---------------
- for (iIndex = 0; iIndex < WXSIZEOF(PossibleSqlBlobTypes) &&
+ // --------------- BLOB ---------------
+ for (iIndex = 0; iIndex < WXSIZEOF(PossibleSqlBlobTypes) &&
!getDataTypeInfo(PossibleSqlBlobTypes[iIndex], typeInfBlob); ++iIndex)
{}
if (++pLast == DB_MAX_ERROR_HISTORY)
{
int i;
- for (i = 0; i < DB_MAX_ERROR_HISTORY; i++)
+ for (i = 0; i < DB_MAX_ERROR_HISTORY-1; i++)
wxStrcpy(errorList[i], errorList[i+1]);
pLast--;
}
switch (Sdword)
{
+#if wxUSE_UNICODE
+ #if defined(SQL_WCHAR)
case SQL_WCHAR:
+ #endif
+ #if defined(SQL_WVARCHAR)
case SQL_WVARCHAR:
+ #endif
+#endif
case SQL_VARCHAR:
case SQL_CHAR:
pColInf[colNum].dbDataType = DB_DATA_TYPE_VARCHAR;
/*
BJO 20000503
These are tentative new GetColumns members which should be more database
- independant and which always returns the columns in the order they were
+ independent and which always returns the columns in the order they were
created.
- The first one (wxDbColInf *wxDb::GetColumns(wxChar *tableName[], const
// Get the intern datatype
switch (colInf[colNo].sqlDataType)
{
+#if wxUSE_UNICODE
+ #if defined(SQL_WCHAR)
case SQL_WCHAR:
+ #endif
+ #if defined(SQL_WVARCHAR)
case SQL_WVARCHAR:
+ #endif
+#endif
case SQL_VARCHAR:
case SQL_CHAR:
colInf[colNo].dbDataType = DB_DATA_TYPE_VARCHAR;
wxChar typeName[30+1];
SDWORD precision, length;
- FILE *fp = wxFopen(fileName.fn_str(),wxT("wt"));
+ FILE *fp = wxFopen(fileName.c_str(),wxT("wt"));
if (fp == NULL)
return false;
{
if (fpSqlLog == 0)
{
- fpSqlLog = wxFopen(filename.fn_str(), (append ? wxT("at") : wxT("wt")));
+ fpSqlLog = wxFopen(filename.c_str(), (append ? wxT("at") : wxT("wt")));
if (fpSqlLog == NULL)
return false;
}
return((wxDBMS)(dbmsType = dbmsXBASE_SEQUITER));
if (!wxStricmp(baseName,wxT("MySQL")))
return((wxDBMS)(dbmsType = dbmsMY_SQL));
+ if (!wxStricmp(baseName,wxT("MaxDB")))
+ return((wxDBMS)(dbmsType = dbmsMAXDB));
baseName[3] = 0;
if (!wxStricmp(baseName,wxT("DB2")))