These are the databases currently tested and working with the ODBC classes. A call to \helpref{wxDb::Dbms}{wxdbdbms} will return one of these enumerated values listed below.
-\begin{verbatim}
- dbmsUNIDENTIFIED
- dbmsORACLE
- dbmsSYBASE_ASA // Adaptive Server Anywhere
- dbmsSYBASE_ASE // Adaptive Server Enterprise
- dbmsMS_SQL_SERVER
- dbmsMY_SQL
- dbmsPOSTGRES
- dbmsACCESS
- dbmsDBASE
- dbmsINFORMIX
- dbmsVIRTUOSO
- dbmsDB2
- dbmdINTERBASE
-\end{verbatim}
+\begin{itemize}\itemsep=0pt
+\item DB2
+\item DBase (IV, V)**
+\item Firebird
+\item INFORMIX
+\item Interbase
+\item MS SQL Server (v7 - minimal testing)
+\item MS Access (97, 2000, 2002, and 2003)
+\item MySQL (2.x and 3.5 - use the 2.5x drivers though)
+\item Oracle (v7, v8, v8i)
+\item Pervasive SQL
+\item PostgreSQL
+\item Sybase (ASA and ASE)
+\item XBase Sequiter
+\item VIRTUOSO
+\end{itemize}
See the remarks in \helpref{wxDb::Dbms}{wxdbdbms} for exceptions/issues with each of these database engines.
\begin{verbatim}
// Incomplete code sample
db.CreateView("PARTS_SD1", "PN, PD, QTY",
- "SELECT PART_NO, PART_DESC, QTY_ON_HAND * 1.1 FROM PARTS \
+ "SELECT PART_NUM, PART_DESC, QTY_ON_HAND * 1.1 FROM PARTS \
WHERE STORAGE_DEVICE = 1");
// PARTS_SD1 can now be queried just as if it were a data table.
\membersection{wxDb::GetData}\label{wxdbgetdata}
-\func{bool}{GetData}{\param{UWORD}{ colNo}, \param{SWORD}{ cType},
+\func{bool}{GetData}{\param{UWORD}{ colNumber}, \param{SWORD}{ cType},
\param{PTR}{ pData}, \param{SDWORD}{ maxLen}, \param{SDWORD FAR *}{ cbReturned} }
Used to retrieve result set data without binding column values to memory
\wxheading{Parameters}
-\docparam{colNo}{Ordinal number of the desired column in the result set to be
+\docparam{colNumber}{Ordinal number of the desired column in the result set to be
returned.}
\docparam{cType}{The C data type that is to be returned. See a partial list
in \helpref{wxDbTable::SetColDefs}{wxdbtablesetcoldefs}}
\membersection{wxDb::GetKeyFields}\label{wxdbgetkeyfields}
-\func{int }{GetKeyFields}{\param{const wxString \&}{tableName}, \param{wxDbColInf *}{colInf}, \param{UWORD }{nocols}}
+\func{int }{GetKeyFields}{\param{const wxString \&}{tableName}, \param{wxDbColInf *}{colInf}, \param{UWORD }{numColumns}}
Used to determine which columns are members of primary or non-primary indexes on the specified table. If a column is a member of a foreign key for some other table, that information is detected also.
\docparam{tableName}{Name of the table for which the columns will be evaluated as to their inclusion in any indexes.}
\docparam{colInf}{Data structure containing the column definitions (obtained with \helpref{wxDb::GetColumns}{wxdbgetcolumns}). This function populates the PkCol, PkTableName, and FkTableName members of the colInf structure.}
-\docparam{nocols}{Number of columns defined in the instance of colInf.}
+\docparam{numColumns}{Number of columns defined in the instance of colInf.}
\wxheading{Return value}
// Incomplete code sample
wxDbTable parts;
.....
- if (parts.CanUpdByROWID())
+ if (parts.CanUpdateByROWID())
{
// Note that the ROWID column must always be the last column selected
- sqlStmt = "SELECT PART_NO, PART_DESC, ROWID" FROM PARTS";
+ sqlStmt = "SELECT PART_NUM, PART_DESC, ROWID" FROM PARTS";
}
else
- sqlStmt = "SELECT PART_NO, PART_DESC FROM PARTS";
+ sqlStmt = "SELECT PART_NUM, PART_DESC FROM PARTS";
\end{verbatim}
\membersection{wxDbTable::ClearMemberVar}\label{wxdbtableclearmembervar}
-\func{void}{ClearMemberVar}{\param{UWORD }{colNo}, \param{bool }{setToNull=false}}
+\func{void}{ClearMemberVar}{\param{UWORD }{colNumber}, \param{bool }{setToNull=false}}
Same as \helpref{wxDbTable::ClearMemberVars}{wxdbtableclearmembervars} except
that this function clears only the specified column of its values, and
optionally sets the column to be a NULL column.
-\docparam{colNo}{Column number that is to be cleared. This number (between 0
-and (noCols-1)) is the index of the column definition created using the
+\docparam{colNumber}{Column number that is to be cleared. This number (between 0
+and (numColumns-1)) is the index of the column definition created using the
\helpref{wxDbTable::SetColDefs}{wxdbtablesetcoldefs} function.}
\docparam{setToNull}{{\it OPTIONAL}. Indicates whether the column should be
flagged as being a NULL value stored in the bound memory variable. If true,
\membersection{wxDbTable::IsColNull}\label{wxdbtableiscolnull}
-\func{bool }{IsColNull}{\param{UWORD }{colNo}} const
+\func{bool }{IsColNull}{\param{UWORD }{colNumber}} const
Used primarily in the ODBC class library to determine if a column value is
set to "NULL". Works for all data types supported by the ODBC class library.
\wxheading{Parameters}
-\docparam{colNo}{The column number of the bound column as defined by the
+\docparam{colNumber}{The column number of the bound column as defined by the
\helpref{wxDbTable::SetColDefs}{wxdbtablesetcoldefs}
calls which defined the columns accessible to this wxDbTable instance.}
10%).
\item The ROWID can be included in your SELECT statement as the {\bf last}
column selected, if the datasource supports it. Use
-wxDbTable::CanUpdByROWID() to determine if the ROWID can be
+wxDbTable::CanUpdateByROWID() to determine if the ROWID can be
selected from the datasource. If it can, much better
performance can be achieved on updates and deletes by including
the ROWID in the SELECT statement.
----------------------
// Table Join returning 3 columns
- SELECT part_no, part_desc, sd_name
+ SELECT PART_NUM, part_desc, sd_name
from parts, storage_devices
where parts.storage_device_id =
storage_devices.storage_device_id
SELECT count(*) from PARTS where container = 99
// Order by clause; ROWID, scalar function
- SELECT part_no, substring(part_desc, 1, 10), qty_on_hand + 1, ROWID
+ SELECT PART_NUM, substring(part_desc, 1, 10), qty_on_hand + 1, ROWID
from parts
where warehouse = 10
- order by part_no desc // descending order
+ order by PART_NUM desc // descending order
// Subquery
SELECT * from parts
Other valid types are available also, but these are the most common ones:}
\begin{verbatim}
- SQL_C_CHAR // strings
+ SQL_C_CHAR // string - deprecated: use SQL_C_WXCHAR
+ SQL_C_WXCHAR // string - Used transparently in unicode or non-unicode builds
SQL_C_LONG
SQL_C_ULONG
SQL_C_SHORT
\begin{verbatim}
// Long way not using this function
- wxStrcpy(colDefs[0].ColName, "PART_NO");
+ wxStrcpy(colDefs[0].ColName, "PART_NUM");
colDefs[0].DbDataType = DB_DATA_TYPE_VARCHAR;
colDefs[0].PtrDataObj = PartNumber;
- colDefs[0].SqlCtype = SQL_C_CHAR;
+ colDefs[0].SqlCtype = SQL_C_WXCHAR;
colDefs[0].SzDataObj = PART_NUMBER_LEN;
colDefs[0].KeyField = true;
colDefs[0].Updateable = false;
colDefs[0].DerivedCol = false;
// Shortcut using this function
- SetColDefs(0, "PART_NUMBER", DB_DATA_TYPE_VARCHAR, PartNumber,
- SQL_C_CHAR, PART_NUMBER_LEN, true, false,true,false);
+ SetColDefs(0, "PART_NUM", DB_DATA_TYPE_VARCHAR, PartNumber,
+ SQL_C_WXCHAR, PART_NUMBER_LEN, true, false, true, false);
\end{verbatim}
\membersection{wxDbTable::SetCursor}\label{wxdbtablesetcursor}
\membersection{wxDbTable::SetColNull}\label{wxdbtablesetcolnull}
-\func{bool}{SetColNull}{\param{UWORD }{colNo}, \param{bool }{set=true}}
+\func{bool}{SetColNull}{\param{UWORD }{colNumber}, \param{bool }{set=true}}
\func{bool}{SetColNull}{\param{const wxString \&}{colName},
\param{bool }{set=true}}
\wxheading{Parameters}
-\docparam{colNo}{Index into the column definitions used when first defining
+\docparam{colNumber}{Index into the column definitions used when first defining
this wxDbTable object.}
\docparam{colName}{Actual data table column name that is to be set to NULL.}
\docparam{set}{Whether the column is set to NULL or not. Passing true sets
\membersection{wxDbGridColInfo::wxDbGridColInfo}\label{wxdbgridcolinfoctor}
-\func{}{wxDbGridColInfo}{\param{int }{colNo}, \param{wxString }{type},
+\func{}{wxDbGridColInfo}{\param{int }{colNumber}, \param{wxString }{type},
\param{wxString }{title}, \param{wxDbGridColInfo *}{next}}
Default constructor. See the database grid example in \helpref{wxDbGridTableBase}{wxdbgridtablebase} to
\wxheading{Parameters}
-\docparam{colNo}{Column number in the \helpref{wxDbTable}{wxdbtable} instance to be used (first column is 0).}
+\docparam{colNumber}{Column number in the \helpref{wxDbTable}{wxdbtable} instance to be used (first column is 0).}
\docparam{type}{Column type ,wxString specifying the grid name for the datatype in this column, or
use wxGRID\_VALUE\_DBAUTO to determine the type automatically from the \helpref{wxDbColDef}{wxdbcoldef} definition}
\docparam{title}{The column label to be used in the grid display}
\membersection{wxDbGridColInfo::AddColInfo}\label{wxdbgridcolinfoaddcolinfo}
-\func{void}{AddColInfo}{\param{int }{colNo},
+\func{void}{AddColInfo}{\param{int }{colNumber},
\param{wxString }{type}, \param{wxString }{title}}
Use this member function for adding columns. See the database
not have any effect.
\wxheading{Parameters}
-\docparam{colNo}{Column number in the \helpref{wxDbTable}{wxdbtable} instance to be used (first column is 0).}
+\docparam{colNumber}{Column number in the \helpref{wxDbTable}{wxdbtable} instance to be used (first column is 0).}
\docparam{type}{Column type ,wxString specifying the grid name for the datatype in this column, or
use wxGRID\_VALUE\_DBAUTO to determine the type automatically from the \helpref{wxDbColDef}{wxdbcoldef} definition}
\docparam{title}{The column label to be used in the grid display}
users have successfully used the classes with the following datasources:
\begin{itemize}\itemsep=0pt
-\item Oracle (v7, v8, v8i)
-\item Sybase (ASA and ASE)
-\item MS SQL Server (v7 - minimal testing)
-\item MS Access (97 and 2000)
-\item MySQL
+\item DB2
\item DBase (IV, V)**
-\item PostgreSQL
+\item Firebird
\item INFORMIX
-\item VIRTUOSO
-\item DB2
\item Interbase
+\item MS SQL Server (v7 - minimal testing)
+\item MS Access (97, 2000, 2002, and 2003)
+\item MySQL (2.x and 3.5 - use the 2.5x drivers though)
+\item Oracle (v7, v8, v8i)
\item Pervasive SQL
+\item PostgreSQL
+\item Sybase (ASA and ASE)
+\item XBase Sequiter
+\item VIRTUOSO
\end{itemize}
An up-to-date list can be obtained by looking in the comments of the function
\begin{verbatim}
table->SetColDefs(0, "FIRST_NAME", DB_DATA_TYPE_VARCHAR, FirstName,
- SQL_C_CHAR, sizeof(FirstName), true, true);
+ SQL_C_WXCHAR, sizeof(FirstName), true, true);
table->SetColDefs(1, "LAST_NAME", DB_DATA_TYPE_VARCHAR, LastName,
- SQL_C_CHAR, sizeof(LastName), true, true);
+ SQL_C_WXCHAR, sizeof(LastName), true, true);
\end{verbatim}
Notice that column definitions start at index 0 and go up to one less than
{\bf UNICODE with wxODBC classes}
-The ODBC classes support for Unicode is yet in early experimental stage and
-hasn't been tested extensively. It might work for you or it might not: please
-report the bugs/problems you have encountered in the latter case.
+As of v2.6 of wxWidgets, the wxODBC classes now fully support the compilation
+and use of the classes in a Unicode build of wxWidgets, assuming the compiler
+and OS on which the program will be compiled/run is Unicode capable.
\subsection{wxODBC - Sample Code}\label{wxodbcsamplecode1}
// returned back to the client.
//
table->SetColDefs(0, wxT("FIRST_NAME"), DB_DATA_TYPE_VARCHAR, FirstName,
- SQL_C_CHAR, sizeof(FirstName), true, true);
+ SQL_C_WXCHAR, sizeof(FirstName), true, true);
table->SetColDefs(1, wxT("LAST_NAME"), DB_DATA_TYPE_VARCHAR, LastName,
- SQL_C_CHAR, sizeof(LastName), true, true);
+ SQL_C_WXCHAR, sizeof(LastName), true, true);
// -----------------------------------------------------------------------