Anda di halaman 1dari 2

Auto-refresh com Firebird e Delphi

Data da última atualização: 24/01/2008

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 umrefresh 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 dodbExpress 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/downloads.php?id=274 .
No arquivo podem ser vistos outros exemplos de procedures apresentadas na
mesma palestra.

Divirtam-se!

Carlos H. Cantu
www.firebase.com.br

Anda mungkin juga menyukai