在 ODBC 中应用DDX 和 RFX

 
在 ODBC 中应用DDX 和 RFX
MFC 中ODBC 类库简介
----MFC 中针对ODBC数据库编程提供了五种基类。这些类封装了有关ODBC的API调用,使
用 户能够利用ODBC完成不同类型的数据库编程工作,如访 问Foxpro、dBASE 或Sybase
等不同类型数据库文件,从而避开各种类型数据库文件的复杂的内部结构。这五种基类
是:
CDatabase 类对象表示与数据源的连接。用户正是基于此连接实现对数据源的操作。
CRecordset 类对象表示了从数据源中选出的一组记录。该对象使用户能完成在记录间的
滚动、更新记录、对记录进行过滤排序等操作。
CRecordView 类对象直接与一CRecordset(记录集)类对象连接,为该记录集提供显示的
视图。它是数据库操作的界面。
CFieldExchange 类支持数据库的字段交换过程,即RFX机制。
CDBException 类完成数据库类操作的异常处理。用户可根据其中公用成员 变量的取值
来分析出现错误的原因或显示出相应的文本信息。
以下我们利用VC中的AppWizard生成一个简单的示例程序以供使用:
---- 1.选择[File]中的[New],在弹出的对话框中选择文件类型为 [MFC AppWizard(EX
E)]。在[Project name]中键入文件名,如: testodbc,点按[OK]按钮。
---- 2.在程序类型中选择[Single document], 点按[Next]按钮。
---- 3.在数据库支持中选择[Database view with file support],点按 [Data source
]按钮进入数据库选择对话框。
---- 4.在[Datasource]中选择[ODBC],然后在下拉列表中选择 [Visual Foxpro Table
s]。[Recordset type]设定为[Snapshot]。 点按[OK]按钮选择数据库源文件:test.db
f。
---- 5.选择了数据库源文件后,接连点按[Next],生成程序所需的源文件。
---- 此时生成以下各类及其对象:
CAboutDlg
CMainFrame
CTestodbcApp
CTestodbcDoc
CTestodbcSet
CTestodbcView
RFX 简介
----RFX 是Record Field Exchange 的缩写,意即记录字段数据交换。它在用户选择的
记录集(Data set) 和隐藏于后台的数据源(Data source)之间建立对应关系,使用户能
通过操作此记录集来实现对数据源的操作。MFC中提供了一系列RFX 调用函数,通过这些
函数,可以随时在记录集和数据源之间进行数据交换,这种交换是双向的。这些函数有

函数                     数据类型
RFX_Bool                   BOOL
RFX_Byte                   BYTE
RFX_Binary               CByteArray
RFX_Double               double
RFX_Single               float
RFX_Int                     int
RFX_Long                   lonig
RFX_LongBinary       CLongBinary
RFX_Text                   CString
RFX_Date                   Ctime
----它们大多有三个参数(个别会有四或五个):
一个指向CFieldExchange 类对象的指针
数据源中的一个字段名
与该字段对应的变量名
---- 当用AppWizard生成代码时,程序会自动选择适当的函数与数据类型相匹配。
---- 记录字段数据交换的核心是CRecordset类中的虚函数DoFieldExchange,RFX函数都
在DoFieldExchange中调用,它为RFX函数提供了一个指向CFieldExchange类对象的指针
,其原 型为:
---- virtual void DoFieldExchange(CFieldExchang pFX);
----上文示例中生成的CTestodbcSet类是从CRecordset派生而来的,为了利用RFX机制,
它声明了两个成员变量:CString m_name 和 CString m_age,分别对应数据库表文件中
的[name] 和[age] 字段。在CTestodbcSet 类重载的方法DoFieldExchange(CFieldExch
ange * pFX)中,可以看到调用了两个RFX函数:
----RFX_Text(pFX, _T("[name]"), m_name);
----RFX_Text(pFX, _T("[age]"),m_age);
pFX 参数即为DoFieldExchange传递来的CFieldExchange类对象指针。
DDX 简介
----DDX 是Dialog Data Exchange的缩写,意即对话框数据交换。它在对话框 的可视控
件(Controls)和成员变量(Member variables)之间建立双向的对应关系, 使 用 户 能
通过对话框上的控件浏览和修改变量的取值。
----类似记录字段数据交换,对话框数据交换的核心是CRecordView类中的虚函数 DoDa
taExchange,DDX函数都在DoDataExchange中调用,它为DDX函数提供了一个指 向CData
Exchange 类对象的指针,其原型为:
----virtual void DoDataExchange(CDataExchan pDX);
----进入函数Ctestodbc::DoDataExchange,此时函数体中没有什么代码,因为我 们并
没有在对话框中创建控件,也没有建立DDX机制。
----打开示例程序的对话框资源,编辑自动生成的对话框IDD_TESTODBC_FORM,此 时,
该对话框中仅有一个静态文本对象
“TODO: Place form controls on this dialog.”。
它是自动生成的提示性文本,表示可在此对话框上添加控件。删掉此文本,添加两 个编
辑框对象(Edit box)IDC_EDIT1 和IDC_EDIT2,在IDC_EDIT1上按鼠标右键,选 择弹出菜
单中的[ClasWizard]进入类属性编辑对话框。选择[Member Variables]属 性,在[Cont
rol IDs]中选择IDC_EDIT1,然后按[Add Variable]按钮以选择与它对 应的变量,在下
拉列表框[Member Variable name]中选择m_pSet ->m_name, 按[OK]返回。用同样方法
为IDC_EDIT2 选择m_pSet ->m_age。
----退出对话框编辑,再进入类CTestodbcView源文件中,发现函数DoDataExchange 中
增加了两个DDX调用函数:
----DDX_FieldText(pDX, IDC_EDIT1, m_pSet ->m_name,m_pSet);
----DDX_FieldText(pDX, IDC_EDIT2, m_pSet ->m_age,m_pSet);
----DDX_FieldText函数在对话框的编辑控件和记录的字段之间建立联系。它可以 自动
管理以下类型的数据:
int、short、long、DWORD、Cstring、float、double、BOOL 和BYTE。
它的四个参数分别为:
一个指向CDataExchange类对象的指针
与数据交换相关的对话框控件的ID号
记录中的一个字段
与数据交换相关的记录集对象指针
----在DDX双向数据交换中,用户不直接调用DoFieldExchange函数,而是调用函 数Upd
ateData(BOOL direct),此函数的direct参数决定了数据交换的方向:
----direct=FALSE用记录的字段值更新控件值
----direct=TRUE用控件值更新记录的字段值
----例如我们在对话框中添加一个[Save]按钮,在它的事件处理过程中将控件的值 保存

void CTestodbcView::OnButtonSave()
{
     ...
     UpdateData(TRUE);
     ...
}
DDX 和 RFX 的关系及比较
----从上面可以看出,RFX是数据库编程中数据交换的内部基础,它更紧密地与记 录集
对象(CRecordset)相联系,是隐于后台的;DDX是数据库编程中数据交换在对 话框界面
上实现的基础,它更紧密地与视图对象(CRecordView)相联系,是显现于前台的。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值