2013-02-11 49 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