2013-03-18 20 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

相關問題