请教了:我想查找
张山丰,
但我输入
张珊丰,(就是根本不知道库中的张山丰是这样写的,,而写出张珊丰)怎么样也能找到这个人名??怎么查找??

解决方案 »

  1.   

    这样很难吧?
    如果库中有个保存姓氏拼名的字段,比较容易实现,用拼音反查就可以了。
    但这样的话,比较难吧。
    不可能把字符串分解,然后用LIKE和多个OR来进行操作吧,这样会很多。
      

  2.   

    如下试过吗?
    No.1:
      如果你的数据库不是很大的话,试着在Onchange里实现,这样的话,属入张,就有可能出来了张....,有可能避免第二个字。
    No.2:
       还有一种解决方案就是,再数据库中再添加一个姓名代码库,当你作用户的信息输入时,将用户的名字的每个字的首字母也提取出来,比如你说的应该是ZSF,这三个字母,到时只用检索这三个字母就可以了,当然,用户是在前台操作,你在后台操作,用户没有办法可以感觉的出来,如此一来,用户根本不知道你在后台操作,实现过程可以参考如下代码:function GetPYCode(HanStr: String) : String;//提取汉字的汉语拼音首字母函数。 
    const 
    PRCCodePage=936; 
    { 数据来源于汉字码表 } 
    VowelPos: array['`'..'{'] of Integer = ($0000,$B0A1,$b0c5,$b2c1,$b4ee, 
    $b6ea,$b7a2,$b8c1,$b9fe,$0000,$bbf7,$bfa8, 
    $c0ac,$c2e8,$c4c3,$c5b6,$c5be,$c6da,$c8bb, 
    $c8f6,$cbfa,$0000,$0000,$cdda,$cef4,$d1b9, 
    $d4d1,$FFFF); 
    var 
    sVol : string; 
    Vowels : String; 
    i:Char; 
    HanziCode:Word; 
    lps,p1,p2:Pointer; 
    begin 
    sVol := HanStr; 
    GetMem(lps,Length(sVol)+1); 
    StrPCopy(lps,sVol); 
    p1:=lps; 
    p2:=CharNextEx(PRCCodePage,p1,0); 
    Repeat 
    if Abs(Longint(p2)-Longint(p1))=2 then 
    begin 
    HanziCode:=Word(p1^); 
    HanziCode:=swap(HanziCode); 
    for i:='`' to '{' do 
    begin 
    if VowelPos[i]>HanziCode then 
    begin 
    if i='a' then 
    Vowels:=Vowels+i 
    else if i='j' then //因为汉语内没有以“I”开头的拼音,遇到这种情况就是遇到了“H” 
    Vowels:=Vowels+'h' 
    else if i='w' then // 没有以“U、V”开头的拼音,遇到这种情况就是遇到了“T” 
    Vowels:=Vowels+'t' 
    else 
    Vowels:=Vowels+Chr(Ord(i)-1); 
    break; 
    end; 
    end; 
    end 
    else begin 
    Vowels:=Vowels+PChar(p1)^; //非汉字不转换 
    end; 
    p1:=p2; 
    p2:=CharNextEx(PRCCodePage,p1,0); 
    Until p1=p2; 
    Result:=Vowels; 
    //Result:=UpperCase(Vowels); 
    FreeMem(lps); 
    end; 
      

  3.   

    如果你确定有‘张’和‘丰’,不确定‘山’和‘珊’:
    第1步:"SELECT * FROM tb WHERE name LIKE '%张%' 
        INTERSECT 
        SELECT * FROM tb WHERE name LIKE '%丰%' "
    第2步:将‘珊’字及所有1步的结果集中名字转换为拼音,查“shan”。
    ^-^
      

  4.   

    逐个字匹配(按内码,一班来说发音相同的字都在同一区中):例:张山丰 (我没查,假设是:A889 A967 AA45)
    张珊丰 A889 A989 AA45 也就是说 A967和A989不同,但A9是相同的(因为声母相同),只要用A889 A989 AA45 跟 A889 A967 AA45 进行匹配(匹配程序越小,模糊程序越高)!我在DOS年代的时候做过这个,大多都可以。