2013-03-18 56 views
0

你好我今天有代码运行,但问题是,当有相同的数据字段上它不循环,但只显示它过滤的第一个数据。 这里是代码如何在字段中使用相同的数据循环查看表格?

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; 
+0

Locate没有过滤,它正在查找匹配的记录,如果找到并激活此记录,则返回true。 – 2013-03-18 16:32:29

回答

6

Locate定位,在数据集相匹配的指定条件的第一记录。
如果找到记录,则该记录成为活动/当前记录。
它不能用于找到“下一个”匹配。 你可能想使用一个Filter标准与FindFirst/FindNext如:

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.First; 
while not DataSet.Eof do 
begin 
    // do something with the record 
    DataSet.Next; 
end; 
+0

感谢您的帖子科比克,它的工作。对不起,我有一个晚更新,只是忙碌 – 2013-04-21 13:49:31

0

感谢。得到这个代码到目前为止昨晚

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; 

它也许同你给的代码,但对分贝网的每一行的代码搜索,因此各行让我按ok键once.is有可能单击确定一次然后代码将搜索下一个匹配的数据,而不是搜索每一行?

+1

这是不是我发布的相同的代码。你有没有看过我的回答?你试过了吗?你最终的目标是什么? – kobik 2013-03-19 13:02:26

+0

对不起,我昨天忙着工作,现在有机会审查你的帖子对不起,我还没有测试过,但现在会做,谢谢... – 2013-03-21 12:58:46