• 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下调试通过

  • 相关阅读:
    正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)
    ++i? i++? i+=1? i=i+1? 何必纠结?
    数独题的生成与解决方法
    VIM常用设置
    我的“MIT Challenge”
    NDK开发之javaVM
    十二月寒冬
    Linux epoll 笔记(高并发事件处理机制)
    Linux之我见
    半夜惊醒
  • 原文地址:https://www.cnblogs.com/sharecenter/p/5621003.html
Copyright © 2020-2023  润新知