请教了:我想查找
张山丰,
但我输入
张珊丰,(就是根本不知道库中的张山丰是这样写的,,而写出张珊丰)怎么样也能找到这个人名??怎么查找??
张山丰,
但我输入
张珊丰,(就是根本不知道库中的张山丰是这样写的,,而写出张珊丰)怎么样也能找到这个人名??怎么查找??
解决方案 »
- 求救:关于DBGrid 高手帮忙
- 我用delphi做的dll,在别机子上注册不了.别人用vb也引用不了,是什么问题?
- 对面的大虾看过来(关于com的难题)
- 如何判断某天是大月的29日,还是小月的28日,如果是就发出提示?分不够再加
- 120分相赠!!!!用fastreport实现主从表的特定打印形式问题,请帮忙!
- 谁有条码39码的字体,给我一分
- 誰知道哪有李維著的delphi5系列書下載網站(免費)
- PL/0编译器: 加入一维数组、else和repeat until语句的实现方法
- 哪儿有Delphi6 Update Pack 2下载?
- delphi5开发人员指南带的光盘里有什么内容??
- 怎樣用Update來對兩個表的某些字段做更新操作?
- 数据库中memo显示问题!
如果库中有个保存姓氏拼名的字段,比较容易实现,用拼音反查就可以了。
但这样的话,比较难吧。
不可能把字符串分解,然后用LIKE和多个OR来进行操作吧,这样会很多。
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;
第1步:"SELECT * FROM tb WHERE name LIKE '%张%'
INTERSECT
SELECT * FROM tb WHERE name LIKE '%丰%' "
第2步:将‘珊’字及所有1步的结果集中名字转换为拼音,查“shan”。
^-^
张珊丰 A889 A989 AA45 也就是说 A967和A989不同,但A9是相同的(因为声母相同),只要用A889 A989 AA45 跟 A889 A967 AA45 进行匹配(匹配程序越小,模糊程序越高)!我在DOS年代的时候做过这个,大多都可以。