QQ登录

只需一步,快速开始

261上位机VC MFC使用ODBC动态获得记录集字段信息

[ 复制链接 ]

261上位机VC MFC使用ODBC动态获得记录集字段信息

261上位机VC MFC使用ODBC动态获得记录集字段信息

261上位机VC MFC使用ODBC动态获得记录集字段信息
功能展示
ODBC程序的实际编写中记录集的字段信息是未知的,这样我们就得在程序中利用代码动态的获取这些字段的信息,当前例程实现不同数据表的字段信息的获取功能,程序初始化时连接表1,自动获得表的字段信息,点击切换数据表,也可自动获取切换后表的字段信息,效果如图
要点提示
1.字段信息存储在CODBCFieldInfo结构体中,结构体字义如下
struct CODBCFieldInfo {  
CStringm_strName;  //字段名称
SWORD m_nSQLType;  //记录集的SQL数据类型
UDWORD m_nPrecision;  //数据的位数精度
SWORD m_nScale; //小数点的位数
SWORDm_nNullability; }; //字段是否可以为NULL
2.结构体信息的获取可以用CRecordSet类的成员 函数GetODBCFieldInfo()
void GetODBCFieldInfo( LPCTSTR lpszName, CODBCFieldInfo& fieldinfo );
void GetODBCFieldInfo( short nIndex, CODBCFieldInfo& fieldinfo );
lpszName :字段名称;
Fieldinfo: CODBCFieldInfo结构体指针;
nIndex:字段序号
实现功能
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.分别添加按钮控件<连接--数据源><第一条记录><下一条记录><上一条记录><最后一条记录>分别关联函数
  1. void CGkbc8Dlg::OnConnect()
  2. {
  3.         if(m_DB.IsOpen())
  4.                 return;
  5.         if(!m_DB.OpenEx(_T("DSN=student"),0))//连接数据源
  6.         {
  7.                 AfxMessageBox("打开数据源失败!!");//报告错误
  8.                 return;
  9.         }
  10.         if(m_Set==NULL)
  11.                 m_Set=new CRecordset(&m_DB);
  12.         if(!m_Set->IsOpen())
  13.                 m_Set->Open(CRecordset::dynaset,_T("Select * from 表1"));//选择数据表并打开

  14.         
  15.         short nFields;//存储字段数目
  16.         nFields=m_Set->GetODBCFieldCount();//获得字段数目
复制代码
  1. CODBCFieldInfo FieldInfo;//存储字段信息的结构体
  2.         m_Set->GetODBCFieldInfo(short(0),FieldInfo);//获得字段信息
  3.         m_sID=FieldInfo.m_strName;
  4.         m_Set->GetODBCFieldInfo(short(1),FieldInfo);
  5.         m_sName=FieldInfo.m_strName;
  6.         m_Set->GetODBCFieldInfo(short(2),FieldInfo);
  7.         m_sYear=FieldInfo.m_strName;
  8.     if(m_Set->IsEOF())//记录集是否为空
  9.         {
  10.                 AfxMessageBox("记录集没有记录");
  11.                 return;
  12.         }
  13.         m_Set->MoveFirst();//第一个记录
  14.         m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
  15.     m_Set->GetFieldValue((short)1,m_Name);//把第1 列赋给此控件
  16.     m_Set->GetFieldValue((short)2,m_Year);//把第2 列赋给此控件
  17.     UpdateData(FALSE);//更新对话框
  18. }
  19. void CGkbc8Dlg::OnSelect()
  20. {
  21.         m_Set->MoveFirst();//第一个记录
  22.         m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
  23.     m_Set->GetFieldValue((short)1,m_Name);//把第1 列赋给此控件
  24.     m_Set->GetFieldValue((short)2,m_Year);//把第2 列赋给此控件
  25.     UpdateData(FALSE);//更新对话框        
  26. }
  27. void CGkbc8Dlg::OnRecordNext()
  28. {
  29.         m_Set->MoveNext();//下一个记录开始
  30.         m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
  31.     m_Set->GetFieldValue((short)1,m_Name);//把第0 列赋给此控件
  32.     m_Set->GetFieldValue((short)2,m_Year);//把第0 列赋给此控件
  33.     UpdateData(FALSE);//更新对话框        
  34. }
  35. void CGkbc8Dlg::OnRecordPrev()
  36. {
  37.         m_Set->MovePrev();//上一个记录开始
  38.         m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
  39.     m_Set->GetFieldValue((short)1,m_Name);//把第0 列赋给此控件
  40.     m_Set->GetFieldValue((short)2,m_Year);//把第0 列赋给此控件
  41.     UpdateData(FALSE);//更新对话框        
  42. }
