Fórum datasnap retornando array json #489364
19/08/2014
0
pessoal preciso de ajuda, renho o seguinte metodo no meu servidor datasnap
function TServerMethods1.GetClientesServer(var msgRet:string; nomeVend:string; datHoraUltAtualizacao:string;
cod_vend:Integer = 0): TJSONArray;
var
myCli: TClientes;
con:TConexao;
dbCon:TFDConnection;
qrCli:TFDQuery;
begin
SaveLog('Vendedror '+nomeVend+' solicitou atualizacao de Clientes');
Result := TJSONArray.Create;
con:=TConexao.Create();
myCli:=TClientes.Create();
qrCli:=TFDQuery.Create(nil);
try
try
dbCon:=con.Conectar(dbCon);
qrCli.Connection:=dbCon;
qrCli:=myCli.GetCli(qrCli, StrToDateTime(datHoraUltAtualizacao), cod_vend);
while not qrCli.Eof do
begin
myCli.codigo :=qrCli.Fields.Fields[0].AsInteger;
myCli.nome :=qrCli.Fields.Fields[1].AsString;
myCli.endereco:=qrCli.Fields.Fields[2].AsString;
myCli.cidade :=qrCli.Fields.Fields[3].AsString;
myCli.bairro :=qrCli.Fields.Fields[4].AsString;
myCli.cep :=qrCli.Fields.Fields[5].AsString;
myCli.uf :=qrCli.Fields.Fields[6].AsString;
myCli.cpf :=qrCli.Fields.Fields[7].AsString;
myCli.fone :=qrCli.Fields.Fields[8].AsString;
myCli.celular :=qrCli.Fields.Fields[9].AsString;
myCli.cod_repr:=qrCli.Fields.Fields[10].AsInteger;
myCli.dt_nasc :=qrCli.Fields.Fields[11].AsDateTime;
myCli.lim_credto:=qrCli.Fields.Fields[12].AsFloat;
myCli.insc_est:=qrCli.Fields.Fields[13].AsString;
myCli.dt_cad :=qrCli.Fields.Fields[14].AsDateTime;
myCli.nome_fant:=qrCli.Fields.Fields[15].AsString;
myCli.compr :=qrCli.Fields.Fields[16].AsString;
myCli.fone_compr:=qrCli.Fields.Fields[17].AsString;
myCli.obs :=qrCli.Fields.Fields[18].AsString;
myCli.e_mail :=qrCli.Fields.Fields[19].AsString;
myCli.hp :=qrCli.Fields.Fields[20].AsString;
myCli.cond_pgto:=qrCli.Fields.Fields[21].AsString;
myCli.anotacoes:=qrCli.Fields.Fields[22].AsString;
myCli.tipo:=qrCli.Fields.Fields[23].AsString;
myCli.icms:=qrCli.Fields.Fields[24].AsString;
myCli.cr:=qrCli.Fields.Fields[25].AsString;
myCli.cod_regiao:=qrCli.Fields.Fields[26].AsInteger;
myCli.regiao:=qrCli.Fields.Fields[27].AsString;
myCli.obs2:=qrCli.Fields.Fields[28].AsString;
myCli.obs3:=qrCli.Fields.Fields[29].AsString;
myCli.obs4:=qrCli.Fields.Fields[30].AsString;
myCli.codigo_reg:=qrCli.Fields.Fields[31].AsInteger;
myCli.simples:=qrCli.Fields.Fields[32].AsString;
myCli.email_nfe:=qrCli.Fields.Fields[33].AsString;
myCli.suframa:=qrCli.Fields.Fields[34].AsString;
myCli.rota:=qrCli.Fields.Fields[35].AsInteger;
myCli.variacao:=qrCli.Fields.Fields[36].AsFloat;
myCli.revenda:=qrCli.Fields.Fields[37].AsBoolean;
//adiciona ao array / converte o objeto pra json
Result.AddElement(myCli.ObjectToJSON<TClientes>(myCli));
qrCli.Next;
end;
msgRet:='';
con.Desconectar(dbCon);
except
on E:Exception do
begin
msgRet:='Erro ao carregar clientes '+e.Message;
SaveLog('Erro ao carregar clientes '+e.Message);
con.Desconectar(dbCon);
end;
end;
finally
dbCon.Free;
con.Free;
myCli.Free;
end;
end;
porem nao sei se estou fazendo da forma correta pois meu servidor (que por sinal é uma maquina muito boa)
esta travando ao chamar este metodo
pois nao vi uma outra forma sem ser com um while pra popular o objeto cliente e ir adicionando ao array
qundo pego poucos clientes bls funciona
mas acontece que as vezes precisarei atualizar todos os clientes e hoje a tabela contem quase 20.000 registros e aia esta travando
preciso urgente de alguma sugestao
quem puder colaborar agradeco
function TServerMethods1.GetClientesServer(var msgRet:string; nomeVend:string; datHoraUltAtualizacao:string;
cod_vend:Integer = 0): TJSONArray;
var
myCli: TClientes;
con:TConexao;
dbCon:TFDConnection;
qrCli:TFDQuery;
begin
SaveLog('Vendedror '+nomeVend+' solicitou atualizacao de Clientes');
Result := TJSONArray.Create;
con:=TConexao.Create();
myCli:=TClientes.Create();
qrCli:=TFDQuery.Create(nil);
try
try
dbCon:=con.Conectar(dbCon);
qrCli.Connection:=dbCon;
qrCli:=myCli.GetCli(qrCli, StrToDateTime(datHoraUltAtualizacao), cod_vend);
while not qrCli.Eof do
begin
myCli.codigo :=qrCli.Fields.Fields[0].AsInteger;
myCli.nome :=qrCli.Fields.Fields[1].AsString;
myCli.endereco:=qrCli.Fields.Fields[2].AsString;
myCli.cidade :=qrCli.Fields.Fields[3].AsString;
myCli.bairro :=qrCli.Fields.Fields[4].AsString;
myCli.cep :=qrCli.Fields.Fields[5].AsString;
myCli.uf :=qrCli.Fields.Fields[6].AsString;
myCli.cpf :=qrCli.Fields.Fields[7].AsString;
myCli.fone :=qrCli.Fields.Fields[8].AsString;
myCli.celular :=qrCli.Fields.Fields[9].AsString;
myCli.cod_repr:=qrCli.Fields.Fields[10].AsInteger;
myCli.dt_nasc :=qrCli.Fields.Fields[11].AsDateTime;
myCli.lim_credto:=qrCli.Fields.Fields[12].AsFloat;
myCli.insc_est:=qrCli.Fields.Fields[13].AsString;
myCli.dt_cad :=qrCli.Fields.Fields[14].AsDateTime;
myCli.nome_fant:=qrCli.Fields.Fields[15].AsString;
myCli.compr :=qrCli.Fields.Fields[16].AsString;
myCli.fone_compr:=qrCli.Fields.Fields[17].AsString;
myCli.obs :=qrCli.Fields.Fields[18].AsString;
myCli.e_mail :=qrCli.Fields.Fields[19].AsString;
myCli.hp :=qrCli.Fields.Fields[20].AsString;
myCli.cond_pgto:=qrCli.Fields.Fields[21].AsString;
myCli.anotacoes:=qrCli.Fields.Fields[22].AsString;
myCli.tipo:=qrCli.Fields.Fields[23].AsString;
myCli.icms:=qrCli.Fields.Fields[24].AsString;
myCli.cr:=qrCli.Fields.Fields[25].AsString;
myCli.cod_regiao:=qrCli.Fields.Fields[26].AsInteger;
myCli.regiao:=qrCli.Fields.Fields[27].AsString;
myCli.obs2:=qrCli.Fields.Fields[28].AsString;
myCli.obs3:=qrCli.Fields.Fields[29].AsString;
myCli.obs4:=qrCli.Fields.Fields[30].AsString;
myCli.codigo_reg:=qrCli.Fields.Fields[31].AsInteger;
myCli.simples:=qrCli.Fields.Fields[32].AsString;
myCli.email_nfe:=qrCli.Fields.Fields[33].AsString;
myCli.suframa:=qrCli.Fields.Fields[34].AsString;
myCli.rota:=qrCli.Fields.Fields[35].AsInteger;
myCli.variacao:=qrCli.Fields.Fields[36].AsFloat;
myCli.revenda:=qrCli.Fields.Fields[37].AsBoolean;
//adiciona ao array / converte o objeto pra json
Result.AddElement(myCli.ObjectToJSON<TClientes>(myCli));
qrCli.Next;
end;
msgRet:='';
con.Desconectar(dbCon);
except
on E:Exception do
begin
msgRet:='Erro ao carregar clientes '+e.Message;
SaveLog('Erro ao carregar clientes '+e.Message);
con.Desconectar(dbCon);
end;
end;
finally
dbCon.Free;
con.Free;
myCli.Free;
end;
end;
porem nao sei se estou fazendo da forma correta pois meu servidor (que por sinal é uma maquina muito boa)
esta travando ao chamar este metodo
pois nao vi uma outra forma sem ser com um while pra popular o objeto cliente e ir adicionando ao array
qundo pego poucos clientes bls funciona
mas acontece que as vezes precisarei atualizar todos os clientes e hoje a tabela contem quase 20.000 registros e aia esta travando
preciso urgente de alguma sugestao
quem puder colaborar agradeco
Volmir Santos
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)