vc操作数据库简介内容摘要:
大容量交换的方式( Bulk RFX)时,RFX机制将在数据交换中起作用。 如果在 CRecordset派生类中实现了 Bulk RFX 交换方式,那么在数据交换的时候,将使用 Bulk RFX 机制交换数据。 RFX 和对话框的数据交换 (DDX)类似。 在视图和数据源之间自动交换数据,可能还要多次调用 DoFieldExchange 函数,因为一次交换的数据可能不止一个,同时它也是应用程序框架和 ODBC 交流的媒介。 RFX 机制能够安全的通过调用 (例如 ODBC 函数 SQLBindCol)来保存用户的工作。 RFX机制对于用户来说大部分是透明的。 如果使用 AppWizared或是 ClassWizard来生成一个记录集, RFX 机制就自动加入应用程序框架中去了。 用户的记录集类必须是从CRecordset类派生出来的。 用 ClassWizard派生一个记录集类的对象,还可以加入其它父类。 同时还可以用 ClassWizard 来 将视图中的控件的中的变量和数据库中的数据表的行联系起来。 有些时候用户需要自己加入一些 RFX代码,如: 使用带参数的查询。 完成数据库中表与表的连接 动态绑定数据列 下面就是上面我们所作的 DBView工程中 AppWizard说加入的 RFX代码: void CDBViewSet::DoFieldExchange(CFieldExchange* pFX) { //{{AFX_FIELD_MAP(CDBViewSet) pFXSetFieldType(CFieldExchange::outputColumn)。 RFX_Text(pFX, _T([au_id]), m_au_id)。 RFX_Text(pFX, _T([au_lname]), m_au_lname)。 RFX_Text(pFX, _T([au_fname]), m_au_fname)。 RFX_Text(pFX, _T([phone]), m_phone)。 RFX_Text(pFX, _T([address]), m_address)。 RFX_Text(pFX, _T([city]), m_city)。 RFX_Text(pFX, _T([state]), m_state)。 RFX_Text(pFX, _T([zip]), m_zip)。 RFX_Bool(pFX, _T([contract]), m_contract)。 //}}AFX_FIELD_MAP } 函数 DoFieldExchange 是 RFX 机制的中枢,任何时候应用框架需要从数据源到记录集或是从记录集到数据源,都要调用 DoFieldExchange 函数。 RFX 机制将程序员从繁琐的下层编程中解脱出来,自动完成大部分的数据交换工作。 下面是 CRecordset派生类的头文件,其中关于 RFX机制的部分已经用粗体显示: class CDBViewSet : public CRecordset { public: CDBViewSet(CDatabase* pDatabase = NULL)。 DECLARE_DYNAMIC(CDBViewSet) // Field/Param Data //{{AFX_FIELD(CDBViewSet, CRecordset) CString m_au_id。 CString m_au_lname。 CString m_au_fname。 CString m_phone。 CString m_address。 CString m_city。 CString m_state。 CString m_zip。 BOOL m_contract。 //}}AFX_FIELD // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CDBViewSet) public: virtual CString GetDefaultConnect()。 // Default connection string virtual CString GetDefaultSQL()。 // default SQL for Recordset virtual void DoFieldExchange(CFieldExchange* pFX)。 // RFX support //}}AFX_VIRTUAL // Implementation ifdef _DEBUG virtual void AssertValid() const。 virtual void Dump(CDumpContextamp。 dc) const。 endif }。 这个头文件主要是定义了记录集中的数据成员变量。 读者可以在 //{AFX_FIELD 之间看见。 CDatabase类 这个类的头文件是。 CDatabase 对象是用来连接一个数据源的。 通过这个类的对象你可以操纵数据源。 一个数据源是一个 DBMS 中的活动对象。 例如: Microsoft SQL Server, Microsoft Access, Borland174。 dBASE174。 , and xBASE。 你在你的应用程序中可以有一个或是多个 CDatabase对象。 为了可以使用 CDatabase 对象,需要调用构造函数,并调用 OpenEx或是 Open 函数 ,这将会打开一个连接。 当构造一个 CDatabase类完成后 ,可以向你的 CRecordset类的对象传递这个 CDatabase类的指针。 连接数据源结束时,必须用 Close函数关闭这个对象。 下面将介绍 CDatabase类的成员函数以及成员变量: 1. CDatabase::m_hdbc 这个成员变量保留一个指向一个 ODBC的数据源连接的句柄。 通常不需用户要直接操作这个变量。 相反的,应用程序框架会在用户调用 Open 函数或是 OpenEx函数的时候,自动填写这个变量。 2. CDatabase::CDatabase CDatabase( )。 这是 CDatabase 类的构造函 数,在构造完后,用户可以调用 Open 函数或是 OpenEx函数,这个函数最好是在文档类中调用,这样会很方便。 3. CDatabase::Open virtual BOOL Open( LPCTSTR lpszDSN, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = “ODBC。 ”, BOOL bUseCursorLib = TRUE )。 throw( CDBException, CMemoryException )。 调用函数 Open 的时候一般是和 throw 关键词一起使用的。 调用成功的话,会返回非零值,否则返回零值,并且会弹出一个出错信息对话框,按下 Cancel 键来取消连接。 也可以用 OK键来再次连接。 它的参数说明如下: lpszDSN:用来设定一个数据源的名字,这个名字必须是在 ODBC的控制台中登记的,如果在参数 lpszConnect 已经有了一个 DSN值的话,这个参数可以设为 NULL。 bExclusive:必须是 FALSE值,因为现在数据源的打开方式是共享的,所以必须是FALSE。 bReadOnly:为真时, 数据源将以只读的方式读出,否则就是可以修改数据源的。 pszConnect:用来描述一个连接的字符串,可能包括一个数据源的名字,或是用户的 ID,或是管理员的 ID和密码。 bUseCursorLib:为真时,加载 ODBC的 Cursor Library DLL文件。 否则,不加载。 调用这个函数就是为了初始化一个 CDatabase 对象。 但是推荐使用 OpenEx函数来打开一个数据源,因为 OpenEx函数会更加有效。 4. CDatabase::OpenEx virtual BOOL OpenEx( LPCTSTR lpszConnectString, DWORD dwOptions = 0 ); throw( CDBException, CMemoryException ); 如果一个连接成功的话,就会返回一个非零值。 如果在用户选择 Cancel按钮来取消连接的时候,会返回一个零值。 这个函数的参数说明如下: lpszConnectString:用来描述一个 ODBC连接,是一个字符串。 是包含一个 ODBC数据源名字,或者还有一个用户 ID,或者还有密码的字符串。 例如:DSN=SQLServer_Source。 UID=SA。 PWD=abc123。 dwOptions:用来描叙数据源打开方式。 它可以是下面几种方式的组合: DwOptions 说明 CDatabase::openExclusive 现在的 VC版本不支持 CDatabase::openReadOnly 以只读的方式读出 CDatabase::useCursorLib 加载 ODBC Cursor Library DLL CDatabase::noOdbcDialog 不出现 ODBC 连接对话框 CDatabase::forceOdbcDialog 总要出现 ODBC 连接对话框 如果参数 lpszConnectString的信息不够完全,系统会从 ODBC对话框来得到相应的信息。 所以最好将 CDatabase::forceOdbcDialog 选中。 推荐使用 OpenEx 函数来打开一个数据源。 5. CDatabase::Close virtual void Close( )。 关闭一个 CDatabase关联的数据源时,要调用函数 Close。 不过在调用 Close函数之前,要保证已经关闭了对应的 Crecoredset对象。 6. CDatabase::ExecuteSQL void ExecuteSQL( LPCSTR lpszSQL )。 throw( CDBException )。 参数 lpszSQL 是一个指向一句合法的 SQL 语句的字符指针。 你可以用这个函数直接执行语句 SQL语句。 7. CDatabase::CanTransact BOOL CanTransact( ) const。 用来判断数据源是否支持事务处理。 要是支持,返回值为非零值,否则为零值。 8. CDatabase::SetLoginTimeout void SetLoginTimeout( DWORD dwSeconds )。 用来设置连接时间,参数 dwSeconds是连接时间,单位为秒,要是超时,就算失败。 9. CDatabase::GetConnect const CStringamp。 GetConnect( ) const。 用来得到当前的对象所连接的数据源的 ODBC连接名字,返回值就是一个指向 ODBC连接名字的字符串指针。 10. CDatabase::Rollback BOOL Rollback( )。 如果事务执行被成功的翻转回原来状态,那么返回值非零值,否则返回零值。 所谓事务 就是数据库中一个数据处理过程。 因为数据库往往是多个人使用的,并且每一次处理过程,并不是一步完成的。 可能在完成某个处理动作的时候,突然出现中断,如断电,那么数据是否算修改了呢。 所以数据库中定义了一种事件,称为事务,就是一个处理动作。 只有在一个事务完成并提交给数据库后,修改才能生效。 要是没有生效,可以翻转回原来的状态重新执行,或是翻回去后执行其它的事务。 11. CDatabase::GetDatabaseName CString GetDatabaseName( ) const。 将返回当前所连接的数据源的名字 ,这个名字并不一定是在 ODBC 控制台登记的名字,这取决于不同的 ODBC驱动。 12. CDatabase::IsOpen BOOL IsOpen( ) const。 用来判断当前的对象是否连接着数据源,要是的话,返回值为非零值,没有连接的时候,返回值为零值。 13. CDatabase::CanUpdate BOOL CanUpdate( ) const。 用来判断数据源是否可以修改,要是可以修改,就返回非零值,要是数据源是只读的,返回零值。 14. CDatabase::BeginTrans BOOL BeginTrans( )。 开始一个事务的操作,要是成功启动了一个对于当前连接的数据源的事务,函数将返回非零值,否则返回零值。 15. CDatabase::CommitTrans BOOL CommitTrans( )。 提交一个数据库事务,要是这个事务被数据库确认后,函数将返回非零值,要是数据库没有确认这个事务,将返回零值。 由于篇幅的原因,不能也没有必要将所有成员函数列出。 要是读者用到的话,请翻阅MSDN 或是相应的技术文档。 也请读者最好自己自学一下那些没有列出的成员函数,以便提高自己的数据库编程水平。 CRecordset类 这个类的头文件为。 CRecordset 类用来表示从数据源读取出来的。vc操作数据库简介
相关推荐
加和删除图像 ,替代、合并和拖动图像。 CImageList 类提供了 Windows 图像列表通用控件功能。 下面对本文用到的函数简要说明如下 : BOOL Create( int cx, int cy, UINT nFlags, int nInitial, intnGrow )。 该函数用于创建一个图像列表。 cx,cy 是每个图像的宽度和高度。 nFlags 是图像列表的类型
,应列入设计系统中。 31. 基本设计要素、系统的提案 1) 以设计基本形态为中心来开发基本设计要素,说明设计系统的提案。 2) 以基本设计要素的组合为中心,经由讲座而决定设计上的规则。 32. 基本设计手册 1) 编辑基本设计手册。 2) 印制基本设计手册。 3) 制作完成复制用的清样。 33. 对外发表计划 1) 计划设计开发后的对外发表。 2) 做好方针、时机、方法、费用等问题的发表计划。
()。 (七) . 在多文档 /视图中: 1.)子窗口的最大化: void CChildFrame::ActivateFrame(int nCmdShow) { nCmdShow=SW_MAXIMIZE。 CMDIChildWnd::ActivateFrame(nCmdShow)。 } 2.)屏蔽子对话框:在 APP 类里把这两句话屏蔽掉 if (
***************************** ( 2)在窗体上建立一个名称为 Text1的文本框,再建立一个名称为 Cmd1,标题为 计算 的命令按钮(如图所示)。 要求程序运行后,单击命令按钮, 将 计算 100200之间所有素数之和,在文本框中显示结果,同时把结果存入文 件。 (在考生文件夹中有标准模块 ,其中的 putdata过程 可以把结果存入文件,而