全部博文(788)
分类:
2009-02-19 17:03:24
当然可以,在ClientDataSet/DataSetProvider的几个事件里控制着取数据之前,中间层和客户端能够进行信息交流,在事件中有一个核心参数,叫做OwnerData就是干这个的,你需要从服务器端传到客户端什么信息,都可以通过该参数。
但是,你的问题好像还不必这么复杂。因为服务器端的和DataSetProvider控件连接的DataSet控件的字段(TField)的ProviderFlags属性中,如果将主键字段的pfInKey属性设为True,并把Provider的UpdataMode设定为WhereKeyOnly,即可达到用主键定位的效果。
能说详细点吗?在什么事件中?
我用的都是无状态对象,都是临时创建的,怎么写事件呀?
最好不要用临时创建。你为什么非得AQuery:=TQuery.Create(nil)呢?你为什么不大大方方的把一个Query控件放到DataModule上面呢?这样做不是自己给自己找麻烦吗?
ClientDataSet的BeforeGetRecords
在DataSetProvider的BeforeGetRecords事件里面接收。BeforeGetRecords是对服务器端的Query初始化用的。而AfterGetRecords就是你想要的事件。在DataSetProvider的该事件中打包要告诉客户端的信息,而在ClientDataSet的AfterGetRecords里面接收该信息
另外纠正一点,你这不叫做“无状态对象”,你好好查一下相关资料,弄清楚“无状态对象”是什么意思。你这种情况叫做“动态创建控件对象”。