比如:
数据库中有:王小丫,王小红,王大丫
程序中输入:W的查询结果为:王小丫,王小红,王大丫
X的查询结果为:王小丫,王小红
D的查询结果为:王大丫
WX的查询结果为:王小丫
哪位高手指点一二
23 个解决方案
#1
有一个拼音控件可以实现
我邮箱8091858lin@163.com
我给你发过去
我邮箱8091858lin@163.com
我给你发过去
#2
建议在数据表中增加一个字段, 用于存放姓名字段的音头码, 这样便于查询。
这个音头码字段的值在姓名字段值发生变化时要及时更新。
这个音头码字段的值在姓名字段值发生变化时要及时更新。
#3
这样也不行,不可能在一个一个的输入,这样麻烦
而且楼主要实现的是W的查询结果为:王小丫,王小红,王大丫
X的查询结果为:王小丫,王小红
D的查询结果为:王大丫
WX的查询结果为:王小丫
这样的话,你在一个一个的输入,客户肯定不接受,一个拼音控件就可以了!~
直接转换!~但是也要在数据表中添加字段!~
而且楼主要实现的是W的查询结果为:王小丫,王小红,王大丫
X的查询结果为:王小丫,王小红
D的查询结果为:王大丫
WX的查询结果为:王小丫
这样的话,你在一个一个的输入,客户肯定不接受,一个拼音控件就可以了!~
直接转换!~但是也要在数据表中添加字段!~
#4
OK发过去了!·
#5
你增加一个字段来保存拼音码不就OK了吗?先使用工具生成拼音码保存,然后模糊LIKE查询
#6
同意楼上
#7
晕了根我说的一个道理!~
#8
这样的话,你在一个一个的输入,客户肯定不接受,一个拼音控件就可以了!~
不明白你所说的。
“建议在数据表中增加一个字段, 用于存放姓名字段的音头码, 这样便于查询。
这个音头码字段的值在姓名字段值发生变化时要及时更新。”
你从哪里看出来这个实现办法会要求"一个一个的输入"啊?
不明白你所说的。
“建议在数据表中增加一个字段, 用于存放姓名字段的音头码, 这样便于查询。
这个音头码字段的值在姓名字段值发生变化时要及时更新。”
你从哪里看出来这个实现办法会要求"一个一个的输入"啊?
#9
“建议在数据表中增加一个字段, 用于存放姓名字段的音头码, 这样便于查询。
这个音头码字段的值在姓名字段值发生变化时要及时更新。”
这个上面你没有说用第三方控件,如果不用第三空控件,你如何你实现数据表中存放姓名字段的音头码呢?可能是我理解错了!~
这个音头码字段的值在姓名字段值发生变化时要及时更新。”
这个上面你没有说用第三方控件,如果不用第三空控件,你如何你实现数据表中存放姓名字段的音头码呢?可能是我理解错了!~
#10
只要是汉字的字段都要这么查的,每个字段增加个助记码之类的东西那不是数据两大多了吗?
#11
deansroom(丁樵方玉),我注册帐户的信箱好久没去结果被注销了??
麻烦您发到lfm19821229@163.com好吗?
麻烦您发到lfm19821229@163.com好吗?
#12
我给你的油箱发信了,只要回复就好.呵呵.
#13
弄一个拼音表可以吗,联合查询。
#14
GB2312-80信息交换编码表共收录了汉字和图形符号7445个,将这些汉字和图形符号排列在94行*94列的二维表中,表的行称为区,表的列称为位,区和位构成汉字的区位码。常用汉字位于16-55区,按汉字的拼音顺序排列,计算机处理汉字是以内码的形式表示的,内码和区位码的关系为:汉字内码=汉字区位码+A0A0H
第一个汉字为“啊”,位于16区1位,区位码为0001 0000 0000 0001,内码为1011 0000 1010 0001,以十六进制表示为B0A1H,拼音首字符为A的汉字内码为B0A1H-B0C4H。只要得到汉字的内码,就可以知道其拼音首字符。
下面给一段例子:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, DB, DBTables, Grids, DBGrids;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
DBNavigator1: TDBNavigator;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function GetPY(hzchar:string):char;//返回汉字的拼音首字符
procedure LocatebyPY(t1:Ttable;Fieldname:string;PYstr:string);//检查符合条件的记录
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.GetPY(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';
$B9C1..$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';
$D189..$D4D0 : result:='Y';
$D4D1..$D7F9 : result:='Z';
else
result:=char(0);
end;
end;
procedure TForm1.LocatebyPY(t1:Ttable;Fieldname:string;PYstr:string);
label NotFound;
var
j:integer;
hzchar:string;
hzstr:array[0..100] of char;
begin
while not t1.eof do
begin
strcopy(hzstr,pchar(t1.fieldbyname(fieldname).asstring));
for j:=0 to length(PYstr)-1 do
begin
hzchar:=hzstr[2*j]+hzstr[2*j+1];
if (PYstr[j+1]<>'?')and(uppercase(PYstr[j+1])<>GetPY(hzchar))
then
goto NotFound;
end;
if messageDlg('已经找到,继续查找?',mtConfirmation,[mbYes,mbNo],0)<>mrYes then
exit;
NotFound:
t1.next;
end;
showmessage('查找结束,没有找到!');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
LocateByPY(table1,'SZXB',edit1.text);
end;
end.
第一个汉字为“啊”,位于16区1位,区位码为0001 0000 0000 0001,内码为1011 0000 1010 0001,以十六进制表示为B0A1H,拼音首字符为A的汉字内码为B0A1H-B0C4H。只要得到汉字的内码,就可以知道其拼音首字符。
下面给一段例子:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, DB, DBTables, Grids, DBGrids;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
DBNavigator1: TDBNavigator;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function GetPY(hzchar:string):char;//返回汉字的拼音首字符
procedure LocatebyPY(t1:Ttable;Fieldname:string;PYstr:string);//检查符合条件的记录
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.GetPY(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';
$B9C1..$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';
$D189..$D4D0 : result:='Y';
$D4D1..$D7F9 : result:='Z';
else
result:=char(0);
end;
end;
procedure TForm1.LocatebyPY(t1:Ttable;Fieldname:string;PYstr:string);
label NotFound;
var
j:integer;
hzchar:string;
hzstr:array[0..100] of char;
begin
while not t1.eof do
begin
strcopy(hzstr,pchar(t1.fieldbyname(fieldname).asstring));
for j:=0 to length(PYstr)-1 do
begin
hzchar:=hzstr[2*j]+hzstr[2*j+1];
if (PYstr[j+1]<>'?')and(uppercase(PYstr[j+1])<>GetPY(hzchar))
then
goto NotFound;
end;
if messageDlg('已经找到,继续查找?',mtConfirmation,[mbYes,mbNo],0)<>mrYes then
exit;
NotFound:
t1.next;
end;
showmessage('查找结束,没有找到!');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
LocateByPY(table1,'SZXB',edit1.text);
end;
end.
#15
楼上的方法好象只能查询一个字母.
并且有错误吧.
$CEF4..$D188 : result:='X';
$D189..$D4D0 : result:='Y';
应该是
$CEF4..$D1B8 : result:='X';
$D1B9..$D4D0 : result:='Y';
并且有错误吧.
$CEF4..$D188 : result:='X';
$D189..$D4D0 : result:='Y';
应该是
$CEF4..$D1B8 : result:='X';
$D1B9..$D4D0 : result:='Y';
#16
按区位码区间来查是不好的。只有一级字库是按拼音排序的。
#17
正如ahjoe(强哥)所言,二级字库只能用查表法来获取它们的拼音了。
#18
那段代码可以查询,单个的字母可以,两个就查不准了.
#19
up
#20
这个东西如果要实现你的二级字库查询,只能在数据表多建一个字段,然后才能实现你的功能,我不是给你拼音控件了吗?不会安装????????不会用????
#21
我见过一个模糊拼音查询的,就是:
比如有: 往下压;往下按;往上提 三个记录
你输入 WX
显示:
往下压
往下按
你输入:WXY 就可以准确定位到:
往下压
就是不知道是使用的数据库功能还是控件,等我回去用SPY++看看就知道了
比如有: 往下压;往下按;往上提 三个记录
你输入 WX
显示:
往下压
往下按
你输入:WXY 就可以准确定位到:
往下压
就是不知道是使用的数据库功能还是控件,等我回去用SPY++看看就知道了
#22
deansroom(丁樵方玉),我没收到语音控件,可能是出什么问题了。
lfm19821229@163.com
lfm19821229@163.com
#23
rcyboom(BOOM) ,无论是数据库功能还是控件,能实现输入字母查询就行.
#1
有一个拼音控件可以实现
我邮箱8091858lin@163.com
我给你发过去
我邮箱8091858lin@163.com
我给你发过去
#2
建议在数据表中增加一个字段, 用于存放姓名字段的音头码, 这样便于查询。
这个音头码字段的值在姓名字段值发生变化时要及时更新。
这个音头码字段的值在姓名字段值发生变化时要及时更新。
#3
这样也不行,不可能在一个一个的输入,这样麻烦
而且楼主要实现的是W的查询结果为:王小丫,王小红,王大丫
X的查询结果为:王小丫,王小红
D的查询结果为:王大丫
WX的查询结果为:王小丫
这样的话,你在一个一个的输入,客户肯定不接受,一个拼音控件就可以了!~
直接转换!~但是也要在数据表中添加字段!~
而且楼主要实现的是W的查询结果为:王小丫,王小红,王大丫
X的查询结果为:王小丫,王小红
D的查询结果为:王大丫
WX的查询结果为:王小丫
这样的话,你在一个一个的输入,客户肯定不接受,一个拼音控件就可以了!~
直接转换!~但是也要在数据表中添加字段!~
#4
OK发过去了!·
#5
你增加一个字段来保存拼音码不就OK了吗?先使用工具生成拼音码保存,然后模糊LIKE查询
#6
同意楼上
#7
晕了根我说的一个道理!~
#8
这样的话,你在一个一个的输入,客户肯定不接受,一个拼音控件就可以了!~
不明白你所说的。
“建议在数据表中增加一个字段, 用于存放姓名字段的音头码, 这样便于查询。
这个音头码字段的值在姓名字段值发生变化时要及时更新。”
你从哪里看出来这个实现办法会要求"一个一个的输入"啊?
不明白你所说的。
“建议在数据表中增加一个字段, 用于存放姓名字段的音头码, 这样便于查询。
这个音头码字段的值在姓名字段值发生变化时要及时更新。”
你从哪里看出来这个实现办法会要求"一个一个的输入"啊?
#9
“建议在数据表中增加一个字段, 用于存放姓名字段的音头码, 这样便于查询。
这个音头码字段的值在姓名字段值发生变化时要及时更新。”
这个上面你没有说用第三方控件,如果不用第三空控件,你如何你实现数据表中存放姓名字段的音头码呢?可能是我理解错了!~
这个音头码字段的值在姓名字段值发生变化时要及时更新。”
这个上面你没有说用第三方控件,如果不用第三空控件,你如何你实现数据表中存放姓名字段的音头码呢?可能是我理解错了!~
#10
只要是汉字的字段都要这么查的,每个字段增加个助记码之类的东西那不是数据两大多了吗?
#11
deansroom(丁樵方玉),我注册帐户的信箱好久没去结果被注销了??
麻烦您发到lfm19821229@163.com好吗?
麻烦您发到lfm19821229@163.com好吗?
#12
我给你的油箱发信了,只要回复就好.呵呵.
#13
弄一个拼音表可以吗,联合查询。
#14
GB2312-80信息交换编码表共收录了汉字和图形符号7445个,将这些汉字和图形符号排列在94行*94列的二维表中,表的行称为区,表的列称为位,区和位构成汉字的区位码。常用汉字位于16-55区,按汉字的拼音顺序排列,计算机处理汉字是以内码的形式表示的,内码和区位码的关系为:汉字内码=汉字区位码+A0A0H
第一个汉字为“啊”,位于16区1位,区位码为0001 0000 0000 0001,内码为1011 0000 1010 0001,以十六进制表示为B0A1H,拼音首字符为A的汉字内码为B0A1H-B0C4H。只要得到汉字的内码,就可以知道其拼音首字符。
下面给一段例子:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, DB, DBTables, Grids, DBGrids;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
DBNavigator1: TDBNavigator;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function GetPY(hzchar:string):char;//返回汉字的拼音首字符
procedure LocatebyPY(t1:Ttable;Fieldname:string;PYstr:string);//检查符合条件的记录
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.GetPY(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';
$B9C1..$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';
$D189..$D4D0 : result:='Y';
$D4D1..$D7F9 : result:='Z';
else
result:=char(0);
end;
end;
procedure TForm1.LocatebyPY(t1:Ttable;Fieldname:string;PYstr:string);
label NotFound;
var
j:integer;
hzchar:string;
hzstr:array[0..100] of char;
begin
while not t1.eof do
begin
strcopy(hzstr,pchar(t1.fieldbyname(fieldname).asstring));
for j:=0 to length(PYstr)-1 do
begin
hzchar:=hzstr[2*j]+hzstr[2*j+1];
if (PYstr[j+1]<>'?')and(uppercase(PYstr[j+1])<>GetPY(hzchar))
then
goto NotFound;
end;
if messageDlg('已经找到,继续查找?',mtConfirmation,[mbYes,mbNo],0)<>mrYes then
exit;
NotFound:
t1.next;
end;
showmessage('查找结束,没有找到!');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
LocateByPY(table1,'SZXB',edit1.text);
end;
end.
第一个汉字为“啊”,位于16区1位,区位码为0001 0000 0000 0001,内码为1011 0000 1010 0001,以十六进制表示为B0A1H,拼音首字符为A的汉字内码为B0A1H-B0C4H。只要得到汉字的内码,就可以知道其拼音首字符。
下面给一段例子:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, DB, DBTables, Grids, DBGrids;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
DBNavigator1: TDBNavigator;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function GetPY(hzchar:string):char;//返回汉字的拼音首字符
procedure LocatebyPY(t1:Ttable;Fieldname:string;PYstr:string);//检查符合条件的记录
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.GetPY(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';
$B9C1..$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';
$D189..$D4D0 : result:='Y';
$D4D1..$D7F9 : result:='Z';
else
result:=char(0);
end;
end;
procedure TForm1.LocatebyPY(t1:Ttable;Fieldname:string;PYstr:string);
label NotFound;
var
j:integer;
hzchar:string;
hzstr:array[0..100] of char;
begin
while not t1.eof do
begin
strcopy(hzstr,pchar(t1.fieldbyname(fieldname).asstring));
for j:=0 to length(PYstr)-1 do
begin
hzchar:=hzstr[2*j]+hzstr[2*j+1];
if (PYstr[j+1]<>'?')and(uppercase(PYstr[j+1])<>GetPY(hzchar))
then
goto NotFound;
end;
if messageDlg('已经找到,继续查找?',mtConfirmation,[mbYes,mbNo],0)<>mrYes then
exit;
NotFound:
t1.next;
end;
showmessage('查找结束,没有找到!');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
LocateByPY(table1,'SZXB',edit1.text);
end;
end.
#15
楼上的方法好象只能查询一个字母.
并且有错误吧.
$CEF4..$D188 : result:='X';
$D189..$D4D0 : result:='Y';
应该是
$CEF4..$D1B8 : result:='X';
$D1B9..$D4D0 : result:='Y';
并且有错误吧.
$CEF4..$D188 : result:='X';
$D189..$D4D0 : result:='Y';
应该是
$CEF4..$D1B8 : result:='X';
$D1B9..$D4D0 : result:='Y';
#16
按区位码区间来查是不好的。只有一级字库是按拼音排序的。
#17
正如ahjoe(强哥)所言,二级字库只能用查表法来获取它们的拼音了。
#18
那段代码可以查询,单个的字母可以,两个就查不准了.
#19
up
#20
这个东西如果要实现你的二级字库查询,只能在数据表多建一个字段,然后才能实现你的功能,我不是给你拼音控件了吗?不会安装????????不会用????
#21
我见过一个模糊拼音查询的,就是:
比如有: 往下压;往下按;往上提 三个记录
你输入 WX
显示:
往下压
往下按
你输入:WXY 就可以准确定位到:
往下压
就是不知道是使用的数据库功能还是控件,等我回去用SPY++看看就知道了
比如有: 往下压;往下按;往上提 三个记录
你输入 WX
显示:
往下压
往下按
你输入:WXY 就可以准确定位到:
往下压
就是不知道是使用的数据库功能还是控件,等我回去用SPY++看看就知道了
#22
deansroom(丁樵方玉),我没收到语音控件,可能是出什么问题了。
lfm19821229@163.com
lfm19821229@163.com
#23
rcyboom(BOOM) ,无论是数据库功能还是控件,能实现输入字母查询就行.