可以封装它TDataSetProvider

xiaoxiao2021-02-28  59



1. Option属性

Provider控件的Options属性值是一个集合,用于设置有关打包和传递的选项,像显示哪些字段、允许哪种更新方式等等。

1.1. poFetchBlobsOnDemand:若包含此项,则表示数据包中不包括BLOB字段。不过,如果客户端的TclientDataSet控件的FetchOnDemand属性设为True,那么客户端还是能自动地请求这些数据值;否则,客户端应用程序必须使用客户数据集的FetchBlobs方法来检索BOLB数据。

1.2.poFetchDetailsOnDemand:当用嵌套表的方式处理Master/Detail关系时,这里的Provider表示主/明细表中的主表。若包含此项,则Detail表中的字段将不会放入包中。不过,如果客户端的TclientDataSet控件的FetchOnDemand属性为True;那么客户端还是能自动的请求这些数据;否则,要显式调用FetchDetails方法。

1.3. poIncFieldProps:若包含此项,则表示数据包中将包含下列字段属性:AlignmentMinValueDisplayLabelDisplayWidthVisibleDidplayFormatMaxValueEditFormatCurrencyEditMaskDisplayValues等。

1.4.  poCascadeDeletes:当用嵌套表的方式处理Master/Detail关系时,这里的Provider表示主/明细表中的主表。若包含此项,则当主表中的记录被删除时,明细表中相应的记录将自动地被删除。

注意,要使用这个选项,数据库服务器需要建立参照完整性:也就是,在数据库中对主细表建立主外键关系,并在关系页选中级联更新相关字段级联删除相关记录

1.5. poCascadeUpdates:当用嵌套表的方式处理Master/Detail关系时,这里的Provider表示主/明细表中的主表。若包含此项,则当主表中主键字段的值改变时,明细表中相应的记录将自动地被更新。

注意:要使用这个选项,数据库服务器需要建立参照完整性。

1.6. poReadOnly:若包含此项,则表示不允许客户端数据集向Provider申请更新数据。

1.7.poAllowMultiRecordUpdates:表示一个单一的更新将同时更新关联的许多表的记录,这有可能是通过触发、参照完整性或自定义的SQL语句来实现的。

1.8. poDisableEdits:若包含此项,则表示不允许客户端更新已经存在的数据值,否则,将触发异常。

1.9. poDisableInserts:若包含此项,则表示不允许客户端插入一个新的记录,否则,将触发异常。

1.10. poNoReset:若包含此项,则表示在提供数据前,不允许客户端将光标指定在第一条记录。

11. poAutoRefresh:若包含此项,则表示Provider将用当前的记录刷新客户端的数据集,而不管它是否已经申请更新。(这个功能好像并没有实现)

1.12. poPropogateChanges:若包含此项,则表示服务器对记录的更新将返回给客户端并反映到客户端数据集中。

1.13. poAllowCommandText:若包含此项,则表示客户端可以重载相关数据集的SQL语句、表的名字或存储过程。

1.14. poDisableDeletes:若包含此项,则表示不允许客户端删除记录,否则,将触发异常。

1.15. poRetainServerOrder:若包含此项,客户客户端不能对服务端已排序的数据重新排序。

1.16. poUseQuoteChar:

2. UpdateMode属性

2.1 upWhereAll   限制最严,但可以最大程度地保证记录的一致性。如果两个用户编辑同一条记录,第一个用户能够更新记录,而第二个用户将会收到另一个用户已经修改了这条记录的报错信息。如果希望改进执行这种检查的字段,可以去掉相应的TField.ProviderFlags属性中的pfInWhere项。

2.2 upWhereChanged   实际上允许两个用户同时编辑一条记录;在两个用户编辑同一条记录的不同字段时,不会检查出冲突。例如,如果用户A修改Address字段并更新了记录,那么用户B仍然能够修改BirthDate字段并成功地更新记录。

2.3 upWhereKeyOnly   限制最宽。只要是记录存在于数据库中,每个用户都可以进行修改并更新。这样,后面的修改总是覆盖前面的修改。

转载请注明原文地址: https://www.6miu.com/read-2622765.html

最新回复(0)