Esse artigo faz parte da revista Clube Delphi edição 9. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.


Interbase Components II

Segunda parte dos componentes de acesso direto ao Intebase.

 

 

Estamos de volta com a palheta Interbase! E parece que a melhor parte ficou para o final - visto que agora iremos conhecer os objetos que oferecem uma integração direta com o banco de dados. Neste momento, iremos trabalhar com recursos como o SQL Monitor, Eventos, Stored Procedures, entre outros. Todos os exemplos aqui descritos estão disponíveis para download, no endereço www.clube delphi.com.br/edicao9/ interbase.zip.

 

 TibStoredProc

         Este objeto é equivalente ao objeto TstoredProc, da palheta DataAccess, e o seu uso é muito semelhante. Defina a propriedade Database, indicando o nome do objeto IbDatabase do aplicativo, e a propriedade Transaction, indicando o nome do objeto ibTransaction. Em seguida, clique na lista StoredProcName, para visualizar as procedures disponíveis no banco de dados. Para executar a procedure a partir do aplicativo, chame o método  ExecProc. Ex:

 

StoredProc1.Params[0].AsString := Edit1.Text;

StoredProc1.Prepare;

StoredProc1.ExecProc;

         O recurso de StoredProcedures é um dos diferenciais para com o Paradox (ou qualquer outro banco de dados local). O desenvolvedor pode criar procedures ou funções armazenadas no servidor, através de uma linguagem padrão conhecida como PL/SQL. Este recurso, bem utilizado, pode aumentar em muito a performance do aplicativo. Por exemplo, em um cadastro de Venda, a rotina para baixa no estoque poderia ser armazenada no banco de dados. Com isto, apenas a instrução SQL para cadastro da venda seria enviada, e a atualização na tabela de estoque seria realizada localmente, pelo servidor.

 

 

 TibDataSet

         Um objeto para manipulação de dados completo. Permite executar comandos SQL SELECT, criar um result set scrolável, além de permitir a definição de comandos SQL DML para manipulação de dados. Este componente substitui a funcionalidade de um objeto IbQuery + IbUpdateSQL, fornecendo uma interface única para esta tarefa. Vejamos um exemplo:

 

         Inicie uma nova aplicação no Delphi. No formulário em branco, insira um objeto Tibdatabase e um objeto TibTransaction. Configure-os, linkando com o banco de dados Employee.gdb

 

         Em seguida, insira um objeto TibDataSet, um objeto TdataSoure e um objeto TdbGrid. Configure os objeto conforme tabela abaixo:

 

TibDataSet

Database      IbDatabase1

Transaction    IbTransaction1

SelectSQL      Select * from customer

Active           True

 

TdataSource

DataSet                           IbDataSet1

 

TdbGRid

DataSource   DataSource1

 

Nosso formulário deverá se parecer com a figura abaixo:

 

 

         Repare que, neste momento, o objeto TibDataSet possui comportamento semelhante ao objeto Query. Para incluir a funcionalidade de manipulação dos dados, basta configurar as propriedades InsertSQL, ModifySQL e DeleteSQL:

 

 

         Neste passo, o objeto já estará apto a converter os dados inseridos através do objeto DbGRid ou de um método Append em instruções SQL. Os recursos do sistema necessários para esta tarefa serão menores quando comparados ao uso de um objeto Ibquery + IbUpdateSQL.

 

 

 TIbSQL

         Este objeto não possui equivalente na palheta DataAccess. Ele permite enviar comandos SQL ao servidor com a mínima alocação de handles para execução da tarefa. Isto é possível visto que o objeto não abre um "live result set", ou seja, não retorna nenhum tipo de dado para a aplicação. Em outras palavras, não é possível recuperar o resultado de um comando Select, que tenha sido enviado através deste objeto. A vantagem do seu uso é o ganho de performance em operações que não exigem retorno de dados. Veja abaixo alguns exemplos de boa utilização deste componente;

 

a) Rotinas de backup;

 

b) Rotinas de inserção/atualização automática;

 

