Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 05 de Outubro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
64 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Atualizando tabelas na rede com TmdMailSlot e sem Timer
Publicado por gsoft : Segunda, Fevereiro 13, 2006 - 08:54 GMT-3 (3772 leituras)
Comentários 2 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Este artigo demonstra como atualizar as tabelas de dados na rede sem usar timer.
Para quem não conhece o componente TmdMailSlot, acesse meu artigo anterior no link...

    Clique Aqui !

    Acompanhe os passos abaixo para fazer com que esse componente funcione em seus programas:
    1- Baixe a última versão desse componente no site do Autor Martin Djernæs

http://www.djernaes.dk/martin  ou diretamente pelo link http://djernaes.dk/martin/vcl.html#TmdMailSlot
    2- Depois instale o componente no seu Delphi, clique no menu "Component" Item "Install Component" selecione a Unit mdMailSlot.pas e Instale.
    3- A paleta mdVCL vai aparecer na barra de ferramentas do Delphi com os seguintes componentes:
 

    Neste artigo vamos usar tabelas do Interbase com os componentes IBDataBase, IBTransaction, IBTable e IBQuery mas poderíamos usar qualquer tipo de banco de dados ou componentes e adaptar o código deste artigo sem problemas.
    Depois insira no DataModule do seu programa o componente mdMailSlot.

    Na propriedade Slot do componente, insira o nome do seu programa, isso fará com que ele troque mensagens somente com outros programas que tenham o mesmo nome na propriedade Slot do componente.

    Não use nomes muito grandes ou com espaçamentos!

    Defina a propriedade Active do componente para True.

    No Evento OnMessageAvail insira o código que vai receber a mensagem:


  mdMailSlot1.Active := False;
  If Msg = 'AtualizarBDs' Then

    RedeAtualizaDados.Execute;
  mdMailSlot1.Active := True;


    Insira um componente ActionList no DataModulo e crie 2 actions, um com o nome RedeAtualizaDados e o outro com o nome RedeGravaDados.

    No evento OnExecute do Action RedeAtualizaDados insira o seguinte código:


Var AtualizaDataSet: Integer;
Begin
  For AtualizaDataSet := 0 To IBDatabase1.DataSetCount -1 Do
  If (IBDatabase1.DataSets[AtualizaDataSet] Is TIBTable) And   IBDatabase1.DataSets[AtualizaDataSet].Active And
(IBDatabase1.DataSets[AtualizaDataSet].State In [dsBrowse]) Then

    (IBDatabase1.DataSets[AtualizaDataSet] As TIBTable).Refresh
  Else
    If (IBDatabase1.DataSets[AtualizaDataSet] Is TIBQuery) And   IBDatabase1.DataSets[AtualizaDataSet].Active And
    (IBDatabase1.DataSets[AtualizaDataSet].State In [dsBrowse]) Then
    Begin
    (IBDatabase1.DataSets[AtualizaDataSet] As TIBQuery).Close;
    (IBDatabase1.DataSets[AtualizaDataSet] As TIBQuery).Open;
End;


    No evento OnExecute do Action RedeGravaDados insira o seguinte código:
 

Var GravaDataSet: Integer;
Begin
  For GravaDataSet := 0 To IBDatabase1.DataSetCount -1 Do If   (IBDatabase1.DataSets[GravaDataSet] Is TIBTable) Then

  If IBDatabase1.DataSets[GravaDataSet].Active Then
  Begin
    If (IBDatabase1.DataSets[GravaDataSet] As TIBTable).State In [DsBrowse] Then
    Begin
      (IBDatabase1.DataSets[GravaDataSet] As TIBTable).ApplyUpdates;
      If IBTransaction1.InTransaction Then IBTransaction1.CommitRetaining;
       (IBDatabase1.DataSets[GravaDataSet] As TIBTable).Refresh;
        SendToMailSlot('*', mdMailSlot1.Slot, 'AtualizarBDs');
    End;
  End;
End;


    Agora Insira o comando abaixo nos eventos AfterPost e AfterDelete de suas tabelas
 

    RedeGravaDados.Execute;
 

    Pronto, sua aplicação vai atualizar automaticamente as tabelas na rede somente quando houver a necessidade real.
    Sou André Luiz de Souza Fernandes, Técnico em Processamento de Dados, dono do site GSoftWares.COM e responsável pelo projeto OpenSource de Portais PHP CPGNUKE no Brasil.Contato suporte@gsoftwares.com
Um forte abraço a todos!



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: wolwerine_logan : Dez 08, 2006 - 12:28
(Informações sobre o membro | Enviar uma mensagem)
Para bens amigo comigo funcionol perfeitamente..só tinha um problema após atualizar a tabela ele movia o ponteiro para o ultimo regsitro algo que em alguns casos como o meu era um encomodo. Pesquisando na internet consegui encontrar a solução usando bookmark

e fiz uma pequena alteração no action redeatualizadados ..não sei nem se é o local más vou postalo aqui pesso que os administradores do site coloquem num local correto

Var AtualizaDataSet: Integer;
reg:string;//<--declara o campo que vai armazenar o bookmark
Begin
For AtualizaDataSet := 0 To IBDatabase_sistemagi.DataSetCount -1 Do
If (IBDatabase_sistemagi.DataSets[AtualizaDataSet] Is TIBTable) And IBDatabase_sistemagi.DataSets[AtualizaDataSet].Active And
(IBDatabase_sistemagi.DataSets[AtualizaDataSet].State In [dsBrowse]) Then
begin
Reg := (IBDatabase_sistemagi.DataSets[AtualizaDataSet] As TIBTable).Bookmark; //<- armazena o registro atual na memoria
(IBDatabase_sistemagi.DataSets[AtualizaDataSet] As TIBTable).Refresh;
(IBDatabase_sistemagi.DataSets[AtualizaDataSet] As TIBTable).Bookmark := reg;//<-- faz com que apos o refresh ele volte para o campo que estava
end
Else
If (IBDatabase_sistemagi.DataSets[AtualizaDataSet] Is TIBQuery) And IBDatabase_sistemagi.DataSets[AtualizaDataSet].Active And
(IBDatabase_sistemagi.DataSets[AtualizaDataSet].State In [dsBrowse]) Then
Begin
Reg := (IBDatabase_sistemagi.DataSets[AtualizaDataSet] As TIBQuery).Bookmark;//<- armazena o registro atual na memoria
(IBDatabase_sistemagi.DataSets[AtualizaDataSet] As TIBQuery).Close;
(IBDatabase_sistemagi.DataSets[AtualizaDataSet] As TIBQuery).Open;
(IBDatabase_sistemagi.DataSets[AtualizaDataSet] As TIBQuery).Bookmark := Reg;//<-- faz com que apos o refresh ele volte para o campo que estava
End;
end;
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados