Erro DataSnap Rest
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
Curtidas 0
Respostas
Natanael Ferreira
01/08/2016
Qual a mensagem de erro?
GOSTEI 0
Jacques Silva
01/08/2016
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.
GOSTEI 0