CStudentSet studentset;
studentset.Open();
studentset.MoveFirst();
UpdateData(TRUE);
CString a1,a2,a3,a;
if(m_Sname=="")
a1="1";
else
a1.Format("Sname='%s'",m_Sname);

if(m_Ssex=="")
a2="1";
else
a2.Format("Ssex='%s'",m_Ssex); if(m_college=="")
a3="1";
else
a3.Format("Scollege='%s'",m_college);
studentset.m_strFilter.Format("%s and %s and %s",a1,a2,a3);
studentset.Requery();
 数据源是SQL时老是说在AND附近有语法错误哦
可是在ACCESS 用就不会哦
什么原因阿?
在线等

解决方案 »

  1.   

    m_Sname,m_Ssex,m_college是编辑框的变量
      

  2.   

    studentset.m_strFilter.Format("'%s' and '%s' and '%s'",a1,a2,a3);或者cdatabase db;
    db.open(....);
    crecordset rs(&db);
    cstring ssql;
    ssql.format("SELECT * from table where colu1='%s'",a1);
    rs.open(AFX_DB_USE_DEFAULT_TYPE,ssql);
      

  3.   

    不行的?
    还是在AND附近有语法错误
    是不是那个1的问题?
    当控件变量为空时数据过滤1怎么理解阿?
      

  4.   

    CString strSQL = "";
    CString strTempSQL = "";
    if(!m_Edit1.IsEmpty()) //如果控件值不为空
    {
    strTempSQL.Format("%s and 字段1 = '%s'",strSQL,m_Edit1);
    //上面等同于strSQL = strSQL + " and 字段1 = " + m_Edit1
    //不建议这么写,因为其它类型的不容易控制
    strSQL = strTempSQL;
    }

    if(!m_Edit2.IsEmpty()) //如果控件值不为空
    {
    strTempSQL.Format("%s and 字段2 = '%s'",strSQL,m_Edit2);
    strSQL = strTempSQL;
    } //.................................;
    //直到你所有得空件都判断完毕

    //把左边得" and"删除
    strSQL = strSQL.Right(strSQL.GetLength() - strlen(" And"));

    studentset.m_strFilter.Format("%s",strSQL);
      

  5.   


    假设你的三个字段名称分别为Sname、Ssex、college,则
    studentset.m_strFilter.Format("Sname = '%s' and Ssex = '%s' and college = '%s'",a1,a2,a3);
      

  6.   


    看错了,
    看你的程序,好像你的Ssex字段不是字符类型的,如果是数字类型的话,应该是
    studentset.m_strFilter.Format("Sname = '%s' and Ssex = %d and Scollege = '%s'",m_Sname,m_Ssex,m_college);