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;

  • 相关阅读:
    MarkDown学习
    做网站的或者博客的网站
    Calendar日历简单用法
    Cron表达式范例
    CSVFileUtil 读取写入CSV文件简单工具类
    直接读取ZIP包数据 线上、线下方法
    Spring @Async/@Transactional 失效的原因及解决方案
    多线程学习 读写锁
    多线程学习 公平锁和非公平锁
    多线程学习 ThreadLocal的使用。
  • 原文地址:https://www.cnblogs.com/GarfieldTom/p/3198250.html
Copyright © 2011-2022 走看看