首先,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用法总结