Clientdaset Atualização no banco

12/07/2004

0

ESTOU FAZENDO UMA APLICAÇÃO USANDO CLIENTDATASET, IBQUERY, DATASETPROVIDER , DATASOURCE , ACTION LIST, ETC! ESTOU UTILIZANDO DOIS GRIDS, PARA MIM PODER ATUALIZAR DADOS DE UM B.DADOS ,CLICO COM O BOTÃO DIREITO EM UM GRID(DBGRIDCONS),SENDO ASSIM ME ABRE UM TELA PRA ALTERAR DADOS DE UMA TABELA COM CANMPOS(MESMA TABELA DO DBGRIDCONS) E DE OUTRA TABELA COM O GRID(DBGRID DE OUTRA TABELA), ESSAS DUAS TABELAS POSSUEM O MESMO PEDIDOSAIDA_ID, QUE POR SUA VEZ, NÃO PODEM SER ALTERADOS, FIZ ATRAVES DE UMA IBQUERY, UM CODIGO PARA QUE ESSE PEDIDOSAIDA_ID SE ATUALIZE, O COMANDO ACHA O MAIOR VALOR DO PEDIDOSAIDA_ID E ESTE SE INCREMENTA, LOGO TENHO QUE JOGÁ-LO NO DOIS GRIDS QUANDO QUERO INSERIR UM NOVO PEDIDO,MAS QUANDO VO INSERI UM NOVO PEDIDO, ELE JOGA NO BANCO SO DEPOIS QUE EU FECHO A APLICAÇÃO E ESTE VALOR PEDIDOSAIDA_ID , DEVERIA SER MODIFICADO NO0 GID EM TEMPO REAL DE EXECUÇÃO, E ESTE NÃO É MODIFICADO, JA DEI APLYUPDATES, JA FECHEI E ABRI CLIENTDASET, JA FIZ DE TUDO, SE PUDEREM ME AJUDAR , EU AGRADEÇO!


Deryck

Deryck

Responder

Posts

12/07/2004

Rômulo Barros

Amigo, tenho certeza de que em cima do seu teclado, do lado esquerdo existe uma tecla chamada ´Caps Lock´. Tecle em cima dela ´com o dedo´ e uma das luzes do seu teclado irá apagar. :wink:


Responder

12/07/2004

Deryck

[quote:7aa7d5b141=´Undeclared Identifier´]Amigo, tenho certeza de que em cima do seu teclado, do lado esquerdo existe uma tecla chamada ´Caps Lock´. Tecle em cima dela ´com o dedo´ e uma das luzes do seu teclado irá apagar. :wink:[/quote:7aa7d5b141]
Caro amigo, me desculpe o incomodo com o CAPS LOCK, mas mandei assim sem saber que tinha essas regras, não tive tempo de ler tudo , estou apertado com a troca de um software da empresa, e não estou com muito tempo,mas valeu pelo toque!


Responder

12/07/2004

Rômulo Barros

Vc está utilizando transação? Se tiver, verifique se o COMMIT é efetuado após o ApplyUpdate ou no OnClose ou OnDestroy do seu formulário. :wink:


Responder

12/07/2004

Deryck

[quote:92daa1ca94=´Undeclared Identifier´]Vc está utilizando transação? Se tiver, verifique se o COMMIT é efetuado após o ApplyUpdate ou no OnClose ou OnDestroy do seu formulário. :wink:[/quote:92daa1ca94]
Ja esta assim,,,,o problema agora é so que o banco é atualizado depois que fecha a aplicação! Ja dei comit,aplyupdate, ja fechei e abri clientdataset,,,


Responder

12/07/2004

Rômulo Barros

Posta o código pra gente dá uma olhadinha :cry:


Responder

12/07/2004

Deryck

[quote:f774678d72=´Undeclared Identifier´]Posta o código pra gente dá uma olhadinha :cry:[/quote:f774678d72]
//Salva um alteração

procedure TDataModule1.SalvarExecute(Sender: TObject);
begin


if DataModule2.ClientDataSet.State in [DsInsert,DsEdit] then
begin
DataModule2.ClientDataSet.Post;
DataModule2.ClientDataSet.ApplyUpdates(-1);
end;


if DataModule2.ClientDataSetGRID.State in [dsinsert,dsedit] then
begin
DataModule2.ClientDataSetGRID.Post;
DataModule2.ClientDataSetGRID.ApplyUpdates(-1);
end;
FRMinserir.Close;
end;

//Cancela uma alteração ou cancela um inserção

procedure TDataModule1.CancelarExecute(Sender: TObject);
begin

DataModule2.ClientDataSetGRID.RevertRecord;
DataModule2.ClientDataSetGRID.ApplyUpdates(0);
DataModule2.ClientDataSet.RevertRecord;
DataModule2.ClientDataSet.ApplyUpdates(0);
DataModule2.ClientDataSetCria_Id.RevertRecord;
DataModule2.ClientDataSetCria_Id.ApplyUpdates(0);
FRMinserir.Close;
end;
Inseri um novo pedido
procedure TDataModule1.AtualizarExecute(Sender: TObject);
begin


