输入首字母就能查询数据库中汉字字段值的代码,该如何处理

输入首字母就能查询数据库中汉字字段值的代码
数据库中有个汉字的姓名字段,如何编写一段代码实现输入首字母就能查询的功能?
比如:
数据库中有:王小丫,王小红,王大丫
程序中输入:W的查询结果为:王小丫,王小红,王大丫
                      X的查询结果为:王小丫,王小红
                      D的查询结果为:王大丫
                      WX的查询结果为:王小丫
哪位高手指点一二

------解决方案--------------------
有一个拼音控件可以实现
我邮箱8091858lin@163.com
我给你发过去
------解决方案--------------------
建议在数据表中增加一个字段, 用于存放姓名字段的音头码, 这样便于查询。
这个音头码字段的值在姓名字段值发生变化时要及时更新。
------解决方案--------------------
这样也不行,不可能在一个一个的输入,这样麻烦
而且楼主要实现的是W的查询结果为:王小丫,王小红,王大丫
X的查询结果为:王小丫,王小红
D的查询结果为:王大丫
WX的查询结果为:王小丫
这样的话,你在一个一个的输入,客户肯定不接受,一个拼音控件就可以了!~
直接转换!~但是也要在数据表中添加字段!~
------解决方案--------------------
OK发过去了!·
------解决方案--------------------
你增加一个字段来保存拼音码不就OK了吗?先使用工具生成拼音码保存,然后模糊LIKE查询
------解决方案--------------------
同意楼上
------解决方案--------------------
晕了根我说的一个道理!~
------解决方案--------------------
这样的话,你在一个一个的输入,客户肯定不接受,一个拼音控件就可以了!~

不明白你所说的。

“建议在数据表中增加一个字段, 用于存放姓名字段的音头码, 这样便于查询。
这个音头码字段的值在姓名字段值发生变化时要及时更新。”

你从哪里看出来这个实现办法会要求 "一个一个的输入 "啊?
------解决方案--------------------
“建议在数据表中增加一个字段, 用于存放姓名字段的音头码, 这样便于查询。
这个音头码字段的值在姓名字段值发生变化时要及时更新。”

这个上面你没有说用第三方控件,如果不用第三空控件,你如何你实现数据表中存放姓名字段的音头码呢?可能是我理解错了!~
------解决方案--------------------
弄一个拼音表可以吗,联合查询。
------解决方案--------------------
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 ';