我想在程序中执行用户输入的SQL查询语句,比如select * fron 员工信息 where name='张三';
我是在void CNewClientDlg::OnQuery()中实现的
void CNewClientDlg::OnQuery()
{        _CommandPtr m_pCommand;
m_pCommand.CreateInstance("ADODB.Command");
_variant_t vNULL;
vNULL.vt = VT_ERROR;
vNULL.scode = DISP_E_PARAMNOTFOUND;///定义为无参数
m_pCommand->ActiveConnection = m_pConnection;
m_pCommand->CommandText = m_SQLstate;///命令字串,用户输入的
m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);///执行命令,取得记录集

 }
其他的比如初始化后显示所有记录,修改记录,删除记录都没有问题

解决方案 »

  1.   

    m_pCommand->Execute好像执行的是不返回记录集的SQL命令。
    如果需要执行返回记录集的指令用m_pRecordset.Open()函数。方法如下:
    m_pRecordset->Open((LPCTSTR)sql,_variant_t((IDispatch*) m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdUnknown);
      

  2.   

    1、保证SQL语句正确;
    2、给你一段例子
    _variant_t RecordsAffected;
    _RecordsetPtr m_pCountRecord; char szSQL[2048] = { 0 };
    sprintf( szSQL , "select count( * ) as All_Count from tbl_LoveScore where u_ID=%d" , the6.m_UID ); //用实际得到的分数计算最好成绩,求最大值
    _bstr_t sqlstr(szSQL); m_pCountRecord = _pDBConn->Execute( sqlstr , &RecordsAffected , adCmdText);
    _variant_t oBestScore = m_pCountRecord->GetCollect ("All_Count");
    int iAll_Count = oBestScore.lVal;
    m_pCountRecord->Close();
    if( iAll_Count == 0 ){
    sprintf( pRtn , "%s" , "\r\n头一次参加" );
    return TRUE;
    }