DataModule2.ClientDataSetGRIDPEDIDOSAIDA_ID.Value := DataModule2.ClientDataSetCria_IdCONT.Value;//recebe o novo pedidosaida_id
DataModule2.ClientDataSetPEDIDOSAIDA_ID.Value := DataModule2.ClientDataSetCria_IdCONT.Value;//recebe o novo pedidosaida_id
FRMcons.DBGridCONS.UpdateAction(Atualizar);
FRMinserir.DBGridATUALIZA.UpdateAction(Atualizar);
DataModule2.ClientDataSet.Post;
DataModule2.ClientDataSet.ApplyUpdates(-1);
DataModule2.ClientDataSetGRID.Post;
DataModule2.ClientDataSetGRID.ApplyUpdates(-1);
DataModule2.ClientDataSetCria_Id.ApplyUpdates(-1);
DataModule2.ClientDataSetCria_Id.Close;
DataModule2.ClientDataSetCria_Id.Open;
DataModule2.ClientDataSetGRID.Close;
DataModule2.ClientDataSet.Close;
DataModule2.ClientDataSetGRID.Open;
DataModule2.ClientDataSet.Open;
FRMinserir.Close;



end;
//Abre para inserção
procedure TDataModule1.InserirExecute(Sender: TObject);
begin


FRMinserir.Show;
FRMinserir.Salvar.Visible := false;
FRMinserir.Salvar.Enabled := false;
FRMinserir.Atualizar.Visible := True;
FRMinserir.Atualizar.Enabled := True;
DataModule2.ClientDataSetGRID.Open;
DataModule2.ClientDataSetGRID.Insert;
DataModule2.ClientDataSet.Open;
DataModule2.ClientDataSet.Insert;
FRMinserir.DBEdit1.Visible := True;
FRMinserir.DBGridATUALIZA.Columns[0].Visible := True;


end;


Responder

12/07/2004

Rômulo Barros

Tente assim:

..
Var
  Transacao : TTransactionDesc; // Uses DBXPress ;
Procedure IniciarTransacao;
Begin
  Transacao.TransactionId := SessionId; // SessionId é uma rotina que gera um número aleatório.
  Transacao.IsolationLevel := XilReadCommited;
  SqlConnection.StartTransaction(Transacao);
End;

Procedure FinalizarTransacao;
Begin
  If(SqlConnection.InTransaction)Then
     SqlConnection.Commit(Transacao);
End;


[color=red:8c8eb60167]Agora, basta vc chamar a rotina ´IniciarTransacao´ para os eventos ´BeforeInsert´,´BeforeEdit´ e ´BeforeDelete´ de seus ClientDataSets. Nos eventos ´AfterPost´ e ´AfterDelete´, chame a rotina ´Finalizar Transacao´;[/color:8c8eb60167]


Responder

12/07/2004

Deryck

[quote:dbee5a6031=´Undeclared Identifier´]Tente assim:

..
Var
  Transacao : TTransactionDesc; // Uses DBXPress ;
Procedure IniciarTransacao;
Begin
  Transacao.TransactionId := SessionId; // SessionId é uma rotina que gera um número aleatório.
  Transacao.IsolationLevel := XilReadCommited;
  SqlConnection.StartTransaction(Transacao);
End;

Procedure FinalizarTransacao;
Begin
  If(SqlConnection.InTransaction)Then
     SqlConnection.Commit(Transacao);
End;


[color=red:dbee5a6031]Agora, basta vc chamar a rotina ´IniciarTransacao´ para os eventos ´BeforeInsert´,´BeforeEdit´ e ´BeforeDelete´ de seus ClientDataSets. Nos eventos ´AfterPost´ e ´AfterDelete´, chame a rotina ´Finalizar Transacao´;[/color:dbee5a6031][/quote:dbee5a6031]

Cara ,,nem assim rolou ,,,deu uma porrada de erro!


Responder

12/07/2004

Deryck

[quote:5c3212b1a0=´Undeclared Identifier´]Tente assim: ..
Var
  Transacao : TTransactionDesc; // Uses DBXPress ;
Procedure IniciarTransacao;
Begin
  Transacao.TransactionId := SessionId; // SessionId é uma rotina que gera um número aleatório.
  Transacao.IsolationLevel := XilReadCommited;
  SqlConnection.StartTransaction(Transacao);
End;

Procedure FinalizarTransacao;
Begin
  If(SqlConnection.InTransaction)Then
     SqlConnection.Commit(Transacao);
End;
[color=red:5c3212b1a0]Agora, basta vc chamar a rotina ´IniciarTransacao´ para os eventos ´BeforeInsert´,´BeforeEdit´ e ´BeforeDelete´ de seus ClientDataSets. Nos eventos ´AfterPost´ e ´AfterDelete´, chame a rotina ´Finalizar Transacao´;[/color:5c3212b1a0]


Cara ,,nem assim rolou ,,,deu uma porrada de erro![/quote:5c3212b1a0]
Cara, consegui fazer, o lance é que no Ibtransaction, o edletimer estava 0 e quando coloquei 1 ,ele atualizou,de um em um segundo !


Responder

12/07/2004

Rômulo Barros

Beleza, cara !!! :wink: :wink:


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar