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

(RESOLVIDO) DBExpress atualização automática para todas as conexões?


Mario Henrique

Pergunta

Bom dia, pessoal!

Uso Delphi 7 + DBExpress + Firebird!

Tenho 2 terminais usando minha aplicação.

Quando um usuário clica em gravar registro, faço um applyupdate no banco.

Neste momento, tem como automáticamente atualizar o clientdataset no outro terminal, em que o usuário está com um dbgrid aberto, para ele ver que o registro acabou de ser cadastrado por outro terminal?

Existe alguma propriedade (comportamento nativo) do componente?

Abraço!

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

4 respostass a esta questão

Posts Recomendados

  • 0
tem como automáticamente atualizar o clientdataset no outro terminal, em que o usuário está com um dbgrid aberto, para ele ver que o registro acabou de ser cadastrado por outro terminal?

em outro terminal não, mas ao atualizar o banco de dados o outro terminal verá a atualização, assim que for dado o comando refresh no clientdataset.

exemplo

CDS_CLientes.Refresh;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

o problema está em salvar os dados ou suas modificações no banco de dados

no help do delphi voce encontra:

Call Refresh to ensure that an application has the latest data from a database. For example, when an application turns off filtering for a dataset, it should immediately call Refresh to display all records in the dataset, not just those that used to meet the filter condition.

Note: The Refresh method does not work for all TDataSet descendants. In particular, TQuery components do not support the Refresh method if the query is not "live". To refresh a static TQuery, close and reopen the dataset.

TDataSet generates a BeforeRefresh event before refreshing the records and an AfterRefresh event afterwards.

Note: Most datasets try to maintain the current record position when you call refresh. However, this is not always possible. For example, the current record may have been deleted from the server by another user. Unidirectional datasets have no mechanism for locating the current record after a refresh, and always move back to the first record.

eu costumo atualizar os outros terminais usando o metodo refresh, na entrada, no meio e no fim de um procedimento, para garantir que se houver alguma alteração nos dados durante esse tempo, medidas sejam tomadas.

entretanto voce pode tentar esse metodo:

Usando a função da API dbiSaveChanges ou o dbiUseIdleTime para salvar os dados no banco de dados.

Resposta:

procedure TForm1.Table1AfterPost(DataSet: TDataSet);
    begin
    DbiSaveChanges(Table1.handle);
    end;
ou
procedure TForm1.Query1AfterPost(DataSet: TDataSet);
    begin
    DbiSaveChanges(Query1.handle);
    end;
Isto irá salvar os dados na table definitivamente ou usar o seguinte:
procedure TForm1.FormCreate(Sender: TObject);
    begin
    Application.onIdle := UseIdle;
    end;

    procedure Tform1.UseIdle(Sender: TObject; var Done: Boolean);
    begin
    DbiUseIdleTime;
    end;

para que o todos os bancos sejam salvos no momento em que o aplicativo pare de processar mensagens!

http://www.ramosdainformatica.com.br/dic_r...s01.php?CDA=175

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
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...