zoukankan      html  css  js  c++  java
  • DataSnap使用UniDac处理自增长字段

    原来使用ado来访问数据库,用在DataSnap中也很方便。后来便一直使用UniDac,可发现UniDac如果用在DataSnap中要比ado麻烦很多,尤其对自增长字段、缺省值的处理上,感觉对DataSnap支持不好(普通C/S应用还是非常好的)。

    在Unidac官网上看到一个关于处理DataSnap中的AutoInc字段问题,记录在下面,我没有验证。

    I use DataSnap delphi 2010.

    UniQuery Component DMLRefresh Can fetch autoinc value,

    but I cannot use it with datasnap.

    I use Follow Code.

    procedure TForm.dspDataAfterUpdateRecord(Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind); begin if UpdateKind = ukInsert then quData.Fields[0].NewValue := GetLastID; end;

    GetLastID function is fetch autoinc value.

    the code works grate with DBExpress. But not UniDac.

    Answer:

    To solve this problem, it's needed to set the following options:
    Code: Select all
    TDataSetProvider.ResolveToDataSet := True;
    TUniQuery.RequiredFields := False;
    TUniQuery.SetFieldsReadOnly := False;In this case UniDAC will generate the SQL code, and the identity field value will be set automatically to the TUniQuery component. To update the identity field value in the TClientDataSet, component it's needed to use the following code:
    Code: Select all
    procedure TForm1.DataSetProvider1AfterUpdateRecord(Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind);
    begin
      if UpdateKind = ukInsert then
        DeltaDS.Fields[0].NewValue := UniQuery1.Fields[0].AsInteger;
    end;

  • 相关阅读:
    【Java基础】多态
    inner join / left join / right join
    Java并发之AQS详解
    AQS实现公平锁和非公平锁
    进程与线程区别是什么
    【java设计模式】代理模式
    Spring中用到的设计模式
    【Java设计模式】工厂模式
    前端开发 —— 本地化
    前端开发 —— Blade 模板引擎
  • 原文地址:https://www.cnblogs.com/GarfieldTom/p/3198250.html
Copyright © 2011-2022 走看看