void query::OnButton1() 
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_qlist.DeleteAllItems();
ADOConn ado;
CString sql,temp;
sql.Format("select sname,cname,xname,stime from student,class where student.cname=class.cname");
if(m_qname.IsEmpty()&&m_classn.IsEmpty()&&m_deptn.IsEmpty())
{
MessageBox("请输入你要查询的信息");
return;
}
if(!m_qname.IsEmpty())
{
temp="and sname like '"+m_qname+"%'";
sql+=temp;
}
if(!m_classn.IsEmpty())
{
temp="and cname like '"+m_classn+"%'";
sql+=temp;
}
if(!m_deptn.IsEmpty())
{
temp="and dept like '"+m_deptn+"%'";
sql+=temp;
}
if(m_orderlaw=="升序")
sql+="order by sname asc";
else
sql+="order by sname desc";
_RecordsetPtr rs;
rs=ado.GetRecordset((_bstr_t)sql);
if(rs->adoEOF)
MessageBox("没有你要找的信息!");
while(!rs->adoEOF)
{
m_qlist.InsertItem(0,"");
m_qlist.SetItemText(0,0,(char*)(_bstr_t)rs->GetCollect("sname"));
m_qlist.SetItemText(0,1,(char*)(_bstr_t)rs->GetCollect("cname"));
m_qlist.SetItemText(0,2,(char*)(_bstr_t)rs->GetCollect("xname"));
m_qlist.SetItemText(0,3,(char*)(_bstr_t)rs->GetCollect("stime"));
rs->MoveNext();
}
m_qname="";
m_classn="";
m_deptn="";
UpdateData(FALSE);
}执行错误在说:     第一行:'sname'附近有语法错误请给位大侠赐教!急啊!!!!
   

解决方案 »

  1.   

    你打印一下你的sql语句,估计有问题..
      

  2.   

    你的联合查询语句错了,可以先在这个软件里测试你的SQL语句。
    大概格式是这样的
    select t1.Field1, t2.Field1, t1.Field2 from t1, t2 where t1.Field1 = t2.Field1 and t1.Field1 like '%sss' 
      

  3.   

    sql语句有问题:
    select sname,cname,xname,stime from student,class where student.cname=class.cname
    改为
    select sname,cname,xname,stime from student s inner join class c where s.cname=c.cname不太确定你是不是要inner join,根据你的实际情况修改联接方式吧~
      

  4.   

    select sname,cname,xname,stime from student s inner join class c on s.cname=c.cname
      

  5.   

    Debug下,看你的SQL语句写得对否,然后再修改就OK啦.
      

  6.   

    加上tr...catch...块,看一下现在的具体错误是啥~try
    {
           //要测试的代码
    }
    catch(_com_error& e)
    {
          AfxMessageBox(e.Description());
    }
      

  7.   

    select sname,cname,xname,stime from student,class where student.cname=class.cname
    你的两个表中都有cname这个字段 查询的时候 要注明表名的
    select sname,student.cname,xname,stime from student,class where student.cname=class.cname
    所有在两个表中都有的字段都要加上表名限制
      

  8.   

    俺不太确定你的代码一定是sql语句的问题(也可能还有其他的错),但你的sql语句应该是不对的,把你的student和class表结构给贴一下吧~
      

  9.   

    create table class
    (
    cname varchar(20) primary key,
    xname varchar(20) foreign key references xueyuan(xname)
    )create table student
    (
    sname varchar(20) primary key,
    cname varchar(20) foreign key references class(cname),
    stime datetime default'2007-9-1'
    )
    这是查询分析器中的代码
    谢谢!
      

  10.   

    sql语句改成下面的试试:select s.sname,s.cname,s.stime,c.xname from student s inner join class c on s.cname=c.cname
      

  11.   

    在SQL里执行有问题吗?
    如果SQL中没有问题再看程序
      

  12.   

    sql.format语句有问题,字段前要加表名