很抱歉因为没有保存丢失了信息而耽搁了时间。教程已将配置环境做了描述,我就把通过WXODBC连接数据库的具体步骤再简要说一下。在使用wxODBC之前,我们需要先了解使用wxODBC访问数据库大概步骤:
1.Define datasource connection information //设置数据源连接信息
2.Get a datasource connection //获得数据连接
3.Create table definition //创建表对象
4.Open the table //打开表
5.Use the table //使用表
6.Close the table //关闭表
7.Close the datasource connection//关闭连接
8.Release the ODBC environment handle//释放环境句柄
一、设置数据源连接信息
使用wxDbConnectInf类对象设置数据源连接信息
结构:
wxDbConnectInf(HENV henv, const wxString &dsn, const wxString &userID=”",
const wxString &password, const wxString &defaultDir=”",
const wxString &description=”", const wxString &fileType=”")
参数:
henv:ODBC环境句柄
dsn:数据源名称
userID:数据库用户名称
password:用户密码
defaultDir:(可选)有特定路径
description:(可选)默认为空
fileType:(可选)默认为空
[cpp]
wxDbConnectInf *DbConnectInf = NULL;
DbConnectInf = new wxDbConnectInf(NULL, wxT(“RMSOURCE”),wxT(“”),wxT(“”));//设置连接信息
if (!DbConnectInf || !DbConnectInf->GetHenv())//连接并判断结果
{
wxMessageBox(wxT(“DB ENV ERROR: Cannot allocate ODBC env handle”));
}
[/cpp]
说明:
henv设成NULL是让构造函数在构造时分配一个环境句柄,我们也可使用AllocHenv()进行分配,这里不细述了。
二、获得数据连接
使用wxDbGetConnection()方法及wxDB类的对象来获得数据连接
结构:
wxDbGetConnection(wxDb * InfConfig)
参数:
InfConfig:数据源设置信息
[cpp]
wxDb *db = NULL;//声明一个wxDB对象来获得数据连接
db = wxDbGetConnection(DbConnectInf);
if (!db)//判断是否获得连接
{
wxMessageBox(wxT(“CONNECTION ERROR – Cannot get DB connection”));
}
[/cpp]
三、创建表对象
这里我们将用到wxDbTable类及其成员函数SetColDefs()
结构:
wxDbTable(wxDb *pwxDb, const wxString &tblName, const UWORD numColumns, const wxString
&qryTblName = “”, bool qryOnly = !wxDB_QUERY_ONLY, const wxString &tblPath = “”)
参数:
pwxDb:wxDb的指针
tblName:数据库中的表名
numColumns:表的列数
qryTblName:查询得到的数据的表名
qryOnly:查询得到数据的读写权限
tblPath:有些数据源需要特定路径
[cpp]
wxDbTable *table = NULL;
const wxChar tableName[] = wxT(“test”);
const UWORD numTableColumns = 2;
wxChar FirstName[50+1]; //table的数据成员,用来绑定数据库表中字段
wxChar LastName[50+1];
table = new wxDbTable(db, tableName, numTableColumns, wxT(“”), !
wxDB_QUERY_ONLY, wxT(“”));
/*将table中的变量与数据库中的字段进行绑定*/
table->SetColDefs(0, wxT(“FIRST_NAME”), DB_DATA_TYPE_VARCHAR, FirstName,
SQL_C_WXCHAR, sizeof(FirstName), true, true);
table->SetColDefs(1, wxT(“LAST_NAME”), DB_DATA_TYPE_VARCHAR, LastName,
SQL_C_WXCHAR, sizeof(LastName), true, true);
[/cpp]
说明:
我们在理解table时,一定要把它当成对象,这个对象由我们自己按照我们的需要来建立,这个对象与数据库中的表相对
应,我们对这个对象的控制实际上就是对数据库中表的控制,这个对象的数据成员自然也由我们来定,比如我们在建立一个对
象时并不需要数据库表中的所有字段,我们只需用SetColDefs()绑定我们需要的字段即可。要注意的是,tableName是数
据库中的表名,我们需要访问哪个表时,就建立一个wxdbtable对象与之对应,理解了这个我们操作数据库就很简单了。如果
我们new了一个新表名,那么我们可以用Creat()函数在数据空中建立一张新表,这里不细述了。
四、数据库的操作
在完成了上面的工作后,我们就可以对数据库进行操作了
[cpp]
/*打开我们要操作的表*/
if (!table->Open())
{
wxMessageBox(wxT(“TABLE OPEN ERROR: “));
}
/*接下来就可以对数据库进行操作了*/
// ———————————————————————–
// 添加记录
// ———————————————————————–
wxStrcpy(FirstName, wxT(“JULIAN”));//FirstName所绑定的字段将添加一条”JULIAN”记录
wxStrcpy(LastName, wxT(“SMART”));
if (!table->Insert())
{
wxMessageBox(wxt(“Insert error!”));
}
table->GetDb()->CommitTrans();//更新数据库时必须ComitTrans()
// ———————————————————————–
// 查询记录,也可使用QueryBySqlStmt(wxstring &sqlstmt),sqlstmt就是我们写的
// SQL语句,使用起来更为灵活。
// 例:
// wxString sql=”select * from Table “//根据需要写我们的查询语句
// if (table->QueryBySqlStmt(sql)
// {
// wxMessageBox(“QUERY ERROR”);
// }
// ———————————————————————–
/*查询语句,实际上就是SQL语句*/
table->SetWhereClause(wxT(“FIRST_NAME<>NULL”));//where从句
table->SetOrderByClause(wxT(“LAST_NAME”));//order从句
table->SetFromClause(wxT(“”));//from从句,这里是from table
if (!table->Query())//查询并判断结果
{
wxMessageBox(“QUERY ERROR”);
}
/*将查询结果显示到表格控件中*/
int n=0;//表格控件的行数
m_grid->AppendCols(2);//给表格控件增加2列
while (table->GetNext())
{
m_grid->AppendRows(1);//初始化wxGrid控件是为(0,0)
m_grid->SetCellValue(FirstName,n,0);
m_grid->SetCellValue(LastName,n,1);
n++;
}
// ———————————————————————–
// 删除记录
// ———————————————————————–
if (!table->DeleteWhere(wxT(“FIRST_NAME = ‘JULIAN’ and LAST_NAME = ‘SMART’”)))
{
wxMessageBox(wxT(“DELETION ERROR: “));
}
table->GetDb()->CommitTrans();
// ———————————————————————–
// 完成了对table的使用,我们必须做些清理工作
// ———————————————————————–
wxDELETE(table);//删除已使用完table
wxDbFreeConnection(db);//释放连接
db = NULL;
wxDbCloseConnections();//关闭所有连接
wxDELETE(DbConnectInf);//释放ODBC环境句柄
[/cpp]
小结:
就此我们使用wxODBC连接数据库并进行操作就基本完成了,当然在使用时要根据自己的需求来定,个人认为理解
wxDbTable类对象是使用wxODBC的关键。