你好,我有这段代码今天运行,但问题是,当有相同的数据字段不循环,但只是显示它过滤的第一个数据。下面是代码
ADOTable1.First;
if ADOTable1.Locate('Last', Edit1.Text, []) then
begin
Label1.Caption := ADOTable1.FieldByName('Last').AsString;
Label2.Caption := ADOTable1.FieldByName('First').AsString;
Label3.Caption := ADOTable1.FieldByName('address').AsString;
Next;
end
else
begin
Label1.Caption := '';
Label2.Caption := '';
Label3.Caption := '';
end;
Locate
定位到DataSet中符合指定条件的第一条记录。
如果找到一条记录,该记录将成为活动/当前记录。
它不能用于定位"下一个"匹配。您可能希望对FindFirst
/FindNext
使用Filter
标准,例如:
DataSet.Filter := 'Last = ''' + Edit1.Text + '''';
if DataSet.FindFirst then
begin
ShowMessage('Found First!');
while DataSet.FindNext do
begin
ShowMessage('Found Next!');
end;
end;
如果您想要过滤所有符合您的条件的记录,只需使用:
DataSet.Filter := 'Last = ''' + Edit1.Text + '''';
DataSet.Filtered := True; // apply filter for the dataset
现在只有那些符合过滤器条件的记录在DataSet中可用。
然后迭代DataSet:
DataSet.First;
while not DataSet.Eof do
begin
// do something with the record
DataSet.Next;
end;
谢谢。昨晚得到了这个代码
procedure TMain.Button1Click(Sender: TObject);
begin
ADOTable1.First;
while not ADOTable1.EOF do
begin
if (ADOTable1.FieldByName('Last Name').AsString = edit1.Text)
then begin
Label1.Caption := ADOTable1.FieldByName('Last Name').AsString;
Label2.Caption := ADOTable1.FieldByName('First Name').AsString;
Label3.Caption := ADOTable1.FieldByName('MI').AsString;
end;
ShowMessage('click ok for next profile');
ADOTable1.Next;
end;
它可能与您给出的代码相同,但此代码搜索db网格上的每一行,因此每行使我按下ok按钮一次。是否有可能点击确定一旦然后代码将搜索下一个匹配的数据,而不是它搜索每一行?