VC++2005下的ADO SQL语句(like,count,distinct)和操作(转)

http://blog.sina.com.cn/s/blog_56fd66a70100hxjf.html

http://timke.blog.163.com/blog/#m=0

环境:MFC  Dialog  UNICODE
1 寻找包含某个字符的字段值并将符合条件的记录取出 ,like语句
_ConnectionPtr m_pCon; 
_RecordsetPtr m_pRs;
 try{
CString sql=SELECT * FROM 表 WHERE 字段 LIKE  '%'
HRESULT hr=m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
 if (SUCCEEDED(hr))
 {
 
  while (!m_pRs->EndOfFile)
  {
  
   vFieldValue=m_pRs->GetCollect(字段名称);
   MessageBox((_bstr_t)vFieldValue);
   m_pRs->MoveNext();
  
  }
  hr=m_pRs->Close();//关闭记录集
 }
}
catch(_com_error e)
 {
  MessageBox(e.Description());
 }


2  获取符合条件记录的个数,并将获取到的个数取出 count语句

_ConnectionPtr m_pCon; 
_RecordsetPtr m_pRs;
 try{
  CString sql=_T("SELECT COUNT(*) FROM 表名 WHERE 字段名='字段值'");
  _variant_t RecordsAffected;
  m_pRs=m_pCon->Execute((_bstr_t)sql,&RecordsAffected,adCmdText); 
  _variant_t vIndex = (long)0;
  _variant_t vCount = m_pRs->GetCollect(vIndex);
  MessageBox(_bstr_t( vCount),_T("获取符合条件的记录的个数"),MB_OK);
  m_pRs->Close();///关闭记录集
 }
 catch(_com_error e)
 {
  MessageBox(e.Description());
 }

3  取出某个符合条件的不重复字段 distinct语句
_ConnectionPtr m_pCon; 
_RecordsetPtr m_pRs;
try{
  _variant_t vFieldValue;
  CString sql=_T("SELECT DISTINCT 需要取出的字段 FROM 表名 WHERE 字段='字段值'");
  _variant_t RecordsAffected;
  m_pRs=m_pCon->Execute((_bstr_t)sql,&RecordsAffected,adCmdText);

  while (!m_pRs->EndOfFile)
  {
  
   vFieldValue=m_pRs->GetCollect(_T("需要取出的字段"));
                        MessageBox(_bstr_t(vFieldValue));
   m_pRs->MoveNext();

  }

  m_pRs->Close();
 }
 catch(_com_error e)
 {
  MessageBox(e.Description());
 }


4 操作表过程中的一些问题

4(1)打开表返回的记录数总是-1
_RecordsetPtr m_pRs;
m_pRs->RecordCount返回值总是-1
解决方法:
设置游标的类型为客户端类型
m_pRs->CursorLocation=adUseClient;
然后打开表

4(2)移动不了记录指针
_RecordsetPtr m_pRs;
m_pRs->MoveNext();语句不起作用
解决方案:采用静态方式打开
下面的sql是一个sql语句
m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
更改为
m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);

以上程序在VC++2005 MFC Unicode下调试通过

转载于:https://www.cnblogs.com/sharecenter/p/5621003.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值