Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) tdbgrid + tibdataset


pimpocvl007

Pergunta

Boa noite,

Tenho um grid que permite o usuário alterar os dados da tabela, ele esta ligado através de um dataset (paleta INTERBASE), quero configurar para que a gravação dos dados alterados pelo usuário no grid, seja efetivada somente quando ele clicar no botão SALVAR. Hoje o sistema grava os dados quando o usuário altera no grid e da um TAB, pelo que percebi este procedimento e padrão do delphi pois não fiz nenhum configuração "extra" para ele trabalhar desta forma, ou seja, somente fiz as ligações dos componentes grid+dataset.

Outra coisa que percebi e esta deixando eu com a pulga atras da orelha, quando o usuário altera um valor no grid e passar com TAB, o sistema grava as informações do usuário que alterou, data, e hora, mas, se o usuário altera o mesmo campo e passa com setinha para baixo ou para cima que e o meu caso, o sistema grava a alteração que ele fez no campo mas não atualiza o usuário, data e hora. Porque será?

Editado por pimpocvl007
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Olá,

nunca trabalhei com o InterBase, mas tem o IBUpdateSQL, que você liga direto num IBQuery e acho que tambem da pra usar no IBDataSet (é que to sem o delphi agora e não lembro) , e permite você fazer manipular isso.

Abs. Progr'amador

Editado por Progr'amador
Link para o comentário
Compartilhar em outros sites

  • 0

Achei a solução para gravar os dados do usuário (usuário, data e hora da atualização quando o mesmo utilizar a seta para baixo ou para cima).

Peguei o IBDataset fui no "evento" do "componente": beforepost (antes de postar) mandei incluir o usuário a data e a hora, exemplo:

Ao pressionar a seta para baixo ou para cima o sistema executa o BEFOREPOST desde que ouve alteração na tabela, fazendo isso:

tabela_dados_parametro_empresaATU_CDUSU.Text := CdUsuarioLogado;

tabela_dados_parametro_empresaATU_DT.Text := DataServidor;

tabela_dados_parametro_empresaATU_HR.Text := HoraServidor;

...depois disso salvo automaticamente como já vinha fazendo;

Editado por pimpocvl007
Link para o comentário
Compartilhar em outros sites

  • 0

Galera,

Consegui resolver meu problema em partes, mas agora preciso aprender outra coisa.

Hoje quando o usuário altera os dados da tabela diretamente no GRID e passa com TAB, esta alteração e gravada no banco, acredito que isto seja um processo próprio do grid pois não fiz nenhuma configuração extra para isso, eu quero configurar para gravar somente quando o usuário clicar no botão salvar, e possível?

Link para o comentário
Compartilhar em outros sites

  • 0
acredito que isto seja um processo próprio do grid pois não fiz nenhuma configuração extra para isso, eu quero configurar para gravar somente quando o usuário clicar no botão salvar, e possível?

Se voce estiver usando um DBNavigator para isso, terá que fazer algumas alterações no código, mas já que quer usar botões seria:

procedure TForm1.Button1Click(Sender: TObject);
begin
   // Salvar modificações
   CDS_Cadcli.Post;
   CDS_Cadcli.ApplyUpdates(-1);
   CDS_Cadcli.Refresh;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   // Cancelar moficicações
   CDS_Cadcli.Cancel;
end;

isso é só um exemplo, pois existem outras maneiras ... depende de como o seu sistema foi concebido

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Ola

Se você tiver uma conta do gmail pode ver a imagem da tela:

https://docs.google.com/open?id=0B8krEpUBy7...zg2YmUzZTViMGQw

Suponho que você viu a imagem, então a ideia seria, o usuário pode alterar qualquer dado do grid, quando clicar no botão salvar o sistema devera gravar todas as alterações no banco, dos diversos registros alterados.

O problema que estou enfrentando e que ao salvar o sistema só grava o ultimo registro editado, ao sair da tela e entrar novamente da impressão que todas as alterações foram gravadas, mas ao sair do aplicativo e voltar nesta tela ai percebo que somente o ultimo registro editado que foi gravado. detalhe, ele só grava o ultimo se eu estiver em cima, ou seja, se eu editar o primeiro registro, ir na linha de baixo e salvar, ele não grava no banco, se eu editar o primeiro registro, ir para o segundo, alterar o segundo e salvar ele grava os dois agora se eu alterar o primeiro, ir para o segundo, alterar o segundo, voltar para o primeiro e salvar, ele não grava nada.

Ao utilizar o ".ApplyUpdates(-1);" da erro:

[DCC Error] unit_CadastroLocalEmpresa.pas(360): E2034 Too many actual parameters

[DCC Fatal Error] cloudvel_sbss.dpr(29): F2063 Could not compile used unit 'unit_CadastroLocalEmpresa.pas'

Failed

Elapsed time: 00:00:02.4

Poxa, tem mais, isso que estou comentando agora e em cima do TIBTable, se utilizo o TIBdataset piora, pois ao passar com tab nos campos alterado ele grava na hora, queria que a gravação ocorre-se somente quando o usuário clica-se no botão salvar.

obs.: não estou utilizando o navegador.

Link para o comentário
Compartilhar em outros sites

  • 0

Faça uma pesquisa no forum

http://scriptbrasil.com.br/forum/index.php?showtopic=141549

procure pelas palavras chave:

IBDataSet, IBTable, ApplyUpdates, IBTransaction ... etc

tem alguns posts no forum que vão ajuda-lo nessa dúvida

veja tambem

http://ibexpert.net/ibe/index.php?n=Doc.IB...PersonalEdition

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...