Jump to content
Fórum Script Brasil
  • 0

(Resolvido) tdbgrid + tibdataset


pimpocvl007

Question

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á?

Edited by pimpocvl007
Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 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

Edited by Progr'amador
Link to comment
Share on other 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;

Edited by pimpocvl007
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...