第一次用vc+ado做的学生管理系统,编译没错,但查询时得不到结果(弹出系统提示:runtime error!).调试很久还是没有解决.请教!
查询数据库中符合条件的内容,并在列表框中显示.
void CMyDlg::OnSearchButton()
{
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance("ADODB.Connection");
m_pConnection->ConnectionTimeout=10;
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\03.mdb","","",adModeUnknown);
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("SELECT * FROM 信息管理系统",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
CString s;
m_pRecordset->MoveFirst();
bool search = false;
char cEdit[20];
cEdit[0] = '\0';
_variant_t v,v1,v2,v3;
m_Data.GetWindowText(cEdit,20);
if(cEdit[0]!='\0'){
while(!m_pRecordset->adoEOF){
v=m_pRecordset->GetCollect("姓名");
s=(LPCTSTR)_bstr_t(v);
if(s == cEdit ){ //可以这样写吗?编译没有问题.但我觉得在c中这样写是在比较两个地址(我想实现的是比较两个字符串). 在vc中if(s == cEdit )和if( strcmp(s,cEdit) == 0 )是一样的吗?
v1=m_pRecordset->GetCollect("院系");
s=(LPCTSTR)_bstr_t(v1);
m_Record_List.InsertItem(0,s); //我觉得是这几句有问题.当查询的内容不在数据库中时,弹出对话框"没有找到满足条件记录".当查询的内容在数据库时,系统弹出提示:"runtime error".
v2=m_pRecordset->GetCollect("专业代码");
s=(LPCTSTR)_bstr_t(v2);
m_Record_List.SetItemText(0,1,s);
v3=m_pRecordset->GetCollect("专业");
s=(LPCTSTR)_bstr_t(v3);
m_Record_List.SetItemText(0,2,s);
search=true;
break;
}
m_pRecordset->MoveNext();
}
}
if (!search)
MessageBox("没有找到满足条件记录");
}
这是我的第一个用vc+ado做的程序,所以很多都不会,希望大家指教.
如果我写的不太明白,我可以把代码寄到您的信箱.谢谢了.