wxTable:Count() function now has an optional parameter to allow the count to be done on DISTINCT columns rather than all columns.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4677
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
- strcpy(tableName, tblName); // Table Name
+ wxStrcpy(tableName, tblName); // Table Name
- strcpy(tablePath, tblPath); // Table Path - used for dBase files
+ wxStrcpy(tablePath, tblPath); // Table Path - used for dBase files
if (qryTblName) // Name of the table/view to query
if (qryTblName) // Name of the table/view to query
- strcpy(queryTableName, qryTblName);
+ wxStrcpy(queryTableName, qryTblName);
- strcpy(queryTableName, tblName);
+ wxStrcpy(queryTableName, tblName);
// assert(pDb); // Assert is placed after table name is assigned for error reporting reasons
if (!pDb)
// assert(pDb); // Assert is placed after table name is assigned for error reporting reasons
if (!pDb)
if (! colDefs[i].InsertAllowed)
continue;
if (needComma)
if (! colDefs[i].InsertAllowed)
continue;
if (needComma)
- strcat(sqlStmt, ",");
- strcat(sqlStmt, colDefs[i].ColName);
+ wxStrcat(sqlStmt, ",");
+ wxStrcat(sqlStmt, colDefs[i].ColName);
needComma = TRUE;
}
needComma = FALSE;
needComma = TRUE;
}
needComma = FALSE;
- strcat(sqlStmt, ") VALUES (");
+ wxStrcat(sqlStmt, ") VALUES (");
for (i = 0; i < noCols; i++)
{
if (! colDefs[i].InsertAllowed)
continue;
if (needComma)
for (i = 0; i < noCols; i++)
{
if (! colDefs[i].InsertAllowed)
continue;
if (needComma)
- strcat(sqlStmt, ",");
- strcat(sqlStmt, "?");
+ wxStrcat(sqlStmt, ",");
+ wxStrcat(sqlStmt, "?");
+ wxStrcat(sqlStmt, ")");
// pDb->WriteSqlLog(sqlStmt);
// pDb->WriteSqlLog(sqlStmt);
whereClause[0] = 0;
// Build a select statement to query the database
whereClause[0] = 0;
// Build a select statement to query the database
- strcpy(pSqlStmt, "SELECT ");
+ wxStrcpy(pSqlStmt, "SELECT ");
// SELECT DISTINCT values only?
if (distinct)
// SELECT DISTINCT values only?
if (distinct)
- strcat(pSqlStmt, "DISTINCT ");
+ wxStrcat(pSqlStmt, "DISTINCT ");
// Was a FROM clause specified to join tables to the base table?
// Available for ::Query() only!!!
bool appendFromClause = FALSE;
// Was a FROM clause specified to join tables to the base table?
// Available for ::Query() only!!!
bool appendFromClause = FALSE;
- if (typeOfSelect == DB_SELECT_WHERE && from && strlen(from))
+ if (typeOfSelect == DB_SELECT_WHERE && from && wxStrlen(from))
appendFromClause = TRUE;
// Add the column list
appendFromClause = TRUE;
// Add the column list
// If joining tables, the base table column names must be qualified to avoid ambiguity
if (appendFromClause)
{
// If joining tables, the base table column names must be qualified to avoid ambiguity
if (appendFromClause)
{
- strcat(pSqlStmt, queryTableName);
- strcat(pSqlStmt, ".");
+ wxStrcat(pSqlStmt, queryTableName);
+ wxStrcat(pSqlStmt, ".");
- strcat(pSqlStmt, colDefs[i].ColName);
+ wxStrcat(pSqlStmt, colDefs[i].ColName);
+ wxStrcat(pSqlStmt, ",");
}
// If the datasource supports ROWID, get this column as well. Exception: Don't retrieve
}
// If the datasource supports ROWID, get this column as well. Exception: Don't retrieve
// If joining tables, the base table column names must be qualified to avoid ambiguity
if (appendFromClause)
{
// If joining tables, the base table column names must be qualified to avoid ambiguity
if (appendFromClause)
{
- strcat(pSqlStmt, ",");
- strcat(pSqlStmt, queryTableName);
- strcat(pSqlStmt, ".ROWID");
+ wxStrcat(pSqlStmt, ",");
+ wxStrcat(pSqlStmt, queryTableName);
+ wxStrcat(pSqlStmt, ".ROWID");
- strcat(pSqlStmt, ",ROWID");
+ wxStrcat(pSqlStmt, ",ROWID");
}
// Append the FROM tablename portion
}
// Append the FROM tablename portion
- strcat(pSqlStmt, " FROM ");
- strcat(pSqlStmt, queryTableName);
+ wxStrcat(pSqlStmt, " FROM ");
+ wxStrcat(pSqlStmt, queryTableName);
// Sybase uses the HOLDLOCK keyword to lock a record during query.
// The HOLDLOCK keyword follows the table name in the from clause.
// Sybase uses the HOLDLOCK keyword to lock a record during query.
// The HOLDLOCK keyword follows the table name in the from clause.
// NOHOLDLOCK (the default). Note: The "FOR UPDATE" clause
// is parsed but ignored in SYBASE Transact-SQL.
if (selectForUpdate && (pDb->Dbms() == dbmsSYBASE_ASA || pDb->Dbms() == dbmsSYBASE_ASE))
// NOHOLDLOCK (the default). Note: The "FOR UPDATE" clause
// is parsed but ignored in SYBASE Transact-SQL.
if (selectForUpdate && (pDb->Dbms() == dbmsSYBASE_ASA || pDb->Dbms() == dbmsSYBASE_ASE))
- strcat(pSqlStmt, " HOLDLOCK");
+ wxStrcat(pSqlStmt, " HOLDLOCK");
- strcat(pSqlStmt, from);
+ wxStrcat(pSqlStmt, from);
// Append the WHERE clause. Either append the where clause for the class
// or build a where clause. The typeOfSelect determines this.
switch(typeOfSelect)
{
case DB_SELECT_WHERE:
// Append the WHERE clause. Either append the where clause for the class
// or build a where clause. The typeOfSelect determines this.
switch(typeOfSelect)
{
case DB_SELECT_WHERE:
- if (where && strlen(where)) // May not want a where clause!!!
+ if (where && wxStrlen(where)) // May not want a where clause!!!
- strcat(pSqlStmt, " WHERE ");
- strcat(pSqlStmt, where);
+ wxStrcat(pSqlStmt, " WHERE ");
+ wxStrcat(pSqlStmt, where);
}
break;
case DB_SELECT_KEYFIELDS:
GetWhereClause(whereClause, DB_WHERE_KEYFIELDS);
}
break;
case DB_SELECT_KEYFIELDS:
GetWhereClause(whereClause, DB_WHERE_KEYFIELDS);
- if (strlen(whereClause))
+ if (wxStrlen(whereClause))
- strcat(pSqlStmt, " WHERE ");
- strcat(pSqlStmt, whereClause);
+ wxStrcat(pSqlStmt, " WHERE ");
+ wxStrcat(pSqlStmt, whereClause);
}
break;
case DB_SELECT_MATCHING:
GetWhereClause(whereClause, DB_WHERE_MATCHING);
}
break;
case DB_SELECT_MATCHING:
GetWhereClause(whereClause, DB_WHERE_MATCHING);
- if (strlen(whereClause))
+ if (wxStrlen(whereClause))
- strcat(pSqlStmt, " WHERE ");
- strcat(pSqlStmt, whereClause);
+ wxStrcat(pSqlStmt, " WHERE ");
+ wxStrcat(pSqlStmt, whereClause);
}
break;
}
// Append the ORDER BY clause
}
break;
}
// Append the ORDER BY clause
- if (orderBy && strlen(orderBy))
+ if (orderBy && wxStrlen(orderBy))
- strcat(pSqlStmt, " ORDER BY ");
- strcat(pSqlStmt, orderBy);
+ wxStrcat(pSqlStmt, " ORDER BY ");
+ wxStrcat(pSqlStmt, orderBy);
}
// SELECT FOR UPDATE if told to do so and the datasource is capable. Sybase
// parses the FOR UPDATE clause but ignores it. See the comment above on the
// HOLDLOCK for Sybase.
if (selectForUpdate && CanSelectForUpdate())
}
// SELECT FOR UPDATE if told to do so and the datasource is capable. Sybase
// parses the FOR UPDATE clause but ignores it. See the comment above on the
// HOLDLOCK for Sybase.
if (selectForUpdate && CanSelectForUpdate())
- strcat(pSqlStmt, " FOR UPDATE");
+ wxStrcat(pSqlStmt, " FOR UPDATE");
} // wxTable::GetSelectStmt()
} // wxTable::GetSelectStmt()
continue;
// Comma Delimiter
if (needComma)
continue;
// Comma Delimiter
if (needComma)
+ wxStrcat(sqlStmt, ",");
- strcat(sqlStmt, colDefs[i].ColName);
- strcat(sqlStmt, " ");
+ wxStrcat(sqlStmt, colDefs[i].ColName);
+ wxStrcat(sqlStmt, " ");
// Column Type
switch(colDefs[i].DbDataType)
{
case DB_DATA_TYPE_VARCHAR:
// Column Type
switch(colDefs[i].DbDataType)
{
case DB_DATA_TYPE_VARCHAR:
- strcat(sqlStmt, pDb->typeInfVarchar.TypeName); break;
+ wxStrcat(sqlStmt, pDb->typeInfVarchar.TypeName); break;
case DB_DATA_TYPE_INTEGER:
case DB_DATA_TYPE_INTEGER:
- strcat(sqlStmt, pDb->typeInfInteger.TypeName); break;
+ wxStrcat(sqlStmt, pDb->typeInfInteger.TypeName); break;
- strcat(sqlStmt, pDb->typeInfFloat.TypeName); break;
+ wxStrcat(sqlStmt, pDb->typeInfFloat.TypeName); break;
- strcat(sqlStmt, pDb->typeInfDate.TypeName); break;
+ wxStrcat(sqlStmt, pDb->typeInfDate.TypeName); break;
}
// For varchars, append the size of the string
if (colDefs[i].DbDataType == DB_DATA_TYPE_VARCHAR)
{
char s[10];
}
// For varchars, append the size of the string
if (colDefs[i].DbDataType == DB_DATA_TYPE_VARCHAR)
{
char s[10];
- // strcat(sqlStmt, "(");
- // strcat(sqlStmt, itoa(colDefs[i].SzDataObj, s, 10));
- // strcat(sqlStmt, ")");
+ // wxStrcat(sqlStmt, "(");
+ // wxStrcat(sqlStmt, itoa(colDefs[i].SzDataObj, s, 10));
+ // wxStrcat(sqlStmt, ")");
sprintf(s, "(%d)", colDefs[i].SzDataObj);
sprintf(s, "(%d)", colDefs[i].SzDataObj);
if (pDb->Dbms() == dbmsSYBASE_ASE || pDb->Dbms() == dbmsMY_SQL)
{
if (colDefs[i].KeyField)
{
if (pDb->Dbms() == dbmsSYBASE_ASE || pDb->Dbms() == dbmsMY_SQL)
{
if (colDefs[i].KeyField)
{
- strcat(sqlStmt, " NOT NULL");
+ wxStrcat(sqlStmt, " NOT NULL");
{
if (pDb->Dbms() != dbmsMY_SQL)
{
{
if (pDb->Dbms() != dbmsMY_SQL)
{
- strcat(sqlStmt, ",CONSTRAINT ");
- strcat(sqlStmt, tableName);
- strcat(sqlStmt, "_PIDX PRIMARY KEY (");
+ wxStrcat(sqlStmt, ",CONSTRAINT ");
+ wxStrcat(sqlStmt, tableName);
+ wxStrcat(sqlStmt, "_PIDX PRIMARY KEY (");
}
else
{
/* MySQL goes out on this one. We also declare the relevant key NON NULL above */
}
else
{
/* MySQL goes out on this one. We also declare the relevant key NON NULL above */
- strcat(sqlStmt, ", PRIMARY KEY (");
+ wxStrcat(sqlStmt, ", PRIMARY KEY (");
}
// List column name(s) of column(s) comprising the primary key
}
// List column name(s) of column(s) comprising the primary key
if (colDefs[i].KeyField)
{
if (j++) // Multi part key, comma separate names
if (colDefs[i].KeyField)
{
if (j++) // Multi part key, comma separate names
- strcat(sqlStmt, ",");
- strcat(sqlStmt, colDefs[i].ColName);
+ wxStrcat(sqlStmt, ",");
+ wxStrcat(sqlStmt, colDefs[i].ColName);
+ wxStrcat(sqlStmt, ")");
}
// Append the closing parentheses for the create table statement
}
// Append the closing parentheses for the create table statement
+ wxStrcat(sqlStmt, ")");
pDb->WriteSqlLog(sqlStmt);
pDb->WriteSqlLog(sqlStmt);
return (FALSE);
// Build a CREATE INDEX statement
return (FALSE);
// Build a CREATE INDEX statement
- strcpy(sqlStmt, "CREATE ");
+ wxStrcpy(sqlStmt, "CREATE ");
- strcat(sqlStmt, "UNIQUE ");
+ wxStrcat(sqlStmt, "UNIQUE ");
- strcat(sqlStmt, "INDEX ");
- strcat(sqlStmt, idxName);
- strcat(sqlStmt, " ON ");
- strcat(sqlStmt, tableName);
- strcat(sqlStmt, " (");
+ wxStrcat(sqlStmt, "INDEX ");
+ wxStrcat(sqlStmt, idxName);
+ wxStrcat(sqlStmt, " ON ");
+ wxStrcat(sqlStmt, tableName);
+ wxStrcat(sqlStmt, " (");
// Append list of columns making up index
int i;
for (i = 0; i < noIdxCols; i++)
{
// Append list of columns making up index
int i;
for (i = 0; i < noIdxCols; i++)
{
- strcat(sqlStmt, pIdxDefs[i].ColName);
+ wxStrcat(sqlStmt, pIdxDefs[i].ColName);
/* Postgres doesn't cope with ASC */
if (pDb->Dbms() != dbmsPOSTGRES)
{
if (pIdxDefs[i].Ascending)
/* Postgres doesn't cope with ASC */
if (pDb->Dbms() != dbmsPOSTGRES)
{
if (pIdxDefs[i].Ascending)
- strcat(sqlStmt, " ASC");
+ wxStrcat(sqlStmt, " ASC");
- strcat(sqlStmt, " DESC");
+ wxStrcat(sqlStmt, " DESC");
}
if ((i + 1) < noIdxCols)
}
if ((i + 1) < noIdxCols)
+ wxStrcat(sqlStmt, ",");
}
// Append closing parentheses
}
// Append closing parentheses
+ wxStrcat(sqlStmt, ")");
pDb->WriteSqlLog(sqlStmt);
pDb->WriteSqlLog(sqlStmt);
if (colDefs[i].Updateable)
{
if (! firstColumn)
if (colDefs[i].Updateable)
{
if (! firstColumn)
+ wxStrcat(pSqlStmt, ",");
else
firstColumn = FALSE;
else
firstColumn = FALSE;
- strcat(pSqlStmt, colDefs[i].ColName);
- strcat(pSqlStmt, " = ?");
+ wxStrcat(pSqlStmt, colDefs[i].ColName);
+ wxStrcat(pSqlStmt, " = ?");
}
}
// Append the WHERE clause to the SQL UPDATE statement
}
}
// Append the WHERE clause to the SQL UPDATE statement
- strcat(pSqlStmt, " WHERE ");
+ wxStrcat(pSqlStmt, " WHERE ");
switch(typeOfUpd)
{
case DB_UPD_KEYFIELDS:
switch(typeOfUpd)
{
case DB_UPD_KEYFIELDS:
// based on the key fields.
if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, ROWID_LEN, &cb) == SQL_SUCCESS)
{
// based on the key fields.
if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, ROWID_LEN, &cb) == SQL_SUCCESS)
{
- strcat(pSqlStmt, "ROWID = '");
- strcat(pSqlStmt, rowid);
- strcat(pSqlStmt, "'");
+ wxStrcat(pSqlStmt, "ROWID = '");
+ wxStrcat(pSqlStmt, rowid);
+ wxStrcat(pSqlStmt, "'");
break;
}
}
// Unable to delete by ROWID, so build a WHERE
// clause based on the keyfields.
GetWhereClause(whereClause, DB_WHERE_KEYFIELDS);
break;
}
}
// Unable to delete by ROWID, so build a WHERE
// clause based on the keyfields.
GetWhereClause(whereClause, DB_WHERE_KEYFIELDS);
- strcat(pSqlStmt, whereClause);
+ wxStrcat(pSqlStmt, whereClause);
break;
case DB_UPD_WHERE:
break;
case DB_UPD_WHERE:
- strcat(pSqlStmt, pWhereClause);
+ wxStrcat(pSqlStmt, pWhereClause);
// Handle the case of DeleteWhere() and the where clause is blank. It should
// delete all records from the database in this case.
// Handle the case of DeleteWhere() and the where clause is blank. It should
// delete all records from the database in this case.
- if (typeOfDel == DB_DEL_WHERE && (pWhereClause == 0 || strlen(pWhereClause) == 0))
+ if (typeOfDel == DB_DEL_WHERE && (pWhereClause == 0 || wxStrlen(pWhereClause) == 0))
{
sprintf(pSqlStmt, "DELETE FROM %s", tableName);
return;
{
sprintf(pSqlStmt, "DELETE FROM %s", tableName);
return;
// based on the key fields.
if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, ROWID_LEN, &cb) == SQL_SUCCESS)
{
// based on the key fields.
if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, ROWID_LEN, &cb) == SQL_SUCCESS)
{
- strcat(pSqlStmt, "ROWID = '");
- strcat(pSqlStmt, rowid);
- strcat(pSqlStmt, "'");
+ wxStrcat(pSqlStmt, "ROWID = '");
+ wxStrcat(pSqlStmt, rowid);
+ wxStrcat(pSqlStmt, "'");
break;
}
}
// Unable to delete by ROWID, so build a WHERE
// clause based on the keyfields.
GetWhereClause(whereClause, DB_WHERE_KEYFIELDS);
break;
}
}
// Unable to delete by ROWID, so build a WHERE
// clause based on the keyfields.
GetWhereClause(whereClause, DB_WHERE_KEYFIELDS);
- strcat(pSqlStmt, whereClause);
+ wxStrcat(pSqlStmt, whereClause);
break;
case DB_DEL_WHERE:
break;
case DB_DEL_WHERE:
- strcat(pSqlStmt, pWhereClause);
+ wxStrcat(pSqlStmt, pWhereClause);
break;
case DB_DEL_MATCHING:
GetWhereClause(whereClause, DB_WHERE_MATCHING);
break;
case DB_DEL_MATCHING:
GetWhereClause(whereClause, DB_WHERE_MATCHING);
- strcat(pSqlStmt, whereClause);
+ wxStrcat(pSqlStmt, whereClause);
continue;
// If there is more than 1 column, join them with the keyword "AND"
if (moreThanOneColumn)
continue;
// If there is more than 1 column, join them with the keyword "AND"
if (moreThanOneColumn)
- strcat(pWhereClause, " AND ");
+ wxStrcat(pWhereClause, " AND ");
else
moreThanOneColumn = TRUE;
// Concatenate where phrase for the column
else
moreThanOneColumn = TRUE;
// Concatenate where phrase for the column
- if (qualTableName && strlen(qualTableName))
+ if (qualTableName && wxStrlen(qualTableName))
- strcat(pWhereClause, qualTableName);
- strcat(pWhereClause, ".");
+ wxStrcat(pWhereClause, qualTableName);
+ wxStrcat(pWhereClause, ".");
- strcat(pWhereClause, colDefs[i].ColName);
- strcat(pWhereClause, " = ");
+ wxStrcat(pWhereClause, colDefs[i].ColName);
+ wxStrcat(pWhereClause, " = ");
switch(colDefs[i].SqlCtype)
{
case SQL_C_CHAR:
switch(colDefs[i].SqlCtype)
{
case SQL_C_CHAR:
sprintf(colValue, "%.6f", *((SDOUBLE *) colDefs[i].PtrDataObj));
break;
}
sprintf(colValue, "%.6f", *((SDOUBLE *) colDefs[i].PtrDataObj));
break;
}
- strcat(pWhereClause, colValue);
+ wxStrcat(pWhereClause, colValue);
if (!colDefs) // May happen if the database connection fails
return;
if (!colDefs) // May happen if the database connection fails
return;
- if (strlen(fieldName) > (unsigned int) DB_MAX_COLUMN_NAME_LEN)
+ if (wxStrlen(fieldName) > (unsigned int) DB_MAX_COLUMN_NAME_LEN)
- strncpy (colDefs[index].ColName, fieldName, DB_MAX_COLUMN_NAME_LEN);
+ wxStrncpy (colDefs[index].ColName, fieldName, DB_MAX_COLUMN_NAME_LEN);
colDefs[index].ColName[DB_MAX_COLUMN_NAME_LEN] = 0;
}
else
colDefs[index].ColName[DB_MAX_COLUMN_NAME_LEN] = 0;
}
else
- strcpy(colDefs[index].ColName, fieldName);
+ wxStrcpy(colDefs[index].ColName, fieldName);
colDefs[index].DbDataType = dataType;
colDefs[index].PtrDataObj = pData;
colDefs[index].DbDataType = dataType;
colDefs[index].PtrDataObj = pData;
} // wxTable::SetCursor()
} // wxTable::SetCursor()
-/********** wxTable::Count() **********/
-ULONG wxTable::Count(void)
+/********** wxTable::Count(const char *) **********/
+ULONG wxTable::Count(const char *args)
{
ULONG l;
char sqlStmt[DB_MAX_STATEMENT_LEN];
SDWORD cb;
// Build a "SELECT COUNT(*) FROM queryTableName [WHERE whereClause]" SQL Statement
{
ULONG l;
char sqlStmt[DB_MAX_STATEMENT_LEN];
SDWORD cb;
// Build a "SELECT COUNT(*) FROM queryTableName [WHERE whereClause]" SQL Statement
- strcpy(sqlStmt, "SELECT COUNT(*) FROM ");
- strcat(sqlStmt, queryTableName);
+ wxStrcpy(sqlStmt, "SELECT COUNT(");
+ wxStrcat(sqlStmt, args);
+ wxStrcat(sqlStmt, ") FROM ");
+ wxStrcat(sqlStmt, queryTableName);
- if (from && strlen(from))
- strcat(sqlStmt, from);
+ if (from && wxStrlen(from))
+ wxStrcat(sqlStmt, from);
// Add the where clause if one is provided
// Add the where clause if one is provided
- if (where && strlen(where))
+ if (where && wxStrlen(where))
- strcat(sqlStmt, " WHERE ");
- strcat(sqlStmt, where);
+ wxStrcat(sqlStmt, " WHERE ");
+ wxStrcat(sqlStmt, where);
}
pDb->WriteSqlLog(sqlStmt);
}
pDb->WriteSqlLog(sqlStmt);
// Build a where clause to refetch the record with. Try and use the
// ROWID if it's available, ow use the key fields.
char whereClause[DB_MAX_WHERE_CLAUSE_LEN+1];
// Build a where clause to refetch the record with. Try and use the
// ROWID if it's available, ow use the key fields.
char whereClause[DB_MAX_WHERE_CLAUSE_LEN+1];
- strcpy(whereClause, "");
+ wxStrcpy(whereClause, "");
if (CanUpdByROWID())
{
SDWORD cb;
if (CanUpdByROWID())
{
SDWORD cb;
// based on the key fields.
if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, ROWID_LEN, &cb) == SQL_SUCCESS)
{
// based on the key fields.
if (SQLGetData(hstmt, noCols+1, SQL_C_CHAR, (UCHAR*) rowid, ROWID_LEN, &cb) == SQL_SUCCESS)
{
- strcat(whereClause, queryTableName);
- strcat(whereClause, ".ROWID = '");
- strcat(whereClause, rowid);
- strcat(whereClause, "'");
+ wxStrcat(whereClause, queryTableName);
+ wxStrcat(whereClause, ".ROWID = '");
+ wxStrcat(whereClause, rowid);
+ wxStrcat(whereClause, "'");
}
}
// If unable to use the ROWID, build a where clause from the keyfields
}
}
// If unable to use the ROWID, build a where clause from the keyfields
- if (strlen(whereClause) == 0)
+ if (wxStrlen(whereClause) == 0)
GetWhereClause(whereClause, DB_WHERE_KEYFIELDS, queryTableName);
// Requery the record
GetWhereClause(whereClause, DB_WHERE_KEYFIELDS, queryTableName);
// Requery the record