Você está na página 1de 2

Auto-refresh com Firebird e Delphi

No evento SQL Connect 2007 (www.sqlconnect.com.br), ministrei uma palestra sobre o poder do
PSQL no Firebird. PSQL é a abreviação de Procedural SQL, ou seja, a linguagem de stored
procedures e triggers do Firebird. Um dos exemplos apresentados mostrava a simulação de auto-
refresh em aplicações feitas em Delphi acessando bancos Firebird. O exemplo foi criado
originalmente para a primeira edição do FDD (Firebird Developers Day). Em 2005, foi
melhorado e complementado, para ser apresentado na Conferência Internacional de Firebird,
realizada em Praga. O exemplo mostrado no SQL Connect é justamente o que foi utilizado em
Praga.

Praticamente todos os programadores já devem ter passado pela situação onde muitos usuários
(em rede) estão acessando, em um mesmo momento, as informações de uma mesma tabela,
inserindo ou alterando os registros. O problema é que a maioria dos componentes de acesso a
dados do Delphi “bufferiza” as informações na memória, o que é bom para a performance, mas
impede que as alterações feitas pelos outros usuários sejam refletidas automaticamente, fazendo
com que cada usuário tenha que atualizar os dados exibidos através de um refresh (geralmente
clicando no respectivo botão no DBNavigator), quando quiser ter certeza de que as informações
apresentadas na tela são as mais atuais.

O exemplo apresentado faz uso dos EVENTOS do Firebird para “avisar” as aplicações que alguém
mudou (alterou, inseriu ou apagou) alguma informação de uma determinada tabela. A aplicação
Delphi captura esse evento, ou seja, é “avisada” sobre a alteração, e através de rotinas especificas
verifica se deve ou não atualizar (refresh) as informações que estão sendo apresentadas na tela
do usuário, para que ele possa ver as mudanças feitas pelos outros.

Entre as verificações que devem ser feitas, estão:

• Alterações produzidas pelo próprio usuário devem ser ignoradas.


• Se a tabela estiver sendo editada, ou seja, o usuário está manipulando informação, então
o refresh deve ser abortado.
• Devemos ficar atentos para evitar gargalos de performance e afogamento do servidor ou
da rede. Lembre-se que um refresh em servidores SQL significa fazer um re-fetch, ou
seja, trazer todas as informações do servidor para o cliente novamente.

A aplicação apresentada utiliza os componentes do IBO (InterBase Objects –


www.firebase.com.br/fb/IBO.php) para acesso aos dados. Outros componentes, como o IBX, UIB,
etc. também oferecem componentes específicos para trabalhar com os eventos do Firebird.
Infelizmente a Borland/CodeGear não disponibiliza um componente para eventos no seu driver
dbExpress. Usuários do dbExpress acabam tendo que criar uma conexão secundária com o banco,
usando outro componente de acesso que permita manipulação de eventos, a fim de receber as
notificações enviadas pelo Firebird.
Os slides da apresentação podem ser vistos na 11ª edição da revista DB FreeMagazine
(www.dbfreemagazine.com.br) – download gratuito. O código dos exemplos e o banco de dados
estão disponíveis para download no site da FireBase, mais especificamente em
http://www.firebase.com.br/fb/artigo.php?id=1652 . No arquivo podem ser vistos outros
exemplos de procedures apresentadas na mesma palestra.

Divirtam-se!

Carlos H. Cantu
www.firebase.com.br

Você também pode gostar