c) Inserção/atualização sem o uso de objetos linkados.

 

         Vejamos um pequeno exemplo de uso deste componente:

 

         Inicie uma nova aplicação no Delphi. No formulário em branco, adicione um objeto Tbutton, um objeto Tmemo, um objeto TIBSQL, um objeto TIBDatabase e um objeto TIBTransaction. Inicie linkando o aplicativo ao banco de dados:

 

IbDatabase1

Databasename                  c:\Arquivos de Programas \Inter baseCorp\Interbase\Examples \Employee.gdb

Transaction             IbTransaction

LoginPrompt            FALSE

Params                            username=SYSDBA

                            Password=masterkey

Connected              TRUE

IbTransaction1

 

DefaultDatabase      Database1

Active                    TRUE

 

         Em seguida, configure e posicione os objetos de acordo com a figura abaixo:

 

 

         Devemos habilitar o objeto IBSQL, linkando-o aos demais:

 

IbSQL1

Database                Database1

Transaction             IbTransaction1

 

         O próximo passo é  definir a rotina para o evento OnClick do botão Executar:

 

procedure TfrmIbSQL.BitBtn1Click(Sender: TObject);

begin

  ibSQL1.Close;

  ibSQL1.SQL.clear;

  IbSQL1.SQL:=Memo1.Lines;

  IbSQL1.ExecQuery;

end;

 

         A propriedade SQL do objeto irá receber o comando SQL digitado pelo usuário. E o método responsável pelo envio da string ao servidor é o ExecQuery:

 

IbSQL1.ExecQuery;

 

Nota: Uma curiosidade: o modelo do aplicativo criado é comumente chamado de 'Aplicativo DSQL - Dynamic SQL'. Ou seja, as cláusulas SQL são criadas em tempo de execução, e não compiladas juntamente com o executável.

Nota2: O controle transacional não foi efetuado neste exemplo;

 

 TIBDatabaseInfo

         Outro componente que só existe devido à íntima relação do banco com o Delphi. Este objeto recupera do servidor várias informações a respeito do mesmo. Por exemplo, a memória disponível, a quantidade de comandos INSERT recebidos (pelo servidor), entre outras. O uso deste componente é simplicíssimo e será descrito passo a passo no exemplo abaixo:

 

 

         Abra um novo projeto no Delphi, e insira um objeto Tmemo, um TibDatabaseInfo e um TibDatabase. Posicione-os de acordo com a figura abaixo:

                   Linke o objeto TibDatabaseInfo com o banco de dados de exemplo employee.gdb. Em seguida, configure a propriedade Database, do objeto TibDatabaseInfo, fazendo-a linkar com o objeto ibDatabase1. E, no evento OnShow do formulário, digite a rotina abaixo:

 

procedure TfrmDatabaseInfo.FormShow(Sender: TObject);

