请先看我的代码:
CString m_sID = "%";
_variant_t strQuery;
strQuery = "select * from MyTable where ID like '"+m_sID+"' ";我原以为可以查找到ID为任何值的记录,可是查不到ID为空的记录。
请问我的代码要怎样改才查找到该属性为空的记录?谢谢!

解决方案 »

  1.   

    改为:select * from MyTable where ID is null
      

  2.   

    查询所有记录
    select * from MyTable 
      

  3.   

    要查询所有记录不用写条件,如楼上DebugXP所说。要模糊查询的话,可以写成:
    strQuery.Format("select * from MyTable where ID like '%%abc%%'"); //两个%才可以
    就会将所有含有abc的记录查找出来
      

  4.   

    strQuery = "select * from MyTable where ID like '"+m_sID+"' or ID is null";
      

  5.   

    你那部分记录是不是要满足一定的条件呢?如果是的话cdwy411说的应该是可以了,
      

  6.   

    这些我晓得的,可是不能达到我的要求啊。我是要在SQL语句外来控制条件,如:CString m_sID = "%"; 即我没选定这个查询条件的话,它可以为任意值(当然不如我想,空值时就没效果了)。而我只用一条SQL语句:strQuery = "select * from MyTable where ID like '"+m_sID+"' ";就可以实现查询了。其实我这里查询条件很多,有10几个条件,我只是写了一个而已。怎么办呢?
      

  7.   

    既任意就为全部select * from table
      

  8.   

    我的部分代码:
    if (!m_bPhoneNumberCheck) m_sPhoneNumber = "%";
    if (!m_bNumberStateCheck) m_sNumberState = "%";
    if (!m_bCustomerNameCheck) m_sCustomerName = "%";
    if (!m_bIllustrationCheck) m_sIllustration = "%";
    if (!m_bLimitCheck) m_sLimit = "%";
    _variant_t strQuery;
    strQuery = "select * from phone_Info where PhoneNumber like '"+m_sPhoneNumber+"' and NumberState like '"+m_sNumberState+"' and CustomerName like '"+m_sCustomerName+"' and Illustration like '"+m_sIllustration+"' and Limit like '"+m_sLimit+"'";
      

  9.   

    richestbeggar(richestbeggar) 说:既任意就为全部select * from table不是这样的 我要选择查询条件,即没有选到的条件,那它的这个属性可为任意,总要有选到的条件的,大家现在明白我的问题了吧,可看看我上面的代码。谢谢你们!
      

  10.   

    CString Temp;
    strQuery = "select * from phone_Info where 1=1 "
    if (m_bPhoneNumberCheck)
    {
        Temp.Format(" and m_sPhoneNumber = 's%'", YourValue);
        strQuery += Temp;
    }
    其他的条件类似处理
      

  11.   

    jnxulei(石头) 的方法不错,我想应该可以,只是 where 1=1 是什么意思?能说详细点吗?我是个新手,谢谢你啊!
      

  12.   

    用这种方法吧
    strQuery.Format("select * from %s where %s = %s",strTableName,strColName,strValue);
    我原来也用
    strQuery = "select * from MyTable where ID like '"+m_sID+"' ";
    不过也是好像不行。你不行就换这种方法拉。
      

  13.   

    jacking007(复活岛)的办法好象不太好用,你没有明白我的想法,实际是我做了一个CHEDK BOX,选定它后,根据它的值查询,没有选定它,它可为任意值。jnxulei(石头)的方法很好,应该可行,我现在就是不明白where 1=1 是什么意思?是相当于while(1){}的意思吗?即是永为TRUE的意思吗?
      

  14.   

    上面CHEDK BOX 应为CHECK BOX。等待中……
      

  15.   

    谁能告诉我jnxulei(石头)的where 1=1 是什么意思吗? 我是新手,大家帮忙,谢谢你们!在线等待中……
      

  16.   

    where 1=1 纯粹是为了组装你的strQuery。开始的时候先写一个一定成立的条件。
      

  17.   

    就是为你添加一个无用的查询条件。因为你后面接的全部都是"and ...."。其实我的方法也是一样可以用的,自己改改不就行了。方法类似石头的。没什么区别。
      

  18.   

    大哥出错了:
    error C2676: binary '+=' : 'class _variant_t' does not define this operator or a conversion to a type acceptable to the predefined operator
      

  19.   

    先写成:strQuery = strQuery + Temp;//你的strQuery是CString吗?
      

  20.   

    几位大哥,出错的就是这行:strQuery += Temp; 
    前面的定义是:
    CString Temp;
    _variant_t strQuery;
      

  21.   

    先将strQuery定义成CString的,这样便于组装。在打开数据库的时候再将其转化为_variant_t 类型_variant_t(strQuery).
      

  22.   

    我的strQuery是_variant_t的,有什么办法吗?
      

  23.   

    我先试试, 用_variant_t(strQuery); 这样就可以了吗?
      

  24.   

    用_variant_t(strQuery); 这样写,得到以下错误信息:
    error C2371: 'strQuery' : redefinition; different basic types
      

  25.   

    //兄弟,I服了U  :)
    CString Temp;
    CString strQuery;//组装strQuery//在使用的地方如果需要再进行转换,如:
    m_pRecordset->Open(_variant_t(strQuery),
            _variant_t((IDispatch *)pMyConnect,true), adOpenKeyset,
            adLockOptimistic, adCmdStoredProc);
      

  26.   

    OK 了 编译无错,我先继续我的编程,搞定的话,就来结贴。好感谢你们啊!
    感谢jnxulei(石头)感谢jacking007(复活岛)感谢你们大家!!!
      

  27.   

    Temp.Format(" and PhoneNumber like 's%'", m_sPhoneNumber); 这条语句不对。
    该是什么呢?是Temp.Format(" and PhoneNumber like %s'", m_sPhoneNumber);吗?
      

  28.   

    其实你原来的程序也很好使用只是,不过你可能忽略了一个C++的基本字符串替换条件。
    因为在*.Format("")中使用%s替换,1.你的第二条少一个但引号and PhoneNumber like '%s'", 
    2.另外在字符串中要替换出SQL语句的“%”要在C++环境中使用成"%%"代表一个"%",而要表示SQL里的"LIKE 'temp%'"在C++中是*.Format("%s%%",temp)。3.如果你的m_sPhoneNumber是int型,那么用LIKE 合适么,我没有时间试一下。
      

  29.   

    我已经搞定了,谢谢你们大家。谢谢CSDN!!!马上结贴!