复制代码
  1. void CGkbc8Dlg::OnRecordLast()
  2. {
  3.         m_Set->MoveLast();//最后一个记录开始
  4.         m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
  5.     m_Set->GetFieldValue((short)1,m_Name);//把第0 列赋给此控件
  6.     m_Set->GetFieldValue((short)2,m_Year);//把第0 列赋给此控件
  7.     UpdateData(FALSE);//更新对话框        
  8. }
复制代码
OnConnect()函数可以选择性在程序初始化是调用一次
5.再给主对话框添加一变量m_bSwitch初始化为m_bSwitch = FALSE; m_Set     = NULL;对话框资源中添加三个静态文本控件 分别为IDC_ID ,IDC_NAME, IDC_GRADYEAR, 分别关联变量Cstringm_sID, Cstring m_sName, Cstring m_sYear。添加一按钮<切换 数据表>关联函数,实现不同表间的切换功能
  1. void CGkbc8Dlg::OnSwitch()
  2. {
  3.         CODBCFieldInfo FieldInfo;
  4.         short nFields;
  5.         if(m_Set->IsOpen())
  6.         m_Set->Close();
  7.         if(m_bSwitch)
  8.         {
  9.                 //选择数据表并打开
  10.                 m_Set->Open(CRecordset::dynaset,_T("Select * from 表1"));
  11.                 nFields=m_Set->GetODBCFieldCount();
  12.                 m_Set->GetODBCFieldInfo(short(0),FieldInfo);
  13.                 m_sID=FieldInfo.m_strName;
  14.                 m_Set->GetODBCFieldInfo(short(1),FieldInfo);
  15.                 m_sName=FieldInfo.m_strName;
  16.                 m_Set->GetODBCFieldInfo(short(2),FieldInfo);
  17.                 m_sYear=FieldInfo.m_strName;
  18.                 m_Set->MoveFirst();//第一个记录
  19.                 m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
  20.                 m_Set->GetFieldValue((short)1,m_Name);//把第1 列赋给此控件
  21.                 m_Set->GetFieldValue((short)2,m_Year);//把第2 列赋给此控件
  22.                 UpdateData(FALSE);//更新对话框
  23.                 m_bSwitch=FALSE;
  24.         }
  25.         else
  26.         {
  27.                 m_Set->Open(CRecordset::dynaset,_T(“Select * from Basic”)); //选择数据表并打开
复制代码
  1. nFields=m_Set->GetODBCFieldCount();
  2.                 m_Set->GetODBCFieldInfo(short(0),FieldInfo);
  3.                 m_sID=FieldInfo.m_strName;
  4.                 m_Set->GetODBCFieldInfo(short(1),FieldInfo);
  5.                 m_sName=FieldInfo.m_strName;
  6.                 m_Set->GetODBCFieldInfo(short(2),FieldInfo);
  7.                 m_sYear=FieldInfo.m_strName;
  8.                
  9.                 m_Set->MoveFirst();//第一个记录
  10.                 m_Set->GetFieldValue((short)0,m_ID);//把第0 列赋给此控件
  11.                 m_Set->GetFieldValue((short)1,m_Name);//把第1 列赋给此控件
  12.                 m_Set->GetFieldValue((short)2,m_Year);//把第2 列赋给此控件
  13.                 UpdateData(FALSE);//更新对话框
  14.                 m_bSwitch=TRUE;
  15.         }
  16. }
复制代码
我们来演示整个功能实现 过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:261.上位机VC MFC使用ODBC动态获得记录集字段信息.zip 
文件大小:21.05 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索