259上位机VC MFC使用ODBC的CRecordSet类建立对话框数据库程序
259上位机VC MFC使用ODBC的CRecordSet类建立对话框数据库程序
功能展示
MFC使用ODBC建立的都是基于单文件档的应用程序,且CRecordSet类与CRecordView类是联合使用,但总有些不够灵活,我们当前例程单独使用CRecordSet类建立基于对话框的数据库应用程序,效果如图,程序运行就初始化调用按钮<连接—数据源>建立与数据库的连接,点击基于按钮可以定位数据库位置;
要点提示
1.连接数据源要先定义类CRecordBase 的对象,随后 调用基成员函数OpenEx(),如我们当前例程就定义了一此类的实例 CDatabase m_DB;然后现连接数据源m_DB.OpenEx(_T("DSN=student"),0) 2.在一个数据源中有多个表,连接了数据源后,怎样选择我们想要的表呢?可以使用类CRecordSet的open()函数;如我们当前的例程m_Set->Open(CRecordset::dynaset,_T(“Select* from 表1”)),”表1”就是我们要打开的表的名称; 3.对表中字段的操作可以用CRecordSet的成员函数GetFieldValue(),函数有多个原型,具体可以翻阅MSDN手册,我们例程是通过这种形式m_Set->GetFieldValue((short)0,m_ID);获得字段的数据 实现功能 1.新建基于对话框的应用程序; 2.按照例程界面给主对话框添加三个编辑框ID分别 为IDC_STUID,IDC_STUNAME,IDC_STUGRADYEAR分别关联变量CString m_ID;CString m_Name; CString m_Year; 3.再给主对话框添加两变量private:CDatabase m_DB; CRecordset* m_Set; 及一头文件#include "Afxdb.h"//数据库支持 4.分别添加按钮控件<连接--数据源><第一条记录><下一条记录><上一条记录><最后一条记录>分别关联函数 - void CGkbc8Dlg::OnConnect()
- {
- m_Set=new CRecordset(&m_DB);
- if(!m_DB.OpenEx(_T("DSN=student"),0))//连接数据源
- {
- AfxMessageBox("打开数据源失败!!");//报告错误
- return;
- }
- if(!m_Set->IsOpen())
- {
- m_Set->Open(CRecordset::dynaset,_T("Select * from 表1"));//选择数据表并打开
- }
- if(m_Set->IsEOF())//记录集是否为空
- {
- AfxMessageBox("记录集没有记录");
- return;
- }
复制代码- m_Set->MoveFirst();//第一个记录
- m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
- m_Set->GetFieldValue((short)1,m_Name);//把第1 列赋给此控件
- m_Set->GetFieldValue((short)2,m_Year);//把第2 列赋给此控件
- UpdateData(FALSE);//更新对话框
- }
- void CGkbc8Dlg::OnSelect()
- {
- m_Set->MoveFirst();//第一个记录
- m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
- m_Set->GetFieldValue((short)1,m_Name);//把第1 列赋给此控件
- m_Set->GetFieldValue((short)2,m_Year);//把第2 列赋给此控件
- UpdateData(FALSE);//更新对话框
- }
- void CGkbc8Dlg::OnRecordNext()
- {
- m_Set->MoveNext();//下一个记录开始
- m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
- m_Set->GetFieldValue((short)1,m_Name);//把第0 列赋给此控件
- m_Set->GetFieldValue((short)2,m_Year);//把第0 列赋给此控件
- UpdateData(FALSE);//更新对话框
- }
- void CGkbc8Dlg::OnRecordPrev()
- {
- m_Set->MovePrev();//上一个记录开始
- m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
- m_Set->GetFieldValue((short)1,m_Name);//把第0 列赋给此控件
- m_Set->GetFieldValue((short)2,m_Year);//把第0 列赋给此控件
- UpdateData(FALSE);//更新对话框
- }
- void CGkbc8Dlg::OnRecordLast()
- {
- m_Set->MoveLast();//最后一个记录开始
- m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
- m_Set->GetFieldValue((short)1,m_Name);//把第0 列赋给此控件
- m_Set->GetFieldValue((short)2,m_Year);//把第0 列赋给此控件
- UpdateData(FALSE);//更新对话框
- }
复制代码OnConnect()函数可以选择性在程序初始化是调用一次 我们来演示下功能实现的整个过程
|