Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1224470
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-02-19 17:03:24



三层,先通过clinetdataset从服务器端(中间层)取得数据,修改后提交到服务器端,准备在服务器端写一个更新数据函数,但更新数据需要主键,现在问题是怎么自动得到主键字段名?  
   
  我的想法是:在取得数据的时候就能得到数据库表的主键,这样当数据表结构有改变的时候,也不会出错!   clientdataset能得到主键吗?

当然可以,在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里面接收该信息

另外纠正一点,你这不叫做“无状态对象”,你好好查一下相关资料,弄清楚“无状态对象”是什么意思。你这种情况叫做“动态创建控件对象”。



--------------------------
新闻:专注、极致、快、口碑 互联网创业的葵花宝典
导航:博客园首页  知识库  新闻  招聘  社区  小组  博问  网摘  找找看
阅读(1181) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~