Visual C++ ODBC 参数化记录集查询设计

简介:

ODBC通过RFX自动完成数据源和记录集对象之间的数据传输交换,而通过DDX对话框数据交换实现记录集数据和窗体控件的绑定。本文给出了一个通过GetDefaultSQL的方法设计了一个简单的查询,不过这儿的查询语句是设定好的,灵活性不高,各个条件之间是OR的关系,没法实现复杂的查询。

在使用参数化记录集之前,需要先确定所需的参数。学习所用的数据表如下:

image

这儿将所有的字段都设置为参数,在记录集类定义参数,并初始化:

// 参数定义
long	m_stunum2;
CStringW	m_name2;
CStringW	m_gender2;
long	m_age2;
long	m_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 type
	RFX_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);
}

最后的结果如下:

image


本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2009/12/20/1628122.html,如需转载请自行联系原作者


相关文章
|
1月前
|
Windows
Microsoft Visual C++2015-2019 安装失败 0x80240017
Microsoft Visual C++2015-2019 安装失败 0x80240017
41 0
|
1月前
|
JSON C++ 数据格式
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
|
1月前
|
关系型数据库 数据库 C++
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
|
1月前
|
存储 C++
【C++】Visual Studio C++ 配置并使用gtest(不好用你捶我)
【C++】Visual Studio C++ 配置并使用gtest(不好用你捶我)
|
2月前
|
算法 IDE Java
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
44 0
|
2月前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
32 0
|
2月前
|
Java 数据处理 数据库
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(二)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
37 0
|
5天前
|
设计模式 安全 算法
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
16 0
|
6天前
|
C语言 C++
【C++】string类(常用接口)
【C++】string类(常用接口)
18 1