delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
急!三层,先通过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里面接收该信息

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

posted on 2009-02-19 16:54 delphi2007 阅读(291) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。