Fórum Retornar TClientDataSet.data via http.get no delphi 2010 #386391
15/09/2010
0
Parceiros,
preciso fazer algumas consultas dinâmicas na aplicação cliente mas não desejo utilizar o dbexpress.
Utilizando Rest eu consigo integrar as aplicações de diferentes linguagens mas não estou conseguindo passar o conteúdo "Data" do clientdataset via JSON.
Função do servidor:
classe TDataCds
type
TDataCds = class(TDTOPadrao)
private
FID: Variant;
published
property Id: Variant read FID write FID;
end;
function TServerMethods.RetornaOleVariant(pSQL: string): TJSONArray;
var DSP:TDataSetProvider;
CDS:TClientDataSet;
obj:TDataCds;
begin
Query := TZQuery.Create(nil);
DSP := TDataSetProvider.Create(nil);
CDS := TClientDataSet.Create(nil);
try
Query.Connection := ServerContainer.ZConn;
Query.SQL.Text := 'select * from tb_grupo_produto';//pSQL;
DSP.DataSet := Query;
CDS.SetProvider(DSP);
result := TJSONArray.Create;
try
CDS.Open;
obj := TDataCds.Create;
obj.Id := CDS.Data;
result.AddElement(obj.ObjectToJSON<TDataCds>(obj));
obj.Free;
except
result := nil;
end;
finally
CDS.Close;
CDS.free;
DSP.free;
Query.Free;
end;
end;
no cliente ...
function RetornaOleVariant(pSQL:string):OleVariant;
var
dataStream: TStringStream;
jObj: TJSONObject;
jPair: TJSONPair;
jItems: TJSONArray;
jItem: TJSONValue;
i: Integer;
obj:TDataCds;
begin
try
dataStream := TStringStream.Create;
DMCliente.http.Get(DMCliente.url+'TServerMethods/RetornaOleVariant/'+
pSQL, dataStream);
jObj := TJSONObject.Create;
jObj.Parse(dataStream.Bytes, 0);
jPair := jObj.Get(0);
jItems := TJSONArray(TJSONArray(jPair.JsonValue).Get(0));
For i := 0 to jItems.Size - 1 do
begin
jItem := jItems.Get(i);
obj := TDataCds.JSONToObject<TDataCds>(jItem);
result := obj.Id;
end;
finally
dataStream.Free;
jObj.Free;
end;
end;
quando uso a função a propriedade 'ID' fica igual a '1'
Minha idéia é utilizar essa propriedade e atribuir a um clientdataset.data de consulta.
Alguém sabe como resolver isso?
preciso fazer algumas consultas dinâmicas na aplicação cliente mas não desejo utilizar o dbexpress.
Utilizando Rest eu consigo integrar as aplicações de diferentes linguagens mas não estou conseguindo passar o conteúdo "Data" do clientdataset via JSON.
Função do servidor:
classe TDataCds
type
TDataCds = class(TDTOPadrao)
private
FID: Variant;
published
property Id: Variant read FID write FID;
end;
function TServerMethods.RetornaOleVariant(pSQL: string): TJSONArray;
var DSP:TDataSetProvider;
CDS:TClientDataSet;
obj:TDataCds;
begin
Query := TZQuery.Create(nil);
DSP := TDataSetProvider.Create(nil);
CDS := TClientDataSet.Create(nil);
try
Query.Connection := ServerContainer.ZConn;
Query.SQL.Text := 'select * from tb_grupo_produto';//pSQL;
DSP.DataSet := Query;
CDS.SetProvider(DSP);
result := TJSONArray.Create;
try
CDS.Open;
obj := TDataCds.Create;
obj.Id := CDS.Data;
result.AddElement(obj.ObjectToJSON<TDataCds>(obj));
obj.Free;
except
result := nil;
end;
finally
CDS.Close;
CDS.free;
DSP.free;
Query.Free;
end;
end;
no cliente ...
function RetornaOleVariant(pSQL:string):OleVariant;
var
dataStream: TStringStream;
jObj: TJSONObject;
jPair: TJSONPair;
jItems: TJSONArray;
jItem: TJSONValue;
i: Integer;
obj:TDataCds;
begin
try
dataStream := TStringStream.Create;
DMCliente.http.Get(DMCliente.url+'TServerMethods/RetornaOleVariant/'+
pSQL, dataStream);
jObj := TJSONObject.Create;
jObj.Parse(dataStream.Bytes, 0);
jPair := jObj.Get(0);
jItems := TJSONArray(TJSONArray(jPair.JsonValue).Get(0));
For i := 0 to jItems.Size - 1 do
begin
jItem := jItems.Get(i);
obj := TDataCds.JSONToObject<TDataCds>(jItem);
result := obj.Id;
end;
finally
dataStream.Free;
jObj.Free;
end;
end;
quando uso a função a propriedade 'ID' fica igual a '1'
Minha idéia é utilizar essa propriedade e atribuir a um clientdataset.data de consulta.
Alguém sabe como resolver isso?
Vórtice-ti
Curtir tópico
+ 0
Responder
Posts
21/09/2010
Vórtice-ti
Alguém sabe como resolver isso?
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)