Visual C++ ODBC 参数化记录集查询设计
来源:互联网 发布:美工钢笔字帖 编辑:程序博客网 时间:2024/05/22 17:11
ODBC通过RFX自动完成数据源和记录集对象之间的数据传输交换,而通过DDX对话框数据交换实现记录集数据和窗体控件的绑定。本文给出了一个通过GetDefaultSQL的方法设计了一个简单的查询,不过这儿的查询语句是设定好的,灵活性不高,各个条件之间是OR的关系,没法实现复杂的查询。
在使用参数化记录集之前,需要先确定所需的参数。学习所用的数据表如下:
这儿将所有的字段都设置为参数,在记录集类定义参数,并初始化:
// 参数定义longm_stunum2;CStringWm_name2;CStringWm_gender2;longm_age2;longm_classnum2;
// 构造函数中初始化
m_stunum2 = 0;m_name2 = L"*";m_gender2 = L"*";m_age2 = 10;m_classnum2 =1;m_nParams=5;
在DoFieldExchange中添加参数数据交换函数:
void CdatatestSet::DoFieldExchange(CFieldExchange* pFX){pFX->SetFieldType(CFieldExchange::outputColumn);// Macros such as RFX_Text() and RFX_Int() are dependent on the// type of the member variable, not the type of the field in the database.// ODBC will try to automatically convert the column value to the requested typeRFX_Long(pFX, _T("[学号]"), m_stunum);RFX_Text(pFX, _T("[姓名]"), m_name );RFX_Text(pFX, _T("[性别]"), m_gender);RFX_Long(pFX, _T("[年龄]"), m_age);RFX_Long(pFX, _T("[班级编号]"), m_classnum);pFX->SetFieldType(CFieldExchange::inputParam);RFX_Long(pFX, _T("1”), m_stunum2);RFX_Text(pFX, _T("2"), m_name2 );RFX_Text(pFX, _T("3"), m_gender2);RFX_Long(pFX, _T("4"), m_age2);RFX_Long(pFX, _T("5"), m_classnum2);}
设置查询条件的过滤字符串,串中的参数占位符(?)与上面绑定的顺序一致:
CString CdatatestSet::GetDefaultSQL(){m_strFilter=L"学号=? OR 姓名=? OR 性别=? OR 年龄=? OR 班级编号=?";return _T("[学生信息表]");}
最后在View类中设置数据交换,并编写相应的查询函数:
void CdatatestView::DoDataExchange(CDataExchange* pDX){CRecordView::DoDataExchange(pDX);// 可以在此处插入DDX_Field* 函数以将控件“连接”到数据库字段,例如// DDX_FieldText(pDX, IDC_MYEDITBOX, m_pSet->m_szColumn1, m_pSet);// DDX_FieldCheck(pDX, IDC_MYCHECKBOX, m_pSet->m_bColumn2, m_pSet);// 有关更多信息,请参阅MSDN 和ODBC 示例DDX_FieldText(pDX,IDC_EDIT1,m_pSet->m_stunum,m_pSet);DDX_FieldText(pDX,IDC_EDIT2,m_pSet->m_name,m_pSet);DDX_FieldText(pDX,IDC_EDIT3,m_pSet->m_gender,m_pSet);DDX_FieldText(pDX,IDC_EDIT4,m_pSet->m_age,m_pSet);DDX_FieldText(pDX,IDC_EDIT5,m_pSet->m_classnum,m_pSet);//对话框数据交换DDX_Text(pDX,IDC_EDIT6,m_stunum);DDX_Text(pDX,IDC_EDIT7,m_name);DDX_Text(pDX,IDC_EDIT8,m_sex);DDX_Text(pDX,IDC_EDIT9,m_age);DDX_Text(pDX,IDC_EDIT10,m_classnum);}void CdatatestView::OnMyQuery(){UpdateData(TRUE);m_pSet->m_classnum2=m_classnum;m_pSet->m_name2=m_name;m_pSet->m_gender2=m_sex;m_pSet->m_stunum2=m_stunum;m_pSet->m_age2=m_age;m_pSet->Requery();UpdateData(FALSE);}
最后的结果如下:
- Visual C++ ODBC 参数化记录集查询设计
- 8.2.2查询记录【ODBC】
- Visual+C+++中的+ODBC+编程
- Visual C++中的ODBC编程
- SqlDataSource参数化查询所有记录
- [C#] 数据库 参数化 查询
- 带参数查询网页(JDBC-ODBC桥数据访问)
- ODBC 数据源,数据记录集是只读
- MFC/ODBC 记录集只读的问题
- VIsual C++ ODBC初探
- 用Visual C#设计屏幕保护程序
- visual c++ 2008进行MySQL编程(ODBC) --三 查询数据库
- visual c++ 2008进行MySQL编程(ODBC) --三 查询数据库
- mysql 记录查询日志的参数配置
- C#---xml带参数查询
- 【Visual C++】IDirect3DDevice::SetRenderState() 参数详解
- ODBC获取记录记录数
- C语言ODBC处理数据库结果集
- Kalman Filters in the MRPT and using tips
- Paticle Filter in MRPT and using tips
- MRPT data formats and serialization
- c语言计算程序运行时间的方法
- VIsual C++ ODBC初探
- Visual C++ ODBC 参数化记录集查询设计
- Android初接触
- Ubuntu 安装配置apache web服务
- 转载:使用Windows Live Writer发布日志
- 开始学习Android
- OPhone SDK
- Android基础知识
- Android进程与线程
- Android生命周期