一个ADO操作ACCESS的问题,该程序涉及到多个表,所以初始化记录集,我没有在OnInitDialog()中进行,当程序执行到
m_pConnection->Execute(pSql.GetBuffer(pSql.GetLength()),NULL,adCmdText);时出错了,求高手们指教,可用分只有60分了,在线等待,答完给分。部分代码如下: CString pinyin;
CString pSql ;
pinyin = str_ShengMu + str_YunMu ;  m_pRecordset.CreateInstance(__uuidof(Recordset)) ;     try
      {
m_pRecordset->Open("SELECT * FROM ZiKu",    
        theApp.m_pConnection.GetInterfacePtr() ; 
        adOpenDynamic,
       adLockOptimistic, adCmdText);
 }
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}  _variant_t var ;
CString strHanzi;
try
{        
        pSql = "SELECT HANZI FROM ZiKu "
  "WHERE P1 = '" + pinyin  + "'  AND T1 = '" + str_ShengDiao + "' ";
        AfxMessageBox(pinyin);
  m_pConnection->Execute(pSql.GetBuffer(pSql.GetLength()),NULL,adCmdText); if( !m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空!");
return ;
}
while( !m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("HANZI");
if(var.vt != NULL)
strHanzi = (LPCSTR)(_bstr_t)var ;
m_List_Zi.InsertString(-1 , strHanzi );
m_pRecordset->MoveNext();
}
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

解决方案 »

  1.   

    pSql = "SELECT HANZI FROM ZiKu "
      "WHERE P1 = '" + pinyin  + "'  AND T1 = '" + str_ShengDiao + "' ";
    这个SQL语句有问题,感觉你的+号和'有问题,
      

  2.   

    P1、T1分别为拼音和声调字段,都是字符型,所以我加上了单引号,我它去掉了也还是不行,每当运行到
    m_pConnection->Execute(pSql.GetBuffer(pSql.GetLength()),NULL,adCmdText);语句时总是报如下的错误:Unhandled exception Prototype.exe(KERNEL32.DLL):OxE06D7363:Microsoft C++Exception.
      

  3.   

    m_pConnection根本就没有创建吧
    m_pConnection.CrateInstance("ADODB.CONNECTION");
      

  4.   

    应该不是这个问题,在InitInstance()我已经添加了代码:
    AfxOleInit() ;
    m_pConnection.CreateInstance(__uuidof(Connection)) ; try
    {
    m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyDatabase.mdb","","",adModeUnknown);
    }
    catch(_com_error e )
    {
    AfxMessageBox("数据库连接失败,请确认路径是否正确!");
    return FALSE ;
    }
    这些代码都是正确的,我在另一个程序中测试通过了。
      

  5.   

    试试
    WHERE P1 = ' + pinyin  + '  AND T1 = ' + str_ShengDiao + ' 
    最好用pSql.Format(....);整理sql语句。
      

  6.   

    DebugXP(㊣神迹㊣) :还是不行,我从新改了一下:pSql.Format("Select HANZI from ZiKu where P1='%s' AND T1 = '%s'",pinyin,str_ShengDiao);
      m_pConnection->Execute(_variant_t(pSql).bstrVal,NULL,adCmdText);
          
    还是报错!