小弟想做一个查询的小程序,想在用户在Edit中输入查询号码后,自动显示纪录,利用的是Table的Filter方法,把不是的纪录过滤掉,采用的是Edit的change事件,但问题出现了。 每次只能将查询号码粘贴入Edit中,从键盘中一个一个键入字符是不行的,而且本程序运行时只能查一条纪录。要查别的只能关闭重新开始程序(主要问题),我想是事件的问题,怎样才能任意此查询内容呢?大家给点意见好么?
这个时editChange的代码Table.Filter := '';
Table.Filtered := False; //重新过滤
Table.Filter := 'NAME='''+Edit.Text+'''';
Table.Filtered := True;
Table.Open;
这个时editChange的代码Table.Filter := '';
Table.Filtered := False; //重新过滤
Table.Filter := 'NAME='''+Edit.Text+'''';
Table.Filtered := True;
Table.Open;
begin
table1.active:=true;
Table.Filtered :=true;
Table.Filter := 'NAME='''+Edit.Text+'''';
end;
你要找的只是一条记录,高效率的方法是:
table1.Locate('Name',edit1.Text,[]);推荐用Query,通过SQL语句查询。
这样,每敲进一个字符,table都会响应的
判断回车时触发
if key = #13
if Length(edit.text)=代码长度 then //代码长度应该是固定数值
begin
Table.Filter := '';
Table.Filtered := False; //重新过滤
Table.Filter := 'NAME='''+Edit.Text+'''';
Table.Filtered := True;
Table.Open;
end;
procedure TForm1.Edit1Change(Sender: TObject);
var
s:string;
begin
s:='select * from country';//country 换成你的Table名
if Length(Trim(Edit1.Text))>0 then
s:=s+' where NAME like '''+Edit1.Text+'%''';
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add(s);
Open;
end;
end;