DataSnap 获取 服务端 的数据 求指教
本帖最后由 thumb0422 于 2013-05-09 20:03:44 编辑 Server
function TServerMethods1.GetByTable(aTable: string): TClientDataSet;
begin
FBCDS.Close;
with FBQUERY do
begin
Close;
sql.Clear;
sql.Add('SELECT * FROM '+aTable+' WHERE 1=1 ');
Open;
end;
FBCDS.Open;
Result := FBCDS;
end;
var acds:TClientDataSet;
begin
acds:=TClientDataSet.Create(nil);
acds:=ServerMethods1.GetByTable('tm_user');
DataSource1.DataSet:=acds;
acds.Open;
end;
function TServerMethods1Client.GetByTable(aTable: string): TClientDataSet;
begin
if FGetByTableCommand = nil then
begin
FGetByTableCommand := FDBXConnection.CreateCommand;
FGetByTableCommand.CommandType := TDBXCommandTypes.DSServerMethod;
FGetByTableCommand.Text := 'TServerMethods1.GetByTable';
FGetByTableCommand.Prepare;
end;
FGetByTableCommand.Parameters[0].Value.SetWideString(aTable);
FGetByTableCommand.ExecuteUpdate;
if not FGetByTableCommand.Parameters[1].Value.IsNull then
begin
FUnMarshal := TDBXClientCommand(FGetByTableCommand.Parameters[1].ConnectionHandler).GetJSONUnMarshaler;
try
Result := TClientDataSet(FUnMarshal.UnMarshal(FGetByTableCommand.Parameters[1].Value.GetJSONValue(True)));
if FInstanceOwner then
FGetByTableCommand.FreeOnExecute(Result);
finally
FreeAndNil(FUnMarshal)
end
end
else
Result := nil;
end;
var aServer:TServerMethods1Client;
acds:TClientDataSet;
begin
aServer:=TServerMethods1Client.Create(DM.ClientCON.DBXConnection);
acds:=TClientDataSet.Create(nil);
acds:=aServer.GetByTable('tm_user') ;
end;
[解决办法]
不要直接传对象啊,传data就行了
function?TServerMethods1.GetByTable(const aTable:?string; var AData : OleVariant):boolean;
begin
FBCDS.Close;
with FBQUERY do
begin
Close;
sql.Clear;
sql.Add('SELECT * FROM '+aTable+' WHERE 1=1 ');
Open;
end;
FBCDS.Open;
AData := FBCDS.Data;
Result := true;
end;
客户端
var
acds:TClientDataSet;
data : olevariant;
begin
acds:=TClientDataSet.Create(self);
if ServerMethods1.GetByTable('tm_user', data) then
begin
acds.data := data;
DataSource1.DataSet:=acds;
end;
end;