我想根据程序传递过来的一个string变量(这是个地址)
查询数据库中有相同地址的纪录,我的数据库是一对多的纪录,就是table1可能对应多个table2纪录
所以需要类似于这样
m_strfilter = "table1.addr = table2.addr = str"
我这样写了以后调用requery(),怎么发现还是查找了数据库头一行的纪录,和我的要求不符,请问应该怎么写这样的语句在vc中
谢谢!!

解决方案 »

  1.   

    m_strFilter.Format("table1.addr = table2.addr = '%s'",temp); //这个temp就是输入的动态参数
      

  2.   

    还有一个问题,在这之间,如果还想查询默认的数据库检索
    是否要在检索前,调用getdefaulatsql()这样的语句
    待会问题解决了就结帖
      

  3.   

    m_pSet->m_strFilter.Format("table1.Addr = table2.Addr = '%s'",Addr); 
    if ( !m_pSet->Requery() ){
    AfxMessageBox("Requery has failed");
    return;
    }
    try{
    m_pSet->MoveFirst();
    }
    catch( CDBException *e ){
    AfxMessageBox("No records were found",MB_ICONEXCLAMATION);
    e->Delete();
    return;
    }
    照楼上的写法怎么还是找到数据库中第一个记录呢?莫非是movefirst不该用?请指教!谢谢!!
      

  4.   

    MoveFirst前先判断一下得到的记录集是否为空
      

  5.   

    如果在加上try语句之前加上
    if ( m_pSet->IsBOF() && m_pSet->IsEOF() ){
         return;
    }
    程序运行结果表示是有数据的,没有那样返回!我的default sql语句是查询整个数据库
    CString CLUSSSet::GetDefaultSQL()
    {
    m_strFilter = "table1.Addr = table2.Addr";
    return _T("[dbo].[table1],[dbo].[table2]");
    }
    现在要根据返回的str重新查数据库,只要返回addr是str的一些纪录就可以了
    难道我上面那样改动m_strfilter不对?请指教,谢谢!!
      

  6.   

    现在有点发现问题所在了,是我的m_strFilter.Format("table1.addr = table2.addr = '%s'",temp); 设置不对,有语法错误
    导致在requery时,没有查询语句,从而使用了open(AFX_DB_USE_DEFAULT_TYPE,NULL),也就是查询了
    默认的SQL语句
    现在我应该怎么写这个filter,或是我怎么写这个open语句,下面报告where附近有语法错误
    str1.Format("table1.Addr = table2.RSAddr and table1.Addr = '%s'",strAddr); 
    str = "select * from table1, table2 where "; 
    str += str1; 
    if ( m_pSet->IsOpen() ){ 
        m_pSet->Close(); 

    m_pSet->Open(CRecordset::dynaset,str); 
    谢谢!!