2017-08-31 58 views
0

我想製作兩個數據集,DS1DS2,同時滾動。這些實際上是在具有不同字段的同一張表上查詢的結果。第一個用於用戶界面,有很多計算字段,第二個是一個簡單的可編輯數據集,只有很少的數據字段。我希望兩個數據集都具有相同的活動記錄ID。所以,因爲我假設DS1記錄集是DS2的子集,我只需撥打DS2.Locate,DS2.AfterScroll即可。但是我的假設在技術上可能會被違反(由於配置錯誤)。所以我想在DS2沒有相應的記錄時中止DS1的滾動過程。通過滾動過程,我的意思是更改活動記錄DS1並解僱DS1.AfterScroll是否有可能找到CustomADODataSet即將滾動到的記錄?

+0

您是否試過讓DS2使用與DS1相同的ADO RecordSet對象? – MartynA

+0

@MartynA不,實際上我並不熟悉這個技巧。 – saastn

+0

@saastn你的意思是如果record1中的DS1 DS2也應該在record1中? – Sami

回答

1

下面應該做我理解你的意思,換句話說DS2的活動記錄跟蹤DS1的活動記錄。該示例使用Sql Server的MS演示pubs數據庫的 authors表。理想情況下,它會有一個整數主鍵ID列,但不幸的是authors沒有。

TForm1 = class(TForm) 
    ADOConnection1: TADOConnection; 
    DS1: TADOQuery; 
    DS2: TADOQuery; 
    DataSource1: TDataSource; 
    DataSource2: TDataSource; 
    DBGrid1: TDBGrid; 
    DBGrid2: TDBGrid; 
    DBNavigator1: TDBNavigator; 
    DBNavigator2: TDBNavigator; 
    procedure DS1AfterScroll(DataSet: TDataSet); 
    procedure FormCreate(Sender: TObject); 
protected 
    DS2au_id, 
    DS2au_lname, 
    DS2au_fname : TStringField; 
public 
end; 

[...] 

procedure TForm1.DS1AfterScroll(DataSet: TDataSet); 
begin 
    if DS2.Active then 
    DS2.Locate('au_ID', DS1.FieldByName('au_ID').AsString, []); 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    DS1.SQL.Text := 'select * from authors'; 
    DS2.SQL.Text := 'select au_id, au_name, au_fname from authors'; 
    DS1.Open; 

    DS2au_id := TStringField.Create(Self); 
    DS2au_id.FieldName := 'au_ID'; 
    DS2au_id.Size := 11; 
    DS2au_id.DataSet := DS2; 


    DS2au_lname := TStringField.Create(Self); 
    DS2au_lname.FieldName := 'au_lname'; 
    DS2au_lname.Size := 40; 
    DS2au_lname.DataSet := DS2; 


    DS2au_lname := TStringField.Create(Self); 
    DS2au_lname.FieldName := 'au_fname'; 
    DS2au_lname.Size := 20; 
    DS2au_lname.DataSet := DS2; 

    DS2.Recordset := DS1.Recordset; 
end; 

如果你做這種方式,回答您的問與答

是否有可能發現CustomADODataSet即將滾動到記錄?

是你不需要。

+0

嗯,這是一個有趣的技術,但並沒有解決我的問題。我真的需要使用兩個獨立的數據集。但在你的解決方案中,兩個數據集都有相同數量的記錄,'DS2'只能有'DS1'中存在的字段。即使沒有DS2.SQL.Text:= ...行,你的代碼行爲也是一樣的。 – saastn

相關問題