在数据库开发中,有时候需要通过用户ID对用户查找,不过由于ID不好用,人们一般采取要求用户输入用户名,但用程序转化为ID。我想采取这样一种策略:在下拉列表框中,输入人名简写比如名称中各个字的开头字母,然后下拉框中显示出对应此简称的用户的相应信息,在用户选择后,把被选择用户的ID返回。
我想通过改进下拉列表框来实现,不过具体怎么做,还不清楚,大家能否给些建议?
我想通过改进下拉列表框来实现,不过具体怎么做,还不清楚,大家能否给些建议?
解决方案 »
- 100求助,用shellexecute打开photoshop以后,如何向这个PS发送一个快键键的命令?比如说发送一个ctrl+f9的命令?
- 大伙来说说delphi都用什么来制做的安装程序!
- 报表的基本制作方法,请大家推荐电子书
- 哪位大侠帮小弟一把
- RAVE的问题,请帮忙!150分都没人回答呀!
- 根据'..实现远程备份与恢复'这文章,俺做有错,请大侠帮忙,在线等待~!
- 请问报表中怎样压缩重复列,即某一字段内容相同的记录,只显示第一条数据,后面为空,谢谢!
- 哪位大虾对用友的情况比较了解,如工资、福利、工作时长。。。。
- 在delphi程序中怎样成批的插入数据?
- 请教,嵌套数据集是怎么回事,该怎么用?
- help me!我的语句sql语法错在那里(ACCESS)?
- ?疑惑 ?SOS
MyADODataSet: TADODataSet; MyFieldName: String);//刷新ComboBox里的内容(从数据
集里取)
begin
if MyADODataSet.Active then
MyADODataSet.Close;
MyADODataSet.Active:= true; MyComboBox.Clear;
MyADODataSet.First;
While not MyADODataSet.Eof do
begin
MyComboBox.Items.Add(MyADODataSet.FieldValues[MyFieldName]);
MyADODataSet.Next;
end;
end;在窗体OnShow的时候初始化一下
UpdateComboBox(ComboBox1, 数据集名称(TADODataSet), 字段名);procedure TMainForm.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
TFlatComboBox(Sender).DroppedDown:= true;
end;
不过,我感觉大家没有完全明白我的意思。我创建了一张person表,用于存储用户信息,其中与此问题相关的有3个字段:用户名,用户ID,用户名简拼。当然,一个简拼有可能对应多个用户,所以我这么设计:让用户输入用户名简拼,然后出来一个窗口,里面显示对应此用户简拼的所有用户信息,然后让使用者选择,在使用者选择后,把被选用户的ID记录下来!
你用的是Delphi6吗?我在delphi6的控件集里,没有找到你所说的DevExpress控件,你能说的具体点吗?
然后控制ComboBox的输入长度为姓名的缩写的最大长度,并且只能输入字母,也就是姓名的简写。然后在过滤出来的表中检索,得到对应名字的ID;建议建一个全局变量
var
XMSX:string;
用来存放缩写已用来下次找ID时使用具体如下:
//在ComboBox中添加姓名
procedure TForm1.ComboBox4DropDown(Sender: TObject);
var
XM:string;
i,j:integer;
begin
ComboBox4.Items.Clear;
j:=length(Trim(ComboBox4.Text));
XM:=Trim(ComboBox4.Text);
XMSX:=XM;
if j<>0 then
with Query_Name do
begin
Close;
SQL.Clear;
SQL.Add('Select * from Name where 缩写:=Sx');
ParamByName('Sx').AsString:=XM;
Open;
First;
while not Eof do
begin
ComboBox4.Items.Add(FieldByName('姓名').AsString);
Next;
end;
Close;
end;
end;
//检索ID在ComboBox的Select事件中写
procedure TForm1.ComboBox4Select(Sender: TObject);
var
IDofYours:String;
begin
with Query_Name do
begin
Close;
SQL.Clear;
SQL.Add('Select * from Name where 缩写:=Sx');
ParamByName('Sx').AsString:=XM;
Open;
Locate('姓名',ComboBox4.text,[loCaseInsensitive]);
IDofYours:=FieldByName('ID').AsString;
Close;
end;
end;IDofYours便是每个姓名所对应的用户号码;在Select事件中,也可以选取所有的记录,然后使用Locate()函数定位。在ComboBox的OnPress事件中限制只能输入字母或者可以删除已有的字母:
同时为了控制姓名的简写全为大写或者小写,可以设置ComboBox的CharCase为
ecLowerCase或者是ecUpperCase;
procedure TForm_1.ComboBox4KeyPress(Sender: TObject; var Key: Char);
begin
if (not(key in ['A'..'Z']))and(not (key in ['a'..'z']))and(not(key=#8))then
key:=#0;
end;