在 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"。
在服务器端,我使用 FDQuery1
、SringGrid1
、TetheringManager1
和 TetheringAppProfile1
.
从客户端只有 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
中有关传递流的内容
我有服务器和客户端应用程序。
服务器端有 2 个按钮。
第一个按钮 "Display Data On Server"。
第二个按钮 "Send Data to Client"。
在服务器端,我使用 FDQuery1
、SringGrid1
、TetheringManager1
和 TetheringAppProfile1
.
从客户端只有 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
中有关传递流的内容