
VC++查询结果在列表框显示的问题
我数据库连接已经成功,下面代码主要想实现的就是:从学生,成绩,专业,课程这个表中连接获取一个记录集,从对话框输入的专业名为查询条件也就是在列表框中只显示属性专业名为sub...
我数据库连接已经成功,下面代码主要想实现的就是:从 学生,成绩,专业,课程 这个表中连接获取一个记录集, 从对话框输入的专业名为查询条件 也就是在列表框中只显示属性专业名为subject的记录。可是却始终出现“访问纪录字段失败”的错误,我用断点调试发现,我本该有的记录应该只有5条,也就按理说 while(m_pRecordset->BOF==0)在第六次将不成立,可是我发现在第六次的时候,循环继续执行,而此时当执行循环第一条语句的时候便报错了。请哪位高手帮忙指点一下!
CString subject;//表示对话框获取的专业名
CString strSQL;
CString sname,cname,grade,specsub;//分别表示数据库中的 姓名,课程名,分数,专业
_variant_t vsname,vcname,vgrade,vspecsub;
GetDlgItemText(IDC_specsub,subject);
if(subject.IsEmpty())
{
MessageBox("请选择专业!");
return;
}
strSQL.Format("select 姓名,分数,专业名,课程名 from 学生,成绩,专业,课程 \
where 学生.学号=成绩.学号 AND 专业.专业号=学生.专业号 AND 成绩.课程号=课程.课程号 AND 专业.专业名='%s'",subject);
try
{
m_pRecordset->Open((_variant_t)strSQL,
m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic, adCmdText);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("数据库查询失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
return ;
}
try
{
while(m_pRecordset->BOF==0)
{
vsname=m_pRecordset->GetCollect("姓名");
vcname=m_pRecordset->GetCollect("课程名");
// vgrade=m_pRecordset->GetCollect("分数");
vspecsub=m_pRecordset->GetCollect("专业名");
sname=vsname.bstrVal;
cname=vcname.bstrVal;
//grade=vgrade.bstrVal;
specsub=vspecsub.bstrVal;
while( subject==specsub )
((CListBox*)GetDlgItem(IDC_LIST))->AddString(sname+" "+cname+" "+specsub);
m_pRecordset->MoveNext();
}
}
catch(_com_error e)
{
//显示错误信息
CString errormessage;
errormessage.Format("访问纪录字段失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
} 展开
CString subject;//表示对话框获取的专业名
CString strSQL;
CString sname,cname,grade,specsub;//分别表示数据库中的 姓名,课程名,分数,专业
_variant_t vsname,vcname,vgrade,vspecsub;
GetDlgItemText(IDC_specsub,subject);
if(subject.IsEmpty())
{
MessageBox("请选择专业!");
return;
}
strSQL.Format("select 姓名,分数,专业名,课程名 from 学生,成绩,专业,课程 \
where 学生.学号=成绩.学号 AND 专业.专业号=学生.专业号 AND 成绩.课程号=课程.课程号 AND 专业.专业名='%s'",subject);
try
{
m_pRecordset->Open((_variant_t)strSQL,
m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic, adCmdText);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("数据库查询失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
return ;
}
try
{
while(m_pRecordset->BOF==0)
{
vsname=m_pRecordset->GetCollect("姓名");
vcname=m_pRecordset->GetCollect("课程名");
// vgrade=m_pRecordset->GetCollect("分数");
vspecsub=m_pRecordset->GetCollect("专业名");
sname=vsname.bstrVal;
cname=vcname.bstrVal;
//grade=vgrade.bstrVal;
specsub=vspecsub.bstrVal;
while( subject==specsub )
((CListBox*)GetDlgItem(IDC_LIST))->AddString(sname+" "+cname+" "+specsub);
m_pRecordset->MoveNext();
}
}
catch(_com_error e)
{
//显示错误信息
CString errormessage;
errormessage.Format("访问纪录字段失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
} 展开
展开全部
m_pRecordset->BOF==0
改成 !m_pRecordset->adoEOF
改成 !m_pRecordset->adoEOF

2023-12-06 广告
UIkit是一套轻量级、模块化且易于使用的开源UI组件库,由YOOtheme团队开发。它提供了丰富的界面元素,包括按钮、表单、表格、对话框、滑块、下拉菜单、选项卡等等,适用于各种类型的网站和应用程序。UIkit还支持响应式设计,可以根据不同...
点击进入详情页
本回答由网易云信提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询