我用的DLEPHI6+ado+access ,在表单上做了一个按钮,点击按钮实现查询功能,该按钮代码如下:(编译的时候提示[Error] dengjika.pas(108): Undeclared identifier: 'Findkey‘) 望各位大虾给出解决办法。
procedure TF_dengjika.queryClick(Sender: TObject);
begin
ADOTable1.IndexFieldNames:='姓名';
if length(DBEdit1.Text)=0 then
begin
messagedlg('请输入姓名!',mterror,[mbok],0);
end
else
if ADOTable1.Findkey([DBEdit1.Text]) then //该行有问题
begin
DBEdit2.Text:=adotable1.fieldbyname('性别');
DBEdit3.Text:=adotable1.fieldbyname('出生年月').AsString;
DBEdit4.Text:=adotable1.fieldbyneme('文化程度');
DBEdit5.Text:=adotable1.fieldbyneme('参加工作时间').AsString;
DBEdit6.Text:=adotable1.fieldbyneme('连续工龄');
DBEdit7.Text:=adotable1.fieldbyneme('家庭地址');
DBEdit8.Text:=adotable1.fieldbyneme('失业原因');
DBEdit9.Text:=adotable1.fieldbyneme('失业时间').AsString;
DBEdit10.Text:=adotable1.fieldbyneme('应发月数');
DBEdit11.Text:=adotable1.fieldbyneme('从').AsString;
DBEdit12.Text:=adotable1.fieldbyneme('至').AsString;
DBEdit13.Text:=adotable1.fieldbyneme('实发月数');
DBEdit14.Text:=adotable1.fieldbyneme('原工作单位');
DBEdit15.Text:=adotable1.fieldbyneme('编号');
end
else
begin
messagedlg('输入的姓名不存在',mterror,[mbok],0);
DBEdit1.Text:='';
end;
end;
procedure TF_dengjika.queryClick(Sender: TObject);
begin
ADOTable1.IndexFieldNames:='姓名';
if length(DBEdit1.Text)=0 then
begin
messagedlg('请输入姓名!',mterror,[mbok],0);
end
else
if ADOTable1.Findkey([DBEdit1.Text]) then //该行有问题
begin
DBEdit2.Text:=adotable1.fieldbyname('性别');
DBEdit3.Text:=adotable1.fieldbyname('出生年月').AsString;
DBEdit4.Text:=adotable1.fieldbyneme('文化程度');
DBEdit5.Text:=adotable1.fieldbyneme('参加工作时间').AsString;
DBEdit6.Text:=adotable1.fieldbyneme('连续工龄');
DBEdit7.Text:=adotable1.fieldbyneme('家庭地址');
DBEdit8.Text:=adotable1.fieldbyneme('失业原因');
DBEdit9.Text:=adotable1.fieldbyneme('失业时间').AsString;
DBEdit10.Text:=adotable1.fieldbyneme('应发月数');
DBEdit11.Text:=adotable1.fieldbyneme('从').AsString;
DBEdit12.Text:=adotable1.fieldbyneme('至').AsString;
DBEdit13.Text:=adotable1.fieldbyneme('实发月数');
DBEdit14.Text:=adotable1.fieldbyneme('原工作单位');
DBEdit15.Text:=adotable1.fieldbyneme('编号');
end
else
begin
messagedlg('输入的姓名不存在',mterror,[mbok],0);
DBEdit1.Text:='';
end;
end;
if ADOTable1.locate('姓名',DBEdit1.Text,[]) then
begin
Edit8.Text:=DBLookupComboBox1.Text;
end;),我把那个查询按钮改成如下这段代码,结果第一次点此按钮,可正常查询,再点此按钮,就不能查询到其他记录了,每次都说“没有符合条件的记录”,再查第一次查询的那条记录,又能查到,是怎么回事?
if length(Edit5.Text)=0 then
messagedlg('请输入单位全称!',mterror,[mbok],0)
else
if length(edit8.Text)=0 then
messagedlg('请选择填表日期!',mterror,[mbok],0)
else
ADOTable1.close;
ADOTable1.open;
if ADOTable1.locate('全称;填表日期',vararrayof([Edit5.Text,
Edit8.Text]),[]) then
begin
Edit1.Text:=adotable1.fieldbyname('单位类型').asstring;
Edit2.Text:=adotable1.fieldbyname('征收机构').asstring;
Edit3.Text:=adotable1.fieldbyname('法定代表人').AsString;
Edit4.Text:=adotable1.fieldbyname('代码').AsString;
Edit5.Text:=adotable1.fieldbyname('全称').AsString;
Edit6.Text:=adotable1.fieldbyname('职工总数').AsString;
Edit7.Text:=adotable1.fieldbyname('开户银行').AsString;
Edit8.Text:=adotable1.fieldbyname('填表日期').AsString;
Edit9.Text:=adotable1.fieldbyname('年工资总额').AsString;
Edit10.Text:=adotable1.fieldbyname('缴费方式').AsString;
Edit11.Text:=adotable1.fieldbyname('帐号').AsString;
Edit12.Text:=adotable1.fieldbyname('贷款所属日期从').AsString;
Edit13.Text:=adotable1.fieldbyname('贷款所属日期至').AsString;
Edit14.Text:=adotable1.fieldbyname('贷款限缴日期从').AsString;
Edit15.Text:=adotable1.fieldbyname('贷款限缴日期至').AsString;
end
else
begin
messagedlg('没有符合条件的记录',mterror,[mbok],0);
Edit1.text:='';
Edit2.text:='';
Edit3.text:='';
Edit4.text:='';
Edit5.text:='';
Edit6.text:='';
Edit7.text:='';
Edit8.text:='';
Edit9.text:='';
Edit10.text:='';
Edit11.text:='';
Edit12.text:='';
Edit13.text:='';
Edit14.text:='';
Edit15.text:='';
end;
str:=str+' and sex='+quotedstr(edit2.text);adoquery1.close;
adoquery1.sql.clear;
adoqeury1.sql.add(str);
adoquery1.open;
if DBEdit1.Text=ADOTable2.FieldValues['姓名'] then
.
.
.
这样应该没有问题辣
不过locate效率满低的,会把table中所有的数据下载到当地
现在我想实现通过两个字段的值查询符合的记录,比如我想通过单位全称和该单位缴费的日期查询符合的记录,请问怎么实现?
if ADOTable1.locate('全称;填表日期',vararrayof([Edit5.Text,
Edit8.Text]),[]) then我是这样做的,但是每次查询都说没有符合的记录,为什么?
应该没有问题了吧