如题,代码如下,调试运行的时候在open函数出错,请问那个参数写的不对,我照着一本书上写的啊
void CStudentDlg::OnQuery()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CString strSql;
if(m_name != "" && m_age != "")
strSql.Format("SELECT * FROM student_info WHERE name = '%s' AND age = '%s'",m_name,m_age);
else if(m_name != "" && m_age == "")
strSql.Format("SELECT * FROM student_info WHERE name = '%s'",m_name);
else if(m_name == "" && m_age != "")
strSql.Format("SELECT * FROM student_info WHERE age = '%s'",m_age);
else
strSql = "SELECT * FROM student_info";
try
{
m_pRecordset->Close();
m_pRecordset->Open(strSql.AllocSysString(),
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
ListData();
}
void CStudentDlg::OnQuery()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CString strSql;
if(m_name != "" && m_age != "")
strSql.Format("SELECT * FROM student_info WHERE name = '%s' AND age = '%s'",m_name,m_age);
else if(m_name != "" && m_age == "")
strSql.Format("SELECT * FROM student_info WHERE name = '%s'",m_name);
else if(m_name == "" && m_age != "")
strSql.Format("SELECT * FROM student_info WHERE age = '%s'",m_age);
else
strSql = "SELECT * FROM student_info";
try
{
m_pRecordset->Close();
m_pRecordset->Open(strSql.AllocSysString(),
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
ListData();
}
显示错误是runtime error!请问是怎么回事啊.谢谢
敢问上面的仁兄,你指的实例化是?
1)m_pRecordset一定是有效的指针
2)m_pRecordset->Open(),这句断住,察看strSql的值,最好去SQL Query里运行验证一下
3)if (!m_pPecordset->adoEOF) 表明结果集里有数据,你可以ListData()
else return ; catch(_com_error *e)放ListData()下面
就是在open这一句出的问题,还没执行到下面的那句呢,strsql的值经过验证过了,没有问题啊
theApp.m_pConnection.GetInterfacePtr()这么写的,其实也不是很明白它的意思.反正还是没有编译通过.
HRESULT hr ;// strcpy(sql,"select * from 闾胥路_MODELDB");
hr = pHRecord.CreateInstance(__uuidof(Recordset)); //创建实例,查询
if(SUCCEEDED(hr))
{
try //根据sql 读取数据记录
{
hr = pHRecord->Open(_variant_t(sql),ptr.GetInterfacePtr(),
adOpenStatic,
//adLockOptimistic,
adLockReadOnly,
adCmdText);
if(FAILED(hr))
return NULL; }catch(_com_error ex)
{
printf("sql %s ......\n", sql);
printf("CAdoBlockDriver ::QueryBySql %s\n",ex.ErrorMessage());
printf("CAdoBlockDriver ::QueryBySql %s\n",(char*)(ex.Description()));
bool bTry = true;
int tryCount = 0;
while(bTry)
{
if(tryCount > 5)
return NULL;
Sleep(20);
try
{
hr = pHRecord->Open(_variant_t(sql),ptr.GetInterfacePtr(),
adOpenStatic,
//adLockOptimistic,
adLockReadOnly,
adCmdText);
if(FAILED(hr))
return NULL;
}catch(_com_error epp)
{
printf("CAdoBlockDriver ::QueryBySql %s, TRY : %d\n",ex.ErrorMessage(),tryCount);
printf("CAdoBlockDriver ::QueryBySql second %s, TRY : %d\n",(char*)(ex.Description()),tryCount);
//pHRecord = NULL;
//return NULL;
}
tryCount++;
}
}
}