Clientdaset Atualização no banco
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
Curtidas 0
Respostas
Rômulo Barros
12/07/2004
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:
GOSTEI 0
Deryck
12/07/2004
[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!
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!
GOSTEI 0
Rômulo Barros
12/07/2004
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:
GOSTEI 0
Deryck
12/07/2004
[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,,,
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,,,
GOSTEI 0
Rômulo Barros
12/07/2004
Posta o código pra gente dá uma olhadinha :cry:
GOSTEI 0
Deryck
12/07/2004
[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;
//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;
GOSTEI 0
Rômulo Barros
12/07/2004
Tente assim:
..
[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]
..
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]
GOSTEI 0
Deryck
12/07/2004
[quote:dbee5a6031=´Undeclared Identifier´]Tente assim:
..
[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!
..
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!
GOSTEI 0
Deryck
12/07/2004
[quote:5c3212b1a0=´Undeclared Identifier´]Tente assim:
..
[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]
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;
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 !
GOSTEI 0
Rômulo Barros
12/07/2004
Beleza, cara !!! :wink: :wink:
GOSTEI 0