一个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());
}
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());
}
"WHERE P1 = '" + pinyin + "' AND T1 = '" + str_ShengDiao + "' ";
这个SQL语句有问题,感觉你的+号和'有问题,
m_pConnection->Execute(pSql.GetBuffer(pSql.GetLength()),NULL,adCmdText);语句时总是报如下的错误:Unhandled exception Prototype.exe(KERNEL32.DLL):OxE06D7363:Microsoft C++Exception.
m_pConnection.CrateInstance("ADODB.CONNECTION");
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 ;
}
这些代码都是正确的,我在另一个程序中测试通过了。
WHERE P1 = ' + pinyin + ' AND T1 = ' + str_ShengDiao + '
最好用pSql.Format(....);整理sql语句。
m_pConnection->Execute(_variant_t(pSql).bstrVal,NULL,adCmdText);
还是报错!