DATASNAP + FDConnection + TFDQuery + ClientDataSet

17/09/2016

0

Boa tarde a todos,



Estou migrando minha aplicação delphi para servidor DATASNAP, POSTGRES, estou com um problema no cliente altero a informação e dou um
ClientDataSet1.Post;
ClientDataSet1.ApplyUpdates(0);

Vejo que a informação alterada chega no lado do servidor só que não grava no banco de dados.

Alguém poderia me ajudar por favor.


Obrigado
Amaro Loch

Amaro Loch

Responder

Post mais votado

17/09/2016

já fiz isso, no evento

procedure TServerMethods1.DSPessoaBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind;
var Applied: Boolean);
begin
form2.label1.Text:=DeltaDS.FieldByName('nmpessoa').NewValue;

end;

pesso para ele mostrar o novo valor ele mostrar correto e não retorna erro.

Amaro Loch

Amaro Loch
Responder

Mais Posts

17/09/2016

Kellson

verifique se nas opçoes da sua query nao esta marcado cacheupdates, ou tambem se nao esta faltando apenas um commit. Nao sei no PG, mas no firebird tem que executar uma comando para efetivar a transaçao , commit...
Responder

17/09/2016

Amaro Loch

este commit devo dar no cliente ou no servidor, o clientdatset não tem commit.
Responder

17/09/2016

Amaro Loch

atualmente estou utilizando ADO com ODBC mais esta dando muito problema e não precisa da commit, basta um Post e ApplyUpdates(0);
Responder

17/09/2016

Kellson

nas propriedades do cliente data set faça o seguinte. me passe sua duvida completa, vc esta dando update, insert ou delete?
Responder

17/09/2016

Kellson

vc entao esta usando um insert por açoes tipo insert ou append, post, cancel, delete etc certo?
Responder

17/09/2016

Kellson

faça isso aqui so para ver se ele esta retornando um exception


with ClientDataSet1 do // inserir novo registro
begin
edit;
append;
end;




with ClientDataSet1 do // gravar os dados
begin

try
Post;
except
ShowMessage('Erro na hora de inserir os dados');
exit;
end;

ApplyUpdates;
Refresh;

end;
Responder

17/09/2016

Amaro Loch

ClientDataSet1.Close;
ClientDataSet1.Params.ParamByName('PPESSOA').Value:=5223;
ClientDataSet1.Open;
ClientDataSet1.edit;

ai tenho um dbedit na tela pra alterar o nome do cliente;
depois

ClientDataSet1.Post;
ClientDataSet1.ApplyUpdates(0);


isso é so um teste que estou fazendo, meu código não é tão ruim assim rsrsrs
Responder

17/09/2016

Kellson

como vc esta fazendo por value e nao por commandtext nao precisa dar um close ou active:=false;

faça assim deixando seu dataset ativo mesmo.
-----------------------------------------------------------------

if (Edt_PPESSOA.text<>'') then

begin
with clientdataset do
begin
edit;
append;
FieldByName('PPESSOA').Value:=EDT_PPESSOA.TEXT;
post;
applyupdates;
refresh; \\\\para atualizar os registros caso seja um update,delete,insert

end;

End else
begin
showmessa('campo obrigatorio'); \\\\ ou usar um messagedlg mterror, mtwarning,mtinformation
end;
Responder

17/09/2016

Kellson

lembre que tem uma diferença entre insert e append,,

insert abre uma nova linha abaixo do ultimo registro
append abre uma nova linha acima do primeiro registro

caso use commandtext entao ai muda a rotina:


with clientdataset do
begin
active:=false;
CommandText:=''; //mesmo que clear
commandtext:='insert into tabela(colunas) values(valores);
execute;
CommandText:=''; //mesmo que clear
commandtext:='select * from Tabela'; // se nao usar select retornara um exception dizendo que nao houve retorno de dados;
active:=true;

end;
Responder

17/09/2016

Kellson

lembre se que tem uma diferença entre insert e append,,

insert abre uma nova linha abaixo do ultimo registro
append abre uma nova linha acima do primeiro registro

caso use commandtext entao ai muda a rotina:


with clientdataset do
begin
active:=false;
CommandText:=''''; //mesmo que clear
commandtext:=''insert into tabela(colunas) values(valores);
execute;
CommandText:=''''; //mesmo que clear
commandtext:=''select * from Tabela''; // se nao usar select retornara um exception dizendo que nao houve retorno de dados;
active:=true;

end;
Responder

18/09/2016

Amaro Loch

Amigo, eu sei bem o que é a diferença entre um edit e um append.


Meu problema esta no lado do servidor a informação chega até o servidor de aplicação o problema que a informação não chega ano banco de dados
Responder

18/09/2016

Amaro Loch

Bom dia,

Meu problema continua tenho uma aplicação 3 camadas quando dou ApplyUpdates no ClientDataSet ele envia os dados para o servidor só que ele não grava no banco de dados;


Estrutura

Servidor
FDConnection
FDQuery
DataSetProvider


Cliente
DBXConnection
DSProviderConnection
ClientDataSet
Responder

19/09/2016

Kellson

certo então, seu problema deve estar no servidor, fiz um teste aqui funcionou normalmente amigo... apenas marquei a opção no
DataSetProvider1| Object inspector>>Options>>PoAllowCommandText , e tambem na query no "SERVIDOR" desmarquei uma opçao ChachedUpdates

amigo se também tiver essas opções marcadas e desmarcadas no seu projeto, então passo, pois aqui funcionou normalmente. UP
Responder

19/09/2016

Kellson

vc verificou o que citei no primeiro exemplo? que nao precisa dar close, nem active:=no no clientdataset?

somente receber values e dar um apply?

se quiser te mando um exemplo de DS com dbacess mdb..Srv e client , porem em Berlin 10.1, ou Xe6
Responder

19/09/2016

André Coimbra

No evento AfterApplyUpdates do ClientDataSet, ja tentou inserir o comando:

CommitUpdates;
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar