如何在DataSnap项目组中从服务器返回值到客户端

发布于 2025-01-21 04:06:01 字数 2207 浏览 0 评论 0原文

我编写 datasnap 应用程序。我应该知道服务器上最后上传的记录的 ID,然后使用 clientdataset 组件从本地数据库上传新记录。

我不明白这段代码的含义,Parameters[0].Value、Parameters[1].Value 是什么以及它如何正确更改以便从服务器返回结果:

FSelectCountryCommand.Parameters[0].Value.SetInt32();
FSelectCountryCommand.ExecuteUpdate;
Result := FSelectCountryCommand.Parameters[1].Value.GetInt32;

如果我手动写入随机整数值,

 result:=10;  //FSelectCountryCommand.Parameters[1].Value.GetInt32;

例如它工作正常并在 ClientFormUnit 中返回该值。

我的最终目标是从服务器返回结果值(maxcountry_id)到ClientForm单元的buttonclick过程

在服务器上查询:

select max(country_id) as maxcountry_id from country

ClientForm单元:

   procedure Tclient.buttonCountryClick(Sender: TObject);
    var c:integer;
    begin
     c:=Clientmodule1.ServerMethods1Client.SelectCountry;
    
     Clientmodule1.lqCountry.close;
     Clientmodule1.lqCountry.Params[0].AsInteger:= c;
     Clientmodule1.lqCountry.close;
    end;

ClientClassesUnit:

 function TServerMethods1Client.SelectCountry:Integer;
  begin
   if FSelectCountryCommand = nil then
    begin
     FSelectCountryCommand := FDBXConnection.CreateCommand;
     FSelectCountryCommand.CommandType := 
                   TDBXCommandTypes.DSServerMethod;
     FSelectCountryCommand.Text := 'TServerMethods1.SelectCountry';
     FSelectCountryCommand.Prepare;
     end;
       
  FSelectCountryCommand.Parameters[0].Value.SetInt32();
  FSelectCountryCommand.ExecuteUpdate;
  Result := FSelectCountryCommand.Parameters[1].Value.GetInt32;
  end;

ServerMethodUnit:

 function TServerMethods1.SelectCountry:Integer;
    begin
     qCountry.close;
     qCountry.Open;
     Result:= qCountryMaxCountry_id.AsInteger;
    end;

我尝试使用全局变量但没有成功:它仅在项目区域中可见,而在项目组区域中看不到。

解决方案

此代码工作正常:

FSelectCountryCommand.ExecuteUpdate;
Result := FSelectCountryCommand.Parameters[0].Value.GetInt32;

据我了解,由于选择查询不包含参数,因此此运算符:

FSelectCountryCommand.Parameters[0].Value.SetInt32();

是多余的。

I write datasnap application. I should know id of last uploaded record on server and after that upload new records from local db using cliendataset component.

I don't realise meaning of this code, what are there Parameters[0].Value, Parameters[1].Value and how it change correctly in order to return result from server:

FSelectCountryCommand.Parameters[0].Value.SetInt32();
FSelectCountryCommand.ExecuteUpdate;
Result := FSelectCountryCommand.Parameters[1].Value.GetInt32;

if I write manually random integer value, for example

 result:=10;  //FSelectCountryCommand.Parameters[1].Value.GetInt32;

then it works correctly and returns this value in ClientFormUnit.

My final goal is return result value(maxcountry_id) from Server to buttonclick procedure of ClientForm unit

Query on server:

select max(country_id) as maxcountry_id from country

ClientForm unit:

   procedure Tclient.buttonCountryClick(Sender: TObject);
    var c:integer;
    begin
     c:=Clientmodule1.ServerMethods1Client.SelectCountry;
    
     Clientmodule1.lqCountry.close;
     Clientmodule1.lqCountry.Params[0].AsInteger:= c;
     Clientmodule1.lqCountry.close;
    end;

ClientClassesUnit:

 function TServerMethods1Client.SelectCountry:Integer;
  begin
   if FSelectCountryCommand = nil then
    begin
     FSelectCountryCommand := FDBXConnection.CreateCommand;
     FSelectCountryCommand.CommandType := 
                   TDBXCommandTypes.DSServerMethod;
     FSelectCountryCommand.Text := 'TServerMethods1.SelectCountry';
     FSelectCountryCommand.Prepare;
     end;
       
  FSelectCountryCommand.Parameters[0].Value.SetInt32();
  FSelectCountryCommand.ExecuteUpdate;
  Result := FSelectCountryCommand.Parameters[1].Value.GetInt32;
  end;

ServerMethodUnit:

 function TServerMethods1.SelectCountry:Integer;
    begin
     qCountry.close;
     qCountry.Open;
     Result:= qCountryMaxCountry_id.AsInteger;
    end;

I tried use global variable but without success: it is seen only in project area, not in project group area.

SOLUTION

this code works fine:

FSelectCountryCommand.ExecuteUpdate;
Result := FSelectCountryCommand.Parameters[0].Value.GetInt32;

As I understand, as select query doesn't contain parameters therefore this operator:

FSelectCountryCommand.Parameters[0].Value.SetInt32();

is redundant.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文