Artigo Clube Delphi Edição 9 - Interbase Components II
Artigo da Revista Clube Delphi Edição 9.
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.
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.
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
DatabaseIbDatabase1
TransactionIbTransaction1
SelectSQLSelect * from customer
Active True
TdataSource
DataSetIbDataSet1
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.
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
Databasenamec:\Arquivos de Programas \Inter baseCorp\Interbase\Examples \Employee.gdb
TransactionIbTransaction
LoginPromptFALSE
Paramsusername=SYSDBA
Password=masterkey
ConnectedTRUE
IbTransaction1
DefaultDatabaseDatabase1
ActiveTRUE
Em seguida, configure e posicione os objetos de acordo com a figura abaixo:
Devemos habilitar o objeto IBSQL, linkando-o aos demais:
IbSQL1
DatabaseDatabase1
TransactionIbTransaction1
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;
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.
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:
ValorAção que poderá ser monitorada pelo objeto IBEvents
TfQPrepareComandos PREPARE
TfQExecuteComandos ExecSQL
TfQFetchComandos Fetch
TfErrorMensagens de er-ro do servidor;
TfStmtTodos os comandos SQL
TfConnectComandos de conexão e desconexão
TfTransactComandos Start Transaction, Commit e Rollback
TfBlobOperações em campos BLOB
TfServiceServiços do objeto IBSQLMonitor
TfMiscQualquer 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.
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:
DatabaseIndique 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:
RegisteredSe 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:
taRollbackExecuta a instrução RollBack. taCommitExecuta a instrucao Commit. taRollbackRetainingExecuta 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. TaCommitRetainingExecuta 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. |
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo