设为首页 加入收藏

TOP

用VC++开发数据库应用程序(四)(二)
2012-11-04 15:16:53 来源: 作者: 【 】 浏览:544
Tags:开发 数据库 应用程序
  3.2 应用ODBC编程(www.cppentry.com)

  可以应用AppWizard来建立一个ODBC的应用程序框架,也可以直接使用ODBC来进行数据库编程(www.cppentry.com),这时,应包括头文件afxdb.h。

  应用ODBC编程(www.cppentry.com)两个最重要的类是CDatabase和CRecordSet,但在应用程序中,不应直接使用CRecordSet类,而必须从CRecordSet类产生一个导出类,并添加相应于数据库表中字段的成员变量。随后,重载CRecordset类的成员函数DoFieldExchange,该函数通过使用RFX函数完成数据库字段与记录集域数据成员变量的数据交换,RFX函数同对话框数据交换(DDX)机制相类似,负责完成数据库与成员变量间的数据交换。
 
  下面举例说明在Visual C++(www.cppentry.com)环境中ODBC 的编程(www.cppentry.com)技巧:

  3.21 数据库连接

  在CRecordSet类中定义了一个成员变 量m_pDatabase:

CDatabase *m_pDatabase;

  它是指向对象数据库类的指针。如果在CRecordSet类对象调用Open()函数之前,将一个已经打开的CDatabase类对象指针传给m_pDatabase,就能共享相同 的CDatabase类对象。如: 

CDatabase m_db;
CRecordSet m_set1,m_set2;
m_db.Open(_T("Super_ES")); // 建 立ODBC 连 接
m_set1.m_pDatabase=&m_db; //m_set1 复 用m_db 对 象
m_set2.m_pDatabse=&m_db; // m_set2 复 用m_db 对 象

或如下:

Cdatabase db;
db.Open(“Database”); //建立ODBC连接
CrecordSet m_set(&db); //构造记录集对象,使数据库指向db

  3.22 查询记录

  查询记录使用CRecordSet::Open()和 CRecordSet::Requery()成员函数。在使用CRecordSet类对象之前,必须使用 CRecordSet::Open()函数来获得有效的记录集。一旦已经使用过CRecordSet::Open() 函数,再次查询时就可以应用CRecordSet::Requery()函数。在调 用CRecordSet::Open()函数时,如果已经将一个已经打开的CDatabase 对象指针传给CRecordSet类对象的m_pDatabase成员变量,则使 用该数据库对象建立ODBC连接;否则如果m_pDatabase为空指 针,就新建一个CDatabase类对象并使其与缺省的数据源 相连,然后进行CRecordSet类对象的初始化。缺省数据源 由GetDefaultConnect()函数获得。你也可以提供你所需要的SQL 语句,并以它来调用CRecordSet::Open()函数,例如:

m_Set.Open(AFX_DATABASE_USE_DEFAULT,strSQL);

  如果没有指定参数,程序则使 用缺省的SQL语句,即对在GetDefaultSQL()函数中指定的SQL语 句进行操作: 

CString CTestRecordSet::GetDefaultSQL()

{return _T("[BasicData],[MainSize]");}

  对于GetDefaultSQL()函数返回的表名, 对应的缺省操作是SELECT语句,即:

SELECT * FROM BasicData,MainSize 

  查询过程中也可以利用CRecordSet的 成员变量m_strFilter和m_strSort来执行条件查询和结果排序。m_strFilter 为过滤字符串,存放着SQL语句中WHERE后的条件串;m_strSort 为排序字符串,存放着SQL语句中ORDERBY后的字符串。 如:

m_Set.m_strFilter="TYPE='电动机'";
m_Set.m_strSort="VOLTAGE";
m_Set.Requery();

  对应的SQL语句为:

SELECT * FROM BasicData,MainSize
WHERE TYPE='电动机'
ORDER BY VOLTAGE

  除了直接赋值给m_strFilter以外,还 可以使用参数化。利用参数化可以更直观,更方便地 完成条件查询任务。使用参数化的步骤如下: 

  (1).声明参变量: 

Cstring p1;

Float p2;

  (2).在构造函数中初始化参变量

p1=_T("");
p2=0.0f;
m_nParams=2;

  (3).将参变量与对应列绑定

pFX->SetFieldType(CFieldExchange::param)
RFX_Text(pFX,_T("P1"),p1);
RFX_Single(pFX,_T("P2"),p2);

  完成以上步骤之后就可以利用参变量进行条件查询了:

m_pSet->m_strFilter="TYPE= ANDVOLTAGE= ";
m_pSet->p1="电动机";
m_pSet->p2=60.0;
m_pSet->Requery();

  参变量的值按绑定的顺序替换 查询字串中的“ ”适配符。

  如果查询的结果是多条记录的 话,可以用CRecordSet类的函数Move(),MoveNext(),MovePrev(),MoveFirst() 和MoveLast()来移动光标。

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇利用CAsyncSocket类实现Socket编程 下一篇用VC++开发数据库应用程序(三)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: