Fórum Erro DataSnap Rest #559775
01/08/2016
0
Estou com um problema com meu servidor datasnap.
Tenho um Banco de Dados na Nuvem que esta ligado diretamente ao servidor datasnap, esta funcionando bem. Agora preciso popular este banco mas esta dando erro. o código que estou usando é este.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
No server:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function TSrvMethods.GetGSIEmpresa(cCodEmpresa: string = ''): TFDJSONDataSets;
var
cSQL: string;
begin
cSQL := 'SELECT * FROM GSIEMPRESA ';
if (cCodEmpresa <> '') then
cSQL := cSQL + 'WHERE (CODEMPRESA = '+ cCodEmpresa +')';
qrGSIEmpresa.Active := False;
qrGSIEmpresa.SQL.Clear;
qrGSIEmpresa.SQL.Add(cSQL);
Result := TFDJSONDataSets.Create;
TFDJSONDataSetsWriter.ListAdd(Result, qrGSIEmpresa);
end;
procedure TSrvMethods.AtualizaGSIEmpresa(const ADeltaList: TFDJSONDeltas);
var
cAtualiza: IFDJSONDeltasApplyUpdates;
begin
cAtualiza := TFDJSONDeltasApplyUpdates.Create(ADeltaList);
cAtualiza.ApplyUpdates(sGSIEmpresa, qrGSIEmpresa.Command);
if cAtualiza.Errors.Count = 0 then
cAtualiza.ApplyUpdates(sGSIEmpresa, qrGSIEmpresa.Command);
if cAtualiza.Errors.Count > 0 then
raise Exception.Create(cAtualiza.Errors.Strings.Text);
end;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
No Client:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
procedure TdmUpPedOnLine.ProcessarGSIEmpresa;
var
GSIEmpresaList: TFDJSONDataSets;
begin
qrUpGSIEmpresa.Close;
qrUpGSIEmpresa.Open();
while not qrUpGSIEmpresa.Eof do
begin
try
GSIEmpresaList := cmPedidoOnLine.SrvMethodsClient.GetGSIEmpresa(qrUpGSIEmpresaCodEmpresa.AsString);
UpdateGSIEmpresa(GSIEmpresaList);
except
on E: TDSRestProtocolException do
HandleRestException(cmPedidoOnLine.dsrConexao, 'Get GSIEmpresa erro', E)
else
raise;
end;
// fazer as alterações/ inclusões/ exclusões
if (qrUpGSIEmpresaOperacao.Value = 'D') and (not fdmmGSIEmpresa.IsEmpty) then
fdmmGSIEmpresa.Delete
else
AlteraIncluiGSIEmpresa;
try
ApplyUpdatesGSIEmpresa;
if not ExcluirGSIEmpresaFila then
GravaLogErro('Erro ao excluir a sequência ' + qrUpGSIEmpresaSequencia.AsString + ' da fila de GSIEmpresa!');
finally
end;
qrUpGSIEmpresa.Next;
end;
end;
na hora que ele executa a função “ApplyUpdatesGSIEmpresa”que faz referencia com a função do servidor “AtualizaGSIEmpresa”.
Tenho que me conectar ao Banco na Nuvem, Carregar esses dados, e Conectar a Base Local e Comparar, se na tabela local estiver diferente da Nuvem, atualizar os dados. Alguém ja passou por isso? e Qual a solução?
Tenho um Banco de Dados na Nuvem que esta ligado diretamente ao servidor datasnap, esta funcionando bem. Agora preciso popular este banco mas esta dando erro. o código que estou usando é este.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
No server:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function TSrvMethods.GetGSIEmpresa(cCodEmpresa: string = ''): TFDJSONDataSets;
var
cSQL: string;
begin
cSQL := 'SELECT * FROM GSIEMPRESA ';
if (cCodEmpresa <> '') then
cSQL := cSQL + 'WHERE (CODEMPRESA = '+ cCodEmpresa +')';
qrGSIEmpresa.Active := False;
qrGSIEmpresa.SQL.Clear;
qrGSIEmpresa.SQL.Add(cSQL);
Result := TFDJSONDataSets.Create;
TFDJSONDataSetsWriter.ListAdd(Result, qrGSIEmpresa);
end;
procedure TSrvMethods.AtualizaGSIEmpresa(const ADeltaList: TFDJSONDeltas);
var
cAtualiza: IFDJSONDeltasApplyUpdates;
begin
cAtualiza := TFDJSONDeltasApplyUpdates.Create(ADeltaList);
cAtualiza.ApplyUpdates(sGSIEmpresa, qrGSIEmpresa.Command);
if cAtualiza.Errors.Count = 0 then
cAtualiza.ApplyUpdates(sGSIEmpresa, qrGSIEmpresa.Command);
if cAtualiza.Errors.Count > 0 then
raise Exception.Create(cAtualiza.Errors.Strings.Text);
end;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
No Client:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
procedure TdmUpPedOnLine.ProcessarGSIEmpresa;
var
GSIEmpresaList: TFDJSONDataSets;
begin
qrUpGSIEmpresa.Close;
qrUpGSIEmpresa.Open();
while not qrUpGSIEmpresa.Eof do
begin
try
GSIEmpresaList := cmPedidoOnLine.SrvMethodsClient.GetGSIEmpresa(qrUpGSIEmpresaCodEmpresa.AsString);
UpdateGSIEmpresa(GSIEmpresaList);
except
on E: TDSRestProtocolException do
HandleRestException(cmPedidoOnLine.dsrConexao, 'Get GSIEmpresa erro', E)
else
raise;
end;
// fazer as alterações/ inclusões/ exclusões
if (qrUpGSIEmpresaOperacao.Value = 'D') and (not fdmmGSIEmpresa.IsEmpty) then
fdmmGSIEmpresa.Delete
else
AlteraIncluiGSIEmpresa;
try
ApplyUpdatesGSIEmpresa;
if not ExcluirGSIEmpresaFila then
GravaLogErro('Erro ao excluir a sequência ' + qrUpGSIEmpresaSequencia.AsString + ' da fila de GSIEmpresa!');
finally
end;
qrUpGSIEmpresa.Next;
end;
end;
na hora que ele executa a função “ApplyUpdatesGSIEmpresa”que faz referencia com a função do servidor “AtualizaGSIEmpresa”.
Tenho que me conectar ao Banco na Nuvem, Carregar esses dados, e Conectar a Base Local e Comparar, se na tabela local estiver diferente da Nuvem, atualizar os dados. Alguém ja passou por isso? e Qual a solução?
Jacques Silva
Curtir tópico
+ 0
Responder
Posts
02/08/2016
Natanael Ferreira
Qual a mensagem de erro?
Responder
Gostei + 0
03/08/2016
Jacques Silva
Imagem de Erro
if FAtualizaGSIEmpresaCommand = nil then
begin
FAtualizaGSIEmpresaCommand := FConnection.CreateCommand;
FAtualizaGSIEmpresaCommand.RequestType := ''POST'';
FAtualizaGSIEmpresaCommand.Text := ''TSrvMethods."AtualizaGSIEmpresa"'';
FAtualizaGSIEmpresaCommand.Prepare(TSrvMethods_AtualizaGSIEmpresa);
end;
if not Assigned(ADeltaList) then
FAtualizaGSIEmpresaCommand.Parameters[0].Value.SetNull
else
begin
FMarshal := TDSRestCommand(FAtualizaGSIEmpresaCommand.Parameters[0].ConnectionHandler).GetJSONMarshaler;
try
FAtualizaGSIEmpresaCommand.Parameters[0].Value.SetJSONValue(FMarshal.Marshal(ADeltaList), True);
if FInstanceOwner then
ADeltaList.Free
finally
FreeAndNil(FMarshal)
end
end;
FAtualizaGSIEmpresaCommand.Execute;
O erro ocorre na última linha.
if FAtualizaGSIEmpresaCommand = nil then
begin
FAtualizaGSIEmpresaCommand := FConnection.CreateCommand;
FAtualizaGSIEmpresaCommand.RequestType := ''POST'';
FAtualizaGSIEmpresaCommand.Text := ''TSrvMethods."AtualizaGSIEmpresa"'';
FAtualizaGSIEmpresaCommand.Prepare(TSrvMethods_AtualizaGSIEmpresa);
end;
if not Assigned(ADeltaList) then
FAtualizaGSIEmpresaCommand.Parameters[0].Value.SetNull
else
begin
FMarshal := TDSRestCommand(FAtualizaGSIEmpresaCommand.Parameters[0].ConnectionHandler).GetJSONMarshaler;
try
FAtualizaGSIEmpresaCommand.Parameters[0].Value.SetJSONValue(FMarshal.Marshal(ADeltaList), True);
if FInstanceOwner then
ADeltaList.Free
finally
FreeAndNil(FMarshal)
end
end;
FAtualizaGSIEmpresaCommand.Execute;
O erro ocorre na última linha.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)