#endif
#ifdef DBDEBUG_CONSOLE
- #include "iostream.h"
+#if wxUSE_IOSTREAMH
+ #include <iostream.h>
+#else
+ #include <iostream>
+#endif
#include "wx/ioswrap.h"
#endif
/********** wxDbTable::bindCols() **********/
bool wxDbTable::bindCols(HSTMT cursor)
{
+ static SDWORD cb;
+
// Bind each column of the table to a memory address for fetching data
UWORD i;
for (i = 0; i < noCols; i++)
{
+ cb = colDefs[i].CbValue;
if (SQLBindCol(cursor, (UWORD)(i+1), colDefs[i].SqlCtype, (UCHAR*) colDefs[i].PtrDataObj,
- colDefs[i].SzDataObj, &colDefs[i].CbValue ) != SQL_SUCCESS)
- {
+ colDefs[i].SzDataObj, &cb ) != SQL_SUCCESS)
return (pDb->DispAllErrors(henv, hdbc, cursor));
- }
}
// Completed successfully
break;
}
// For varchars, append the size of the string
- if (colDefs[i].DbDataType == DB_DATA_TYPE_VARCHAR)// ||
+ if (colDefs[i].DbDataType == DB_DATA_TYPE_VARCHAR &&
+ (pDb->Dbms() != dbmsMY_SQL || pDb->GetTypeInfVarchar().TypeName != "text"))// ||
// colDefs[i].DbDataType == DB_DATA_TYPE_BLOB)
{
wxString s;
break;
}
}
- if (j && pDb->Dbms() != dbmsDBASE) // Found a keyfield
+ if (j && (pDb->Dbms() != dbmsDBASE)
+ && (pDb->Dbms() != dbmsXBASE_SEQUITER)
+ ) // Found a keyfield
{
switch (pDb->Dbms())
{
if (j++) // Multi part key, comma separate names
sqlStmt += wxT(",");
sqlStmt += pDb->SQLColumnName(colDefs[i].ColName);
-// sqlStmt += colDefs[i].ColName;
+
+ if (pDb->Dbms() == dbmsMY_SQL &&
+ colDefs[i].DbDataType == DB_DATA_TYPE_VARCHAR)
+ {
+ wxString s;
+ s.Printf(wxT("(%d)"), colDefs[i].SzDataObj);
+ sqlStmt += s;
+ }
}
}
sqlStmt += wxT(")");
sqlStmt += pDb->SQLColumnName(pIdxDefs[i].ColName);
// sqlStmt += pIdxDefs[i].ColName;
+ // MySQL requires a key length on VARCHAR keys
+ if ( pDb->Dbms() == dbmsMY_SQL )
+ {
+ // Find the details on this column
+ int j;
+ for ( j = 0; j < noCols; ++j )
+ {
+ if ( wxStrcmp( pIdxDefs[i].ColName, colDefs[j].ColName ) == 0 )
+ {
+ break;
+ }
+ }
+ if ( colDefs[j].DbDataType == DB_DATA_TYPE_VARCHAR)
+ {
+ wxString s;
+ s.Printf(wxT("(%d)"), colDefs[i].SzDataObj);
+ sqlStmt += s;
+ }
+ }
+
// Postgres and SQL Server 7 do not support the ASC/DESC keywords for index columns
if (!((pDb->Dbms() == dbmsMS_SQL_SERVER) && (strncmp(pDb->dbInf.dbmsVer,"07",2)==0)) &&
!(pDb->Dbms() == dbmsPOSTGRES))
pDb->SQLTableName(idxName.c_str()).c_str(),
pDb->SQLTableName(tableName.c_str()).c_str());
else if ((pDb->Dbms() == dbmsMS_SQL_SERVER) ||
- (pDb->Dbms() == dbmsSYBASE_ASE))
+ (pDb->Dbms() == dbmsSYBASE_ASE) ||
+ (pDb->Dbms() == dbmsXBASE_SEQUITER))
sqlStmt.Printf(wxT("DROP INDEX %s.%s"),
pDb->SQLTableName(tableName.c_str()).c_str(),
pDb->SQLTableName(idxName.c_str()).c_str());
SWORD cType, int size, bool keyField, bool upd,
bool insAllow, bool derivedCol)
{
+ wxASSERT_MSG( index < noCols,
+ _T("Specified column index exceeds the maximum number of columns for this table.") );
+
if (!colDefs) // May happen if the database connection fails
return;
void csstrncpyt(char *s, const char *t, int n)
{
- while ((*s++ = *t++) && --n)
- {};
+ while ( (*s++ = *t++) != '\0' && --n )
+ ;
*s = '\0';
}