请问在数据库中如何用汉字的拼音来查询(100分)

  • 主题发起人 主题发起人 逸飞
  • 开始时间 开始时间

逸飞

Unregistered / Unconfirmed
GUEST, unregistred user!
比如我要找中国人民开头的记录,文本框中输入“zgrm”就在DBGrid中显示中国人民开头的记录。请问我该怎么做。
 
只有自己写程序了,需要把关键字的拼音入库,网上有
不少根据汉字得出首拼音的源程序,可以参考
 
除非你自己建立一个对于的拼音字段,否则你每个慢慢对吧.现在应该还没有数据库可以直接有这样的功能.
 
win98的输入法生成器或者win2000的通用输入法生成器(程序名为imegen.exe,反正在C盘查找即可找到)
得到全拼输入法的编码字典(里面包括有词组的编码)。
一个编码+一个汉字或词组是一行。
可以将此编码文件转换成数据库文件,然后建索引。
用Table和Tquery查找定位即可。

另外,也可以将此编码文件直接读入内存数组中,自己写点代码来查找,现有的输入法就是
这么干的。
 
我建议你去看一下这篇文章
用拼音首字符序列来实现检索功能
http://www.delphibbs.com/delphibbs/dispq.asp?lid=296233
 
如果你不想去我把代码给你
unit uGetpy;

interface

uses
windows,registry,sysutils,dialogs,forms;

function GetPY(HZ:pchar):pchar; stdcall;
function GetPYHead(HZ:pchar):pchar; stdcall;

implementation

const
chinacode:array [0..25,0..1] of integer =((1601,1636),
(1637,1832),(1833,2077),(2078,2273),(2274,2301),(2302,2432),
(2433,2593),(2594,2786),(9999,0000),(2787,3105),(3106,3211),
(3212,3471),(3472,3634),(3635,3722),(3723,3729),(3730,3857),
(3858,4026),(4027,4085),(4086,4389),(4390,4557),(9999,0000),
(9999,0000),(4558,4683),(4684,4924),(4925,5248),(5249,5589));



function GetPY(HZ:pchar):pchar; stdcall;
var
c1,len1,c2 :integer;
ir:word;
FResult,hzs:string;
begin
hzs:=strpas(hz);
FResult:='';
c1:=1;
c2:=0;
len1:=length(HZ);
while (c1<len1) do
begin
if (ord(HZ[c1])>=160) and (ord(HZ[c1+1])>=160) then
begin
ir:=(ord(HZ[c1])-160)*100 +ord(HZ[c1+1])-160;
while (c2<=26) do
begin
if (ir>=chinacode[c2,0]) and (ir<=chinacode[c2,1]) then
begin
FResult:=FResult+chr(c2+ord('a'));
break;

end;
c2:=c2+1;
end; // while
end;
c1:=c1+2;
end; // while
result:=pchar(FResult);
end;


function GetPYHead(HZ:pchar):pchar; stdcall;
var
i:integer;
r,hzs:string;
begin
hzs:=strpas(hz);
r:='';
for I:=0 to length(hz) do
begin
case word(hz[i*2+1]) shl 8 +word(hz[(i+1)*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(0);
end;
r:=r+result;
end;//
result:=pchar(r);
end;





end.
 
接受答案了.
 
后退
顶部