302上位机VC MFC使用ADO多字符串匹配检索数据
ADO多字符串匹配检索数据
功能展示
ADO数据库程序中,在进行检索数据时经常会需要搜索出符合多个已知条件的数据,这种情况我们就得多字符串匹配检索的方法实现,我们当前例程就演示如何执行多个字符串检索功能,效果如图,例程运行时会初始化连接根目录的数据库文件并打开记录集mChar,在界面中输入要检索的姓名及评价,选择检索的条件,点击检索就可找到与条件相符的数据;
要点提示
1.同时满足所有条件用”and”,例如检索 姓名中包含”李”并且评论中包含”很好”的同学,可以用语句:
select * from TableName where name=‘%李%’ and comment=‘%很好%’
2.不一定满足所有条件用”or”,例如检索姓名中包含“李”,且备注中含“一般”的同学,可以用语句:
select * from TableName where name=‘%李%’ or comment=‘%一般%’
实现功能
1.新建基于对话框的应用程序
2.在stdafx.h中加入ADO支持库
#import “c:\program files\common files\system\ado\msado15.dll” no_namespace rename (“EOF”, “adoEOF”) 及#include "icrsint.h"//IADORecordBinding 头文件
3.主对话框中添加变量public:
private:_ConnectionPtr m_pConn;_RecordsetPtr m_pRst;; 并初始化
::CoInitialize(NULL);
_variant_t vFieldValue;
CString strFieldValue;
m_pConn.CreateInstance(__uuidof(Connection));
try
{
m_pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=stuinf.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败!");
}
m_pRst.CreateInstance(__uuidof(Recordset));
m_pRst->Open("select * from mChar",m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
4.按例程界面添加二编辑框IDC_NAMEEDIT,IDC_COMMENTEDIT,二选择框IDC_BOTHCHECK,IDC_ALLCHECK,列表框IDC_LIST,及一按钮<检索>关联按钮的点击函数
void CGkbc8Dlg::OnQuery()
{
CString sName,sComment;
GetDlgItemText(IDC_COMMENTEDIT,sComment);
GetDlgItemText(IDC_NAMEEDIT,sName);
CButton *pBothCheck = (CButton *)GetDlgItem(IDC_BOTHCHECK);
CButton *pAllCheck = (CButton *)GetDlgItem(IDC_ALLCHECK);
CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST);
pListBox->ResetContent();
m_pRst->Close();//关闭上一次查询的记录集
CString sql;
if(pAllCheck->GetCheck())
{
if(pBothCheck->GetCheck() )
{
sql.Format("select * from mChar where name='%s' and comment='%s'",sName,sComment);
}
else
{
sql.Format("select * from mChar where name='%s' or comment='%s'",sName,sComment);
}
}
else
{
if(pBothCheck->GetCheck())
{
sql="select * from mChar where name like '%" + sName+"%'" + "and comment like '%" + sComment + "%'";
}
else
{
sql="select * from mChar where name like '%" + sName+"%'" + "or comment like '%" + sComment + "%'";
}
}
BSTR bssql=sql.AllocSysString();
m_pRst->Open((_variant_t)bssql,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
//显示结果
while(VARIANT_FALSE==m_pRst->EndOfFile)
{
_variant_t vFieldValue;
CString ID,Name,Comment;
CString Item;
vFieldValue=m_pRst->GetCollect("id");
ID=(char*)_bstr_t(vFieldValue);
vFieldValue.Clear();
vFieldValue=m_pRst->GetCollect("name");
Name=(char*)_bstr_t(vFieldValue);
vFieldValue.Clear();
vFieldValue=m_pRst->GetCollect("comment");
Comment=(char*)_bstr_t(vFieldValue);
vFieldValue.Clear();
Item.Format("学号为%s的%s同学是%s",ID,Name,Comment);
pListBox->AddString(Item);
m_pRst->MoveNext();
}
}
5,最后是程序退出时关闭记录集,即在程序 的OnDestroy()函数中添加代码
void CGkbc8Dlg::OnDestroy()
{
CDialog::OnDestroy();
m_pRst->Close();
m_pConn->Close();
::CoUninitialize();
}
我们来演示整个功能实现过程
|