我有三个问题想问各位高人:
问题1.CMyRecordset按默认用odbc连接了一个数据库表,没什么特别的。在CMyRecordView中,我写了查询语句:
  m_pSet->m_strFilter = "id = '" + m_sCgsId + "'";
if(! m_pSet->Requery()){
AfxMessageBox("查询失败");
m_pSet->m_strFilter = "";
m_pSet->Requery();
}
m_pSet->MoveFirst();
if(m_pSet->IsEOF())
AfxMessageBox("没查到数据");
else{ for(m_lCount = 0;! m_pSet->IsEOF();m_lCount++)
{
m_listCgsCode.InsertItem   (m_lCount,m_pSet->m_xh);
m_listCgsCode.SetItemText(m_lCount,1,m_pSet->m_id);
m_listCgsCode.SetItemText(m_lCount,2,m_pSet->m_name);
m_pSet->MoveNext();
}
}
如果数据库中的id有“京A”,我输入“京A”(既是m_sCgsId=京A ),将会很正常的查
出来了,但要是输入“京”(一句话,就是数据库中没有的值),就回弹出“试图越过数据的有效存储区间。”,之后就不管输入什么都是弹出这个了。
问题2.
我想将上面的
m_pSet->m_strFilter = "id = '" + m_sCgsId + "'";
改为m_pSet->m_strFilter = "id = '" + m_sCgsId + "'" + “?”;
以达到模糊查询的目的,但失败了,要该怎么写呢?
问题3.
我想用汉字的首字母达到查询的目的,如输入"j"就会查出如“竟,井,京”等值相关,该怎么写呢?
如能解决问题2或3,愿意再送200分。(我现在的可用分可只有370分)

解决方案 »

  1.   

    你的m_pSet->MoveFirst();之前应该加上if(!m_pSet->IsEOF())
      

  2.   


     id LIKE 京% 
    好像可以模糊查询吧
      

  3.   

    m_pSet->m_strFilter = "id like '" + m_sCgsId + "'%" 
    m_pSet->m_strFilter = "id like  '" + m_sCgsId + "'" + "%";
    都不行
      

  4.   

    m_pSet->m_strFilter = "id like '" + m_sCgsId + "'%" 
    m_pSet->m_strFilter = "id like  '" + m_sCgsId + "'" + "%";
    都不行,该怎么写?
      

  5.   

    吗的,这样就行:
    m_sCgsId += "%";
    m_pSet->m_strFilter = "id like  '" + m_sCgsId + "'";
    刚才上面是怎么错了,我不甘心。
      

  6.   

    m_pSet->m_strFilter = "id like  N'%" + m_sCgsId + "%'";
      

  7.   

    用LIKE 应该可以的然后用%或者是?(统配符的说明应该有的)关于中文首字母的问题,我建议你看看
    function GetPYIndexChar( hzchar:string):char;
    begin
      case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of
        $B0A1..$B0C4 : result := 'A';
        $B0C5..$B2C0 : result := 'B';
        $B2C1..$B4ED : result := 'C';
        $B4EE..$B6E9 : result := 'D';
        $B6EA..$B7A1 : result := 'E';
        $B7A2..$B8C0 : result := 'F';
        $B8C1..$B9FD : result := 'G';
        $B9FE..$BBF6 : result := 'H';
        $BBF7..$BFA5 : result := 'J';
        $BFA6..$C0AB : result := 'K';
        $C0AC..$C2E7 : result := 'L';
        $C2E8..$C4C2 : result := 'M';
        $C4C3..$C5B5 : result := 'N';
        $C5B6..$C5BD : result := 'O';
        $C5BE..$C6D9 : result := 'P';
        $C6DA..$C8BA : result := 'Q';
        $C8BB..$C8F5 : result := 'R';
        $C8F6..$CBF9 : result := 'S';
        $CBFA..$CDD9 : result := 'T';
        $CDDA..$CEF3 : result := 'W';
        $CEF4..$D188 : result := 'X';
        $D1B9..$D4D0 : result := 'Y';
        $D4D1..$D7F9 : result := 'Z';
      else
        result := char(32);
      end;
    end;这个是DELPHI的一个函数,道理应该是一样的,你看看