您的位置:首页 > 编程语言 > C语言/C++

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

2016-04-01 10:14 351 查看
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下调试通过
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: