关于网友提出的“Delphi的FireDAC在Datasnap的数据更新问题”问题疑问,本网通过在网上对“Delphi的FireDAC在Datasnap的数据更新问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:Delphi的FireDAC在Datasnap的数据更新问题
描述:
FireDACDataSnapApplyUpdate
已经建立好DataSnap服务端,使用FireDAC做数据库连接及数据操作。查询数据没有问题,就是数据更新,一筹莫展。在网上查了很多,都没用。目前就是想知道如何从客户端传入一个数据包Tdataset到服务器,进行数据库对应表的数据更新!
我的代码如下:
1.服务器端:
function TFSMethods.DoUpdate(sTable,sKeys:string; sDataSet:TDataSet):string;
var
fFDQry : TFDQuery;
begin
Result := 'Failure';
fFDQry := TFDQuery.Create(nil);
if not FDConn.Connected then FDConn.Connected := True;
fFDQry.Connection := FDConn;
fFDQry.Close;
fFDQry.CachedUpdates := True;
fFDQry.UpdateOptions.KeyFields := sKeys;
fFDQry.UpdateOptions.UpdateTableName := sTable;
fFDQry.Close;
fFDQry.SQL.Text := 'select * from '+sTable+' where 1=0';
try
try
FDConn.StartTransaction;
fFDQry.Data := TFDQuery(sDataSet).Data;
fFDQry.ResourceOptions.StoreItems := [siMeta,siDelta,siData];
fFDQry.ApplyUpdates();
FDConn.Commit;
Result := 'Success';
except
on e : Exception do
begin
FDConn.Rollback;
Result := 'Failure:'+e.Message;
end;
end;
finally
FreeAndNil(fFDQry);
FDConn.Connected := False;
end;
end;
2.客户端调用:
function DoUpdate(ATable,AKey: string; FDMTable: TFDMemTable):Boolean;
var
fMessage:string;
begin
Result := False;
try
try
FDSCon.Connected := True;
FDSProc.Close;
FDSProc.Unprepare;
FDSProc.StoredProcName := 'TFSMethods.DoUpdate';
FDSProc.Prepare;
FDSProc.Params[0].Value := ATable;
FDSProc.Params[1].Value := AKey;
//FDMTable.ResourceOptions.StoreItems := [siData,siMeta,siDelta];
FDSProc.Params[2].SetDataSet(FDMTable,True,0);
FDSProc.Execute;
FDMTable.CommitUpdates;
FDMTable.Refresh;
fMessage := FDSProc.Params[3].AsString;
if fMessage='Success' then
Result := True
else
begin
Result := False;
MsgInfo.ShowError('更新失败!'+fMessage,ErrTitle);
end;
except
on e : Exception do
begin
MsgInfo.ShowError('更新失败!'+e.Message,ErrTitle);
Result := False;
end;
end;
finally
FDSProc.Close;
FDSProc.StoredProcName := '';
FDSCon.Connected := False;
end;
end;
编译没有问题,但是执行时出现"Parameter not set for column number 2",那意思没有设置第3个参数(参数的Index=2)。
所以请教这个参数该如何设置?
谢谢!
以上介绍了“Delphi的FireDAC在Datasnap的数据更新问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1145433.html