2013-02-11 50 views
2

在我的表單中,我有TADOQuery,TDataSetProvider,TClientDataSet,TDataSource,TDBGrid鏈接。如何在SQL Server視圖中使用TClientDataSet? (或替代)

AdoQuery使用SQL Server視圖來查詢數據

AdoQuery.SQL

Select * from vu_Name where fld=:fldval 

Vu_Name:

SELECT * FROM t1 INNER JOIN t2 ON t2.fld1 = t2.fld1 
在我的DBGrid

,僅在t1表列編輯(僅T1需要更新)

什麼是可能的(最快)的方法來申請更新回服務器? ClientDataSet.ApplyUpdates(0); // not working

謝謝。

+0

只是爲了interesst,是否需要TDatasetprovider和TClientdataset或將斷開連接的記錄集也適合你? http://etutorials.org/Programming/mastering+delphi+7/Part+III+Delphi+Database-Oriented+Architectures/Chapter+15+Working+with+ADO/Disconnected+Recordsets/ – bummi 2013-02-11 09:20:32

+0

謝謝。但是當採石場使用關聯多個表來檢索數據時,我認爲這是行不通的。 – 2013-02-13 06:44:39

+0

您可能需要TCustomADODataSet(DataSet).Properties ['Unique Table']。Value:='T1'; – bummi 2013-02-13 06:48:55

回答

3

TDataSetProvider有一個事件OnGetTableName,您應該將TableName參數設置爲t1。因此提供者知道在哪裏存儲改變的值。

您必須確保只更改t1的字段,因爲TDataSetProvider只會更新一個表。當然,您可以爲ApplyUpdates的不同調用使用不同的表名。您可以在DataSet參數中找到更改的字段。

如果你想更新多個表,你必須實現OnUpdateData,它給你所有的責任自由。

+0

It works.Thanks。對於其他人誰都有同樣的問題,這是我做了什麼 * TDatasetprovider.Updatemod = UpWhereKeyOnly * [TAdoQuerryKeyFeald] .providerflag.pfinkey =真 * OnGetTableName事件 \t表名:=」 T1’ ; clientDataset.applyupdates; //工作:) – 2013-02-13 06:40:36