巨难问题:如何客户的ClientDataSet不使用服务端的DataSetProvider更新数据 ?(200分)

  • 主题发起人 主题发起人 北丐洪七
  • 开始时间 开始时间

北丐洪七

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是我的写的程序,在远程数据模块中声明了一个SaveData方法,要求客户端传送ClientDataSet里的Data和Delat给服务器。
服务端执行Provider.ApplyUpdates,但总是出现SQL Server错误。大家给看看!!
客户端调用程序
procedure TFmClientMain.Button2Click(Sender: TObject);
var
AParam,AData : OleVariant;
AMsg : widestring;
begin
if not Mandm.SckConn.Connected then
Mandm.SckConn.Connected := true;
if ClientDataSet1.State = dsBrowse then
Mandm.SckConn.AppServer.saveData('BP_Area',AParam,ClientDataSet1.Data,
ClientDataSet1.delta,AMsg);
end;
服务端程序
function THebSteelRemoteDm.SaveData(const ABillName: WideString;
AParam: OleVariant;
var AData: OleVariant;
var ADelta: OleVariant;
var AMsg: WideString): WordBool;
var
OutErr : integer;
StrSQL : string;
begin
StrSQL := GetSQLFromAParam(ABillName,AParam);
AppSqlBase.Active := false;
AppSqlBase.SQL.Text := StrSql;
AppSqlBase.Active := true;
//上面代码为设置一个Query
try
AppCdsBase.Active := false;
//服务端的ClientDataSet
AppCdsBase.data := AData;
AppCdsBase.Active := true;
AppDspBase.ApplyUpdates(ADelta,-1,OutErr,AData);//Provider
AMsg := '提交数据完成,保存成功!!!';
Result := true;
except
AMsg := '写入数据库错误!!!';
Result := false;
end;
end;
服务端执行AppDspBase.ApplyUpdates(ADelta,-1,OutErr,AData);//Provider时报SQL Server错误。不能更新Delta中数据到数据库。
 
AParam没有初始值?
另外,在测试阶段最好不注释掉try..except,让错误回传到客户端,这样会有利于错误分析
 
你把参数的位置调整一下,OleVariant类型的参数调到最后,我记得delphi好像有bug的,如果用sc远程调用的话,OleVariant参数一定要在最后的
(const ABillName: WideString;
var AMsg: WideString;
AParam: OleVariant;
var AData: OleVariant;
var ADelta: OleVariant
): WordBool;
 
using:
ClientDataSet..ApplyUpdates(-1).......
 
后退
顶部