在 Delphi XE 中使用 App tethering 在客户端分页服务器端数据

Paging Server Side Data On Client in Delphi XE using App tethering

我有服务器和客户端应用程序。

服务器端有 2 个按钮。

第一个按钮 "Display Data On Server"。 第二个按钮 "Send Data to Client"。 在服务器端,我使用 FDQuery1SringGrid1TetheringManager1TetheringAppProfile1.

从客户端只有 1 个按钮 "Connect"。 在客户端,我使用 StringGrid1、TetheringManager1 和 TetheringAppProfile1

所以首先客户端连接到服务器然后服务器端向客户端发送数据。

服务器"Send Data to Client"按钮

代码:

procedure TForm1.Button2Click(Sender: TObject);
var rec:integer;
begin
  FDQuery1.SQL.Text := 'SELECT * FROM names';
  FDQuery1.Open;
  rec := FDQuery1.RecordCount;
  FDQuery1.First;

  if rec>0 then
  begin
    while not FDQuery1.Eof do
    begin
      TetheringAppProfile1.Resources.FindByName('Vefa').Value:=FDQuery1.FieldByName('Name').AsString;
      FDQuery1.Next;
    end;
  end;

客户端接收

代码:

procedure TForm2.TetheringAppProfile1Resources1ResourceReceived(
  const Sender: TObject; const AResource: TRemoteResource);
var i:integer;
begin
  for i := 0 to TetheringAppProfile1.Resources.Count do
    StringGrid1.Cells[1,i]:=AResource.Value.AsString;
end;

但是当我将数据从服务器发送到客户端时,我看到的是这样的:

您可以将名称收集到 TStringList 中,然后使用 TStringList.Text 属性 作为字符串或作为流发送。

要作为字符串发送(并假设资源名称 = NameList),SendDataClick 事件处理程序可能如下所示:

procedure TServerForm.btnSendDataClick(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Add(StringGrid1.Cells[1, 1]);
    sl.Add(StringGrid1.Cells[1, 2]);
    sl.Add(StringGrid1.Cells[1, 3]);
    TetheringAppProfile1.Resources.FindByName('NameList').Value := sl.Text;
  finally
    sl.Free;
  end;
end;

我只是从网格中复制了名字,你可以直接从数据库记录中复制。

和客户端OnResourceReceived

procedure TClientForm.TetheringAppProfile1Resources2ResourceReceived(
  const Sender: TObject; const AResource: TRemoteResource);
var
  sl: TStringList;
  i: integer;
begin
  sl := TStringList.Create;
  try
    sl.Text := AResource.Value.AsString;
    for i := 0 to sl.Count-1 do
      StringGrid1.Cells[1, i+1] := sl[i];
  finally
    sl.Free;
  end;
end;

我建议您也阅读 Malcolm Groves blog

中有关传递流的内容