Delphi三层主从表设置.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delphi三层主从表设置

Delphi三层主从表设置 三层中主从表的操作(删除、新增、修改)一定要在一个事物中完成,那在Delphi中的事物又如何控制呢?我们在开发客户端时,如果为了在一个事物中而用TSqlConnection的事物来控制是徒劳的,没有一点意义,因为真正事物控制是在服务端的TDataSetProvider中产生的,它是自动产生事物的,如果有错误产生,它会回滚事物。 当客户端的ClientdataSet把Delta数据提交给远程的DataSetProvider时,这个DataSetProvider会解析这个语句,并且会自动产生一个事物,所以我们不必要写事物控制,当然用函数时而不用DataSetProvider是另外一个话题。 如果我们直接在远程端设置二个TDataSetProvider,客户端也放两个对就的ClientDataSet,并把客户端的两个数据集设置成主从可以吗? 我的回答是:绝对不可以。为什么?因为你在更新数据时是在两个DataSetProvider中产生二个不同的事物,这样的话就不能保证数据更新的完整性。 Delphi为我们提供的机制是在服务端设置好主从结构,而从表数据集变为主表的一个字段,这样当客户端连接远程的TDataSetProvider时,只把客户端主表数据控件连接到DataSetProvider就可以,从表只要设置一下DataSetField为客户端主表中那个数据集字段就可以了。当保存数据时,只用客户端主表的ApplyUpdata就可以保存主从表数据(可以有多个从表)。更新时就把主从表相关改动的数据传到远程 的DataSetProvider中,些时DataSetProvider可以开启一个事物,这样就能保证数据的完整性。 以下我详细说一下开发主从表的实例: 我用的数据集是:,(用 库中的orders和order detail表做实例) 一.开发服务端 1. 放上连接数据库的控件: 2. 放上主表数据集改为名称 是,设置它的sql语句为:Select * From Orders 3. 放上主表数据集对应的DataSource,更名为,设置这个数据源是为了让从表和它关联 4. 放上从表数据集改为名称,设置它的Sql语句为:Select * from [Order Detail] where orderid=:A(这个形参可以随意设置) 5.设置的为。这样就构成了主从关系结构。 6.在的AfterScroll事件中对Detail中的参数A赋值 procedure TForm1.AfterScroll(DataSet: TDataSet); begin adq2.Params[0].Value:=DataSet.FieldByName(orderid).AsInteger; end; 7.放入名为的DataSetProvider控件,设置其DataSet为,并设置ResloveToDataSet为Ture,为Ture表示数据的处理交由和DataSetProvider的数据集来处理,可以处理多表的数据,为False表示产生的数据是由DataSetProvider的内置Sql分析器来处理 ,但不能处理多表数据。 二,客户端设置(为了简便测试,故把服务端和客户端放在同一界面,所以不再设置ClientDataSet的RemoteServer属性) 1.放入名为Main的ClientdataSet控件。 2.设置ClientDataSet的ProviderName为服务端的. 3.在上打开字段属性编辑器,并在编辑器中加入服务器端语句产生的字段 下图为Main上的字段,你会发现有一个Detail的字段,它就是从表数据集,做为一个主表的字段了 4.再加入一个名为的ClientDataSet控件,它就是在客户端的从表数据集控件。 5. 设置的DataSetField为,这是可选的,即它的数据是从数据集的字段中得到的,其它的都不用设置。 如下图 6.分别放两个DataSource和DBgrid,并分别连接到和数据集和DBGrid中,这样就可以显示数据。 此时,我们就设置好了主从关系,你可以放上一些按钮Open.代码为:.Open.你就会发现当客户端主表开启时,从表也跟着开启 如下图 你可以更改、删除、新增了。当然你要控制一下自增主键,这个不再多说。 还有一个发现的情况是服务端数据子表的ObjectView属性,当设置Detail的ObjectView为True时,则子表的 SQL语句中不用参数,如:Select?? * from [Order Detail]即可,当然那个主表数据集Master的AfterScroll中的代码就不用要了,其它都不要改变,这样的话也可以和 上面一样的操作。这个属性现在还不知是什么东东

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档