急!三层,先通过clinetdataset从服务器端取得数据,修改后提交到服务器端,准备在服务器端写一个更新数据函数,但更新数据需要主键,现...

急!三层,先通过clinetdataset从服务器端取得数据,修改后提交到服务器端,准备在服务器端写一个更新数据函数,但更新数据需要主键,现 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061218091417246.html
三层,先通过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里面接收该信息

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

转载于:https://www.cnblogs.com/delphi2007/archive/2009/02/19/1394148.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值