Jump to content
Fórum Script Brasil
  • 0

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


Mario Henrique

Question

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!

Edited by Mario Henrique
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 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
      152k
    • Total Posts
      651.5k
×
×
  • Create New...