begin

  with ibdatabaseInfo1,Memo1.Lines do begin

    Clear;

    add('Alocação:                       ‘+IntTostr(Allocation));

    add('Memória Atual: '+IntToStr(CurrentMemory));

    add('Arquivo do banco de dados: '+DbFileName);

    Add('Qtd. de Fetches: '+IntToStr(Fetches));

    Add('Qtd de gravações forçadas: '+IntTostr(ForcedWrites));

    Add('Máximo de memória: '+InttoStr(MaxMemory));

    Add('Qtd de buffers: '+intToStr(NumBuffers));

    Add('Tamanho da página: '+intToStr(PageSize));

    Add('Qtd de acessos de leitura: '+IntTOStr(Reads));

    Add('Qtd de acessos de escrita: '+IntToStr(writes));

    Add('Versão do Gerenciador: '+Version);

  End;

end;

 

Uma descrição detalhada de todas as propriedades deste objeto pode ser encontrada no final desta matéria.

 

 TIBSQLMonitor

         Este componente permite implementar a funcionalidade do aplicativo SQL Monitor, dentro de sua aplicação. Em outras palavras, o componente filtra todos os comandos que estão sendo enviados para o servidor, e dá acesso a esta informação. Por exemplo, ao abrir um objeto TibTable, vários comandos SQL são trocados com o servidor, sendo que isto fica transparente para o desenvolvedor. Utilizando o objeto IbSqlMonitor, as informações trafegadas passam a ser visíveis.

         Observe na figura abaixo o aplicativo SQL Monitor em ação:

 


 

         O SQL Monitor exibe todos os comandos trafegados através dos componentes da palheta Data Access. As palhetas ADO e Interbase não são reconhecidas por este software.

 

Nota: Esta ferramenta pode se tornar bastante útil para quem deseja melhorar a performance do aplicativo. Utilizando este componente, é possível obter respostas para questões como: "Quem possui melhor performance em determinada situação: A query ou a table?"  Ou: "Será que um determinado comando SQL está extraindo a melhor performance da consulta em questão? Ou a mesma precisa ser otimizada?"

 

         Um objeto SQLMonitor não precisa estar conectado a um componente IbDatabase específico, nem estar dentro da mesma aplicação que se deseja monitorar. O desenvolvedor pode construir uma aplicação em separado, e monitorar em tempo de execução os comandos que estão sendo enviados para o servidor. Isto é possível devido ao fato de que o objeto SQLMonitor se comunica diretamente com o InterbaseClient - e recupera todos os "Callbacks" deste aplicativo.

 

         Vamos contruir um pequeno exemplo para visualizar na prática como este interessante componente funciona:

 

         Inicie uma nova aplicação no Delphi. Insira um objeto Tlistbox, um objeto Tbutton e um objeto TIBSqlMonitor. Altere a propriedade caption do objeto Tbutton para 'Limpar', e posicione os componentes de acordo com a figura abaixo:

xo:

 

 

         Utilizaremos o único evento disponível no componente, para realizar o preenchimento do objeto ListBox, com as informações do banco. Este evento é o OnSql, que acontece a cada envio de comando para o servidor:

 

procedure TfrmMonitor.IBSQLMonitor1SQL (EventText: String);

begin

  ListBox1.Items.add(EventText);

end;

 

         A propriedade EventText passa o texto que está sendo enviado para o servidor. Veja abaixo um exemplo do objeto preenchido, após a abertura de um objeto TIBTable:

 

 

         Existe apenas uma última consideração a respeito deste objeto: o desenvolvedor precisa configurar a propriedade TraceFlags do objeto TIBDatabase, da aplicação que será monitorada. Vejamos o que contém a propriedade TraceFlags:

Valor                    Ação que poderá ser monitorada pelo objeto IBEvents

TfQPrepare           Comandos PREPARE

TfQExecute           Comandos ExecSQL

TfQFetch               Comandos Fetch

TfError                 Mensagens de er-ro do servidor;

TfStmt                    Todos os comandos SQL

TfConnect             Comandos de conexão e desconexão

TfTransact            Comandos Start Transaction, Commit e Rollback

TfBlob                     Operações em campos BLOB

TfService              Serviços do objeto IBSQLMonitor

TfMisc                     Qualquer mensagem que não pertença às classes anteriores

 

Exemplo:Para monitorar comandos INSERT de uma aplicação, a propriedade TraceFlags.tfStmt deverá estar configurada para TRUE. Para visualizar comandos fetch, enviados pela aplicação, a propriedade Traceflags.tfQFetch deverá estar setada. E assim por diante.

        

        

 TIBEvents

         Este é um dos objetos mais interessantes da palheta. O objeto IbEvents permite à aplicação capturar os 'Eventos' disparados pelo banco. Para quem não conhece o conceito de eventos (Events) no Interbase, permita-me apresentá-lo:

 

         O conceito de Events é um recurso encontrado em poucos bancos de dados. O servidor pode ser programado para disparar eventos, que serão enviados para os clientes cadastrados, durante determinada situação. Vejamos detalhadamente como funciona o processo:

 

         O desenvolvedor cadastra eventos no banco, que serão disparados em determinada situação. Digamos que exista uma Stored Procedure InsereNovoCliente. Dentro desta procedure, será criado um evento:

CREATE PROCEDURE INSERE_NOVO_ CLIENTE (pCODIGO INTEGER, pNOME CHAR(50) )  AS BEGIN

  Insert into Clientes (CODIGO,NOME) values (pCODIGO ,pNOME);

  POST_EVENT "InsereCliente"

END

 

Como pode ser observado, o comando POST_EVENT é o responsável por criar o referido evento. Neste caso, o evento "InsereCliente" será enviado para os clientes cadastrados.

O próximo passo é cadastrar os clientes que irão receber o evento. Isto é feito no próprio cliente, através do objeto IbEvents. Digamos que em uma situação de três máquinas, A, B e C, as máquinas A e B serão cadastradas para recebimento;

 

         Neste exemplo, sempre que um registro for inserido através da procedure InsereNovoCliente, as máquinas A e B ficarão sabendo da operação. Repare que a procedure pode ser executada de qualquer outra máquina, inclusive a C. Como o evento está cadastrado no banco de dados, este será enviado para toda a rede.

 

 

         Vamos ter uma visão global do processo, através do gráfico abaixo:

      

       Este recurso pode ser utilizado em várias situações interessantes. Digamos que nosso sistema precise de um refresh automático, como por exemplo, uma cooperativa de táxis. Neste modelo, os operadores precisam da informação em tempo real. Sim, pois um passageiro pode pedir um táxi que acabou de chegar no ponto. A solução mais simples para este problema seria o uso de ' timers' que ficariam dando um refresh na query de tempos em tempos. A princípio, esta solução causaria um overhead de tráfego, caso não houvesse um fluxo muito grande de alterações no banco. Com o uso de eventos, este problema poderia ser solucionado. Os clientes podem ser cadastrados para receber eventos previamente programados, sabendo exatamente a hora de efetuar o refresh.

         O uso de eventos, porem, não é solução para todos os casos. É uma ferramenta poderosa, todavia, deve ser utilizada com cuidado. No exemplo em questão, o uso de eventos somente seria recomendável caso o fluxo de alterações fosse menor do que o de consultas. Se houverem muitas alterações no banco, o uso de eventos poderá travar o aplicativo. É uma questão de análise do problema.

 

Vejamos como utilizar o objeto IbEvents:

         Primeiramente, o evento deve ser criado no servidor. Siga a sintaxe mostrada anteriomente. Em seguida, os clientes devem ser cadastrados para receber os eventos. Para isto basta inserir um objeto TibEvents, e configurá-lo como descrito abaixo:

 

Database           Indique o objeto TIBDatabase que esta conectado ao banco;

Events              Esta propriedade devera ser preenchida com o nome dos eventos que deverão ser registrados no cliente. Se tivermos, por exemplo, um evento no servidor:

...

POST_EVENT "InsereCliente"

....

 

Devemos preencher a propriedade Events com o nome do evento:

 

 

Registered            Se TRUE, os eventos estarão registrados. Em outras palavras, o cliente será notificado quando o evento ocorrer.

         E, por último, o evento OnEventAlert deve ser programado. Este evento será chamado toda vez que uma notificação de evento for enviada ao cliente. No exemplo do refresh automático, o mesmo deveria ser executado neste evento.

 

         Veja a descrição dos parâme-tros passados:

 

EventName  Nome do evento recebido

EventCount  Quantidade de chamadas

CancelAlerts Se for passado TRUE para este parâmetro, os próximos eventos com o mesmo nome serão ignorados. Para retornar o recebimento de eventos, execute o método QueueEvents.

 

NOTA: Os eventos também podem ser programados dentro de TRIGGERS.


Resumo dos Objetos, Propriedades e Eventos da Palheta InterBase

TIBDatabase

 

Equivalente ao componente TDatabase, da palheta DataAccess. Representa a instância do banco de dados da aplicação, e realiza a conexão ao banco, através da propriedade Connected.

 

 

Principais Propriedades:

 

Connected             

Quando True, inicia a conexão com o servidor.

Databasename

Nome do arquivo de banco de dados.

DefaultTransaction

Indica um objeto TIBTransaction como objeto de transação Default.

IdleTimer

Especifica quanto tempo o cliente irá esperar caso o servidor não envie nenhuma resposta. Se o tempo for ultrapassado e o servidor não responder, a conexao será desfeita.

LoginPrompt

Se True, o objeto pedirá nome e senha ao usuário.

SQLDialect

Indica o código de dialeto SQL utilizado pelo cliente.

TraceFlags

Indica quais serão as ações monitoradas pelo objeto TIBSQLMonitor.

 

 

Principais Eventos

 

AfterConnect

Ocorre após a conexão ser realizada.

AfterDisconnect

Ocorre após a conexão ser terminada.

BeforeConnect

Ocorre ao pedido de conexão.

BeforeDisconnect

Ocorre ao pedido de término da conexão.

OnIdleTimer

Ocorre enquanto o cliente espera por uma resposta do servidor.

OnLogin

Este evento pode ser usado para subtituir o pedido de username e password do objeto. Ao definir alguma rotina neste evento, automaticamente a janela de login não será exibida e o nome e a senha deverão ser passados via código.

 

 

 

 

 

TIBTransaction

 

Um dos componentes mais interessantes da nova palheta. O componente IBTransaction representa a instância da transação atual e simplifica muito o controle de transações. Com este objeto, é possível controlar transações concorrentes originárias da mesma conexão com o banco de dados, ou em Threads independentes.

 

 

Principais Propriedades:

 

Active

Quando True, executa o método StartTransaction no servidor.

DefaultAction

Indica qual sera o metodo executado quando a aplicacao exceder o tempo de idle time out, ou seja quando nenhum comando for mais enviado para o servidor. Seus possiveis valores são:

 

taRollback             Executa a instrução RollBack.

taCommit              Executa a instrucao Commit.

taRollbackRetaining        Executa a instrução RollBack, e mantém o handle da transação aberto(os dados continuam na tela). Disponível apenas na versão 6.0 ou superior do Interbase.

TaCommitRetaining         Executa a instrução Commit e mantém o handle da transação aberto(os dados continuam na tela).

DefaultDatabase

Indica a instância do banco de dados no qual a transação seré iniciada.

IdleTimer

Especifica quanto tempo o objeto irá esperar para executar o método especificado na propriedade DefaultAction. O tempo começa a ser contado a partir que nenhuma instrução for enviada para o servidor.

 

 

Principais Eventos

 

OnIdleTimer

Ocorre enquanto a aplicação não envia nenhuma instrução SQL para o servidor. 

        

 

Principais Métodos:

 

Commit

Confirma a transação no servidor.

CommitRetaining

Confirma a transação e mantém o handle aberto. Neste caso, os dados permanecem na tela.

Rollback

Cancela a transação atual.

RollbackRetaining

Cancela a transação e mantém o handle aberto. Neste caso, os dados permanecem na tela. Disponível apenas a partir da versão 6 do Interbase.

StartTransaction

Inicia a transação.

Call

Rettorna a mensagems de erro baseado no ‘Error Code’ passado como parâmetro.

 

 

TIBTable

 

Representa uma conexão com alguma tabela do banco de dados. Equivalente ao objeto TTAble da palheta DataAccess. O uso do objeto TIBTable apresenta desvantagens em relação ao uso do objeto TIBQuery, visto que este componente envia uma quantidade de instrução muito maior ao servidor. É recomendavel o uso do objeto TIBQuery.

 

 

Principais Propriedades

 

Active

Abre a conexão com a tabela.

Database

Objeto TIBDatabase.

TableName

Nome da tabela dentro do banco de dados.

Transaction

Objeto TIBTransaction, que representara a transação ativa para as ações executadas através deste objeto.

 

 

Os demais métodos e eventos são os mesmos encontrados no objeto TTable, da palheta DataAccess.

 

 

TIBQuery

 

Representa uma conexão SQL com o banco de dados. Praticamente toda a linguagem SQL(DDL/DML) suportada pelo banco de dados pode ser utilizada através deste objeto. Para utilizar o objeto TQuery como um objeto de edição, e recomendável o seu uso juntamente com o objeto TUpdateSQL.

 

 

Principais Propriedades

 

Database

Objeto TIBDatabase, que representa a instância do banco de dados.

SQL

Código SQL a ser enviado para o servidor.

Transaction

Objeto TIBTransaction, que representará a transação ativa para as ações executadas através deste objeto.

 

Os demais eventos e métodos deste objeto são os mesmos encontrados no objeto TQuery, da palheta DataAccess.

 

 

TIBStoredProc

 

Permite executar uma procedure armazenada no servidor. Equivalente ao objeto TStoredProc, da palheta DataAccess.

 

 

Principais Propriedades

 

DataBase

Objeto TIBDatabase, que representa a instância do banco de dados

StoredProcName

Nome da procedure armazenada.

 

Os demais eventos e métodos são os mesmos do objeto TStoredProc.

 

 

TIBUpdateSQL

 

Permite configurar o objeto TIBQuery ReadOnly para trabalhar com Live Result Sets. Com este objeto, é possível definir instruções SQL para cada método Append, Edit ou Delete. O objeto UpdateSQL garante maior performance para editar uma tabela, pois a query trabalha em modo ReadOnly.

 

 

Principais Propriedades

 

InsertSQL

Define a instrução SQL a ser executada quando o método Append for chamado.

ModifySQL

Define a instrução SQL a ser executada quando a tabela for editada.

DeleteSQL

Define a instrução SQL a ser executada quando algum registro for deletado.

RefreshSQL

Define a instrução SQL a ser executada quando o método Refresh for executado.

 

Os demais eventos e metodos são os mesmos do objeto TUpdateSQL, da palheta DataAccess.

 

 

TIBDataSet

 

         Objeto que engloba toda a funcionalidade necessária para manipulação de um live result set de dados.        

 

Principais Propriedades

 

Active

Indica se a query sera aberta.

BufferChunks

Numero de registros no buffer.

Database

Objeto TIBDatabase, que representa o banco de dados atual.

DeleteSQL

Instrução SQL que  será executada quando algum registro for deletado.

InsertSQL

Instrução SQL que será executada quando algum registro for inserido.

ModifySQL

Instrução SQL que será executada quando algum registro for alterado.

RefreshSQL

Instrução SQL que será executada quando o metodo Refresh for chamado.

SelectSQL

Instrução SQL que será executada quando a query for aberta.

UpdateRecordTypes

Indica quais registros estarão visíveis quando a propriedade CachedUpdates estiver setada para True. Por default, as propriedades cusModified, cusInserted, e cusUnmodified estao setadas para True, o que significa que os registros atuais e inseridos estarão visíveis.

 

 

Principais Eventos

 

OnAfterDatabaseDisconnect

Ocorre após o término da conexão com o banco de dados.

 

 

 

 

 

 

OnAfterTransactionEnd

Ocorre após a execução de uma transação (com COMMIT ou ROLLBACK). Este evento captura apenas as transacoes “hard”, ou seja, terminadas com o metodo Commit ou RollBack. Os métodos CommitRetaining e RollbackRetaining não são capturados por este evento.

BeforeDatabaseDisconnect

Ocorre antes do término da conexão com o banco de dados.

OnBeforeTransactionEnd

Ocorre antes da execução de um comando Commit ou RollBack.

DatabaseFree

Ocorre após a liberação dos handle’s alocados pelo objeto TIBDatabase.

TransactionFree

Ocorre após a liberação dos handle’s alocados pelo objeto TIBTransaction.

 

 

 

TIBSQL

 

Componente para executar instruções SQL. Sua diferenca para com o objeto TQuery, é que este apresenta a maior performance de execução, e aloca o mínimo de recursos possíveis. Em contrapartida, este objeto não oferece interface para conexão com objetos DataControl – ele apenas executa as instruções. É recomendável o seu uso em operações que exijam uma rápida performance, como por exemplo, rotinas de backup. Este componente também pode ser utilizado para criação de aplicacoes DSQL (Dynamic SQL), ou seja, aplicações em que o próprio usuário cria as intruções SQL.

 

 

Principais Propriedades

 

Database

Objeto TIBDatabase que representa o banco de dados atual.

GoToFirstRecordOnExecute

Se True, vai para o primeiro registro após a execução de uma intrução SQL Live Result Set

 

 

 

 

 

 

 

 

ParamCheck

Esta propriedade deve ser True quando o objeto TIBSQL possuir uma instrução SQL DDL com parâmetros. Se True, o objeto irá prevenir de não misturar os parâmetros definidos na propriedade SQL com os parâmetros contidos dentro da instrução SQL. Por exemplo, se a instrução criar uma Stored Procedure com um parâmetro, setar esta propriedade para True irá prevenir o objeto de tentar substituir o parametro da instrução CREATE PROCEDURE por um valor da propriedade Params.

SQL

Instrução que será executada.

Transaction

Objeto TIBTransaction que irá representar a transação atual.

 

 

Principais Eventos

 

 

OnSQLchanging

Ocorre quando a instrução SQL é modificada.

 

 

Principais Metodos

 

Call

Function Call(ErrCode: ISC_STATUS; RaiseError: Boolean): ISC_STATUS;

 

Retorna a mensagem de erro correspondente ao código de erro.

CheckClosed

Gera uma exceção quando a query está aberta.

CheckOpen

Gera uma exceção quando a query está fechada.

CheckValidStatement

 

Gera uma exceção se a query não possuir uma cláusula SQL válida.

Close

Elimina os handles gerados pela query.

Current

function Current: TIBXSQLDA;

 

Retorna o tipo IBXSQLDA atualmente alocado pela query. Este descriptor representa uma área de transferência de dados entre o banco de dados e aplicação cliente. Toda execução de uma instrução SQL cria uma instância deste Record.

ExecQuery

Executa a query SQL.

FieldByName

Utilizado para acessar um campo da tabela através de seu nome.

Next

Move o ponteiro para o próximo registro.

Prepare

Utilizado antes de passar parâmetros para o objeto. Permite preparar uma Query para execução.

 

 

TIBDatabaseInfo

 

Retorna varias informações a respeito do banco de dados especificado. Basta inserir um componente TIBDatabaseInfo, configurar sua propriedade Database para o objeto TIBDatabase correspondente, e capturar os valores de suas propriedades.

 

Principais Propriedades:

 

Allocation

Retorna o número de páginas alocadas.

BackoutCount

Indica o número de vezes que um registro do banco de dados foi removido.

BaseLevel

Retorna o número de versão do banco de dados.

CurrentMemory

Retorna a quantidade de memória atualmente alocada pelo servidor.

DataBase

Objeto TIBDatabase, que indicará o banco de dados provedor das informações.

DBFilename

Retorna o nome do arquivo de banco de dados.

DbImplementationClass

Retorna o número de classe do banco de dados.

DbImplementationNo

Retorna o número de implementação do banco de dados.

DbSiteName

Retorna o nome do site do banco de dados.

DbSQLDialect

Retorna o número SQL Dialect atualmente utilizado pelo servidor.

DeleteCount

Retorna o número de Deletes executados desde a última conexão com o servidor.

ExpungeCount

Retorna o número de registros removidos.

Fetches

Retorna o número de Fetchs realizados.

ForcedWrites

Indica como a gravação de dados está sendo realizada. 0 para assíncrono e 1 para sícrono.

InsertCount

Retorna o número de Inserts executados desde a última conexão com o servidor.

Marks

Retorna o número de gravações efetuadas no buffer

MaxMemory

Retorna, em bytes, a quantidade de memória utilizada desde a primeira conexão realizada

 

NoReserve

Indica se espaço reservado para backup de registros modificados no banco

NumBuffers

Indica o número de buffers alocados

ODSMajorVersion

Retorna a parte superior da versão do  ODS

ODSMinorVersion

Retorna a parte inferior da versão do ODS

PageSize

Retorna o número de bytes alocados por página

PurgeCount

Retorna o número de Purgings realizados

ReadIdxCount

Retorna o número de leituras realizadas através de índices.

ReadOnly

Indica quando o banco de dados é ou não read-only

Reads

Retorna o número de páginas lidas no banco

ReadSeqCount

Retorna o número de leituras seqüenciais realizadas nas tabelas do banco

SweepInterval

Retorna o número de transações confirmadas entre “sweeps”

UpdateCount

Retorna o numero de Updates executados desdes a última conexão com o servidor.

UserNames

Retorna em uma lista de String, os usuários conectados no banco de dados.

Version

Retorna a versão do Interbase.

Writes

Retorna o número de páginas de dadosescritas no banco.

 

 

TIBSQLMonitor

 

         Permite criar um log de todas as operações e instruções SQL que foram enviadas ao servidor. Como o aplicativo SQL Monitor não pode monitorar as intruções SQL enviadas pelos componentes Interbase(pois trabalha no nível da camada BDE), o desenvolvedor precisa usar este componente para  monitorar e otimizar a aplicação cliente.

 

O uso deste objeto é muito simples. Não existem propriedades a serem configuradas, basta inserir um componente IBSQLMonitor na aplicação(ou em outro aplicativo). Após, o usuário deve configurar a propriedade TraceFlags do objeto Database da aplicação cliente, indicando quais serão os comandos filtrados pelo objeto IBSQLmonitor.

 

As instruções SQL podem ser capturadas através do evento OnSQL do objeto. Este evento passa um parâmetro EventText, do tipo string, indicando o comando enviando para o servidor. Por exemplo, a aplicação poderia ter um ListBox para receber as instruções:

 

procedure TForm1.IBSQLMonitor1SQL(EventText: String);

begin

  ListBox1.Items.Add(EventText);

end;

 

Com este código, todos os comando enviados ao servidor (definidos na propriedade TraceFlags do objeto Database) seriam exibidos no ListBox.

 

 

TIBEvents

 

Componente para utilizar os “eventos” do Interbase. O conceito de eventos no Interbase é muito interessante: o desenvolvedor pode programar eventos no banco de dados, que serão executados em instruções como INSERT, UPDATE ou DELETE. Estes eventos podem ser programados em Triggers ou Stored Procedures, e as aplicações que registrarem os eventos através do objeto TIBEvents, receberão uma notificação toda vez que algum registro for inserido ou deletado, por exemplo. Este objeto é muito útil para criar telas de refresh automático. Por exemplo, um evento poderia ser criado toda vez que um registro for inserido na tabela. Todas as máquinas clientes iriam receber este evento, e o software poderia ser programado para dar um Refresh em suas Query’s abertas, criando o efeito de Refresh automático sem causar Overhead de CPU. Este objeto roda em um Thread separado, e não degrada a performance do sistema.

 

 

Principais Propriedades

 

Database

Objeto TIBDatabase, que representa o banco de dados atual.

Events

Nome dos eventos que serão recebidos pelo objeto.

Registered

Se True, indica que o objeto estará ativo.

 

 

Principais Eventos

 

OnEventAlert

Ocorre quando algum evento é recebido pelo objeto. Setar o parâmetro  CancelAlerts para True, indica que o evento recebido deverá ser ignorado. Para retornar e receber determinado evento, basta chamar o método QueueEvents. Nem todas as operações envolvendo objetos da VCL poderão ser executadas neste evento, visto que ele roda em um Thread separado.

 

 

Principais Metodos

 

CancelEvents

Cancela o recebimento dos eventos pendentes.

QueueEvents

Indica ao objeto para iniciar o recebimento dos eventos.

RegisterEvents

Registra os eventos listados na propriedade Events. Este método já executa o  método QueueEvents.

UnRegisterEvents

Cancela o recebimento dos eventos listados na propriedade Events.