unidac 用TuniQuery控件做数据的插入和更新

首先,uniQuery控件连接一个uniConnection控件,事务属性为默认。用一个表格wwGrid连接uniQuery。

一、插入操作

代码:

try

if not A01F.uniConn_Do.InTransaction then
    A01F.uniConn_Do.StartTransaction;

with uniQ_D11 do

begin

Append;
        FieldByName('D11_1').AsString:=eD11_1.Text;
        FieldByName('D11_2').AsString:=FormatDateTime('yymmdd',date)+FieldByName('B13_2').AsString+format('%.3d',[i]);
        FieldByName('D11_3').AsInteger:=i;
        FieldByName('D11_4').AsString:=eD11_4.Hint;
        FieldByName('D11_5').AsDateTime:=eD11_5.Date;
        FieldByName('D11_6').AsDateTime:=Now;
        FieldByName('D11_8').AsString:=FieldByName('B13_2').AsString;
        FieldByName('D11_10').AsString:=eD11_10.Text;
        FieldByName('D11_22').AsInteger:=StrToInt(eD11_22.Text);
        Post;

end;

A01F.uniConn_Do.Commit;
  except
    on e: Exception do
    begin
      A01F.uniConn_Do.Rollback;
      ShowMessage('新建记录时出错!错误代码:'+#13+e.Message);
      exit;
    end;
  end;

插入操作直接用以上代码基本上没有问题。

二、更新数据

更新数据的操作比较麻烦,我在表格wwGrid中直接修改,一开始老是没有成功。查了几个仅有的资料,才搞定的。

网上资料说,当在wwGrid表格中修改数据时,uniQuery控件会自动调用edit方法。当记录行改变时,会自动调用post方法。所以在代码中就不必去写这两个方法了。

要点是:

1、在设计期设置CachedUpdates属性为True,网上说在运行期设置无效,我没有试过。

2、设置UpdatingTable、KeyFields属性。

3、最后是用ApplyUpdates提交数据。

修改数据前代码:

UpdatingTable:='D11';
    KeyFields:='D11_1,D11_2';

修改数据后代码:

with uniQ_D11 do

  begin

    try
      if not A01F.uniConn_Do.InTransaction then
        A01F.uniConn_Do.StartTransaction;
      ApplyUpdates;
      ShowMessage('数据已经保存!');
    except
      on e: Exception do
      begin
        A01F.uniConn_Do.Rollback;
        ShowMessage('提交参数时出错!错误代码:'+#13+e.Message);
      end;
    end;
  end;

完成这两个操作,参考的资料有:

1、unidac的帮助文件;

2、《UniDac 基础》菜头翻译

3、delphi xe使用unidac中的TUniQuery保存数据报错的解决办法
http://blog.csdn.net/rznice/article/details/7735740

4、uniDAC用法总结

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页