您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Delphi >> Delphi的FireDAC在Datasnap的数据更新问题

Delphi的FireDAC在Datasnap的数据更新问题

来源:网络整理     时间:2016/5/18 1:04:14     关键词:

关于网友提出的“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

相关图片

相关文章