想要一段 模糊查询的代码 比如: 在一个表里有 姓名,性别,年龄 等字段 朱茵 女 33 黄贯中 男 41我现在要做的是,在DEPHI界面上 ,一个文本框中 输入 朱茵 的 声母拼音 zy ,就可以定位到 姓名为朱茵这个记录上, 输入 hgz 就定位到 姓名为 黄贯中的 记录上。就是 按 拼音的 开头字母 模糊查询。等ing..............
调试欢乐多
所以在数据库设计的时候,要考虑拼音码字段。将中文转化为拼音码的代码,在CSDN中有,自己找一下就可以了。
function GetEn(CnString: string): string;
function GetEnChar(cnchar: string): char;
begin
case Word(cnchar[1]) shl 8 + Word(cnchar[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..$D1B8: result := 'x';
$D1B9..$D4D0: result := 'y';
$D4D1..$D7F9: result := 'z';
else
result := char(0);
end;
end;
var
i, len: integer;
begin
CnString := StringReplace(CnString, ' ', '', [rfReplaceAll]); //删除空格
len := Length(CnString) - Length(WideString(CnString)); //汉字个数
for i := 1 to len do
result := result + GetEnChar(copy(CnString, 2*i-1, 2));
end;
//例子
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetEn('朱茵'));
end;//然后可以建一张临时表姓名,性别,年龄, 开头字母
朱茵 女 33 zy 黄贯中 男 41 hgz//最后模糊查询就OK了
SELECT 姓名 FROM 临时表 WHERE 开头字母 like ...