Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
+55 (062) 98553-6711
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO
+55 (062) 98243-1195

Você está aqui: Delphi ::: dbExpress ::: TSQLMonitor

Entenda e aprenda a usar a classe TSQLMonitor em suas aplicações Delphi + dbExpress

Quantidade de visualizações: 11496 vezes
Um objeto da classe TSQLMonitor permite interceptar as mensagens que são trocadas entre um componente de conexão SQL (TSQLConnection) e um servidor de banco de dados e salvá-las em uma lista de strings. Veja sua posição na hierarquia de classes do Delphi:

System.TObject
  Classes.TPersistent
    Classes.TComponent
      SqlExpr.TSQLMonitor
Esta classe também implementa as interfaces Classes.IInterfaceComponentReference e System.IInterface.

Usamos um componente TSQLMonitor quando queremos depurar (debug) a comunicação entre nossas aplicações e um servidor de banco de dados. Cada instância da classe TSQLMonitor registra (log) os comandos SQL de um determinado componente de conexão SQL, e os adiciona a uma lista de strings (string list). Isso não só nos permite verificar os comandos que disparamos explicitamente a um dataset SQL ou componente de conexão SQL mas também ver quaisquer comandos disparados nos bastidores, tais como aqueles gerados por um componente dataset provider.

A lista de comandos já registrados pode ser visualizada por meio da propriedade TraceList. Esta propriedade é atualizada automaticamente quando o componente de conexão passa uma mensagem para o servidor de banco de dados.

Siga os passos abaixo para aprender a conectar um controle TSQLMonitor a um componente TSQLConnection e registrar em um TMemo as mensagens trocadas com o servidor de banco de dados:

a) Vá na aba dbExpress e arraste um controle TSQLMonitor para o formulário ou data module;

b) Ajuste a propriedade SQLConnection do TSQLMonitor para o controle TSQLConnection desejado;

c) Ajuste a propriedade Active do TSQLMonitor para True;

d) Coloque o código abaixo no evento OnLogTrace do SQLMonitor (pode ser necessário acrescentar a unit DBXCommon na sua lista de uses):

procedure TForm3.SQLMonitor1LogTrace(Sender: TObject; TraceInfo: TDBXTraceInfo);
begin
  // vamos transferir para um TMemo as mensagens trocadas
  // entre o SQLConnection e o banco de dados


Neste trecho de código eu direcionei o log das mensagens para um TMemo. Note que fiz uma conversão forçada (cast) para o tipo TStrings afim de evitar o erro:

Incompatible types: 'TStrings' and 'TWideStrings'

Veja parte do conteúdo das mensagens registradas pelo SQLMonitor:

select * from `livros`
MySQL - mysql_real_query
MySQL - mysql_field_count
MySQL - mysql_store_result
MySQL - mysql_fetch_field
MySQL - mysql_escape_string
MySQL - mysql_escape_string
SELECT TABLE_SCHEMA, CAST(NULL AS CHAR(1)), TABLE_NAME, 
INDEX_NAME, CASE WHEN NON_UNIQUE = 0 THEN INDEX_NAME ELSE 
NULL END, INDEX_NAME='PRIMARY', NON_UNIQUE=0, 1=1 FROM 
INFORMATION_SCHEMA.STATISTICS WHERE (TABLE_SCHEMA = 'estudos' 
OR (1=2)) AND (1=1 OR 1=2) AND (TABLE_NAME = 'livros' OR (1=2)) 
GROUP BY 1, 2, 3 ,4 ORDER BY 1, 2, 3, 4
MySQL - mysql_real_query
MySQL - mysql_field_count
MySQL - mysql_store_result
MySQL - mysql_fetch_field
MySQL - mysql_fetch_row
MySQL - mysql_fetch_lengths
MySQL - mysql_escape_string
MySQL - mysql_escape_string
MySQL - mysql_escape_string
SELECT TABLE_SCHEMA, CAST(NULL AS CHAR(1)), TABLE_NAME, 
INDEX_NAME, COLUMN_NAME, SEQ_IN_INDEX, COLLATION='A' FROM 
INFORMATION_SCHEMA.STATISTICS WHERE (TABLE_SCHEMA = 'estudos' 
OR (1=2)) AND (1=1 OR 1=2) AND (TABLE_NAME = 'livros' OR (1=2)) 
AND (INDEX_NAME = 'A' OR (1=1)) ORDER BY 1, 2, 3, 4, SEQ_IN_INDEX
MySQL - mysql_real_query
MySQL - mysql_field_count
MySQL - mysql_store_result
MySQL - mysql_fetch_field
MySQL - mysql_fetch_row
MySQL - mysql_fetch_lengths
MySQL - mysql_fetch_row
MySQL - mysql_free_result
select * from `livros`
MySQL - mysql_real_query
MySQL - mysql_field_count
MySQL - mysql_store_result
MySQL - mysql_fetch_field
MySQL - mysql_fetch_row
MySQL - mysql_fetch_lengths
É importante observar que o SQLMonitor usa a propriedade TraceCallbackEvent do componente SQL connection cujas mensagens o mesmo monitora. Se atribuirmos nossa própria chamada callback a esta propriedade, a instância do SQL monitor interromperá seu funcionamento.

Esta dica foi escrita e testada no Delphi 2009.

Link para compartilhar na Internet ou com seus amigos:

Desafios, Exercícios e Algoritmos Resolvidos de Delphi

Veja mais Dicas e truques de Delphi

Dicas e truques de outras linguagens

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 33 usuários muito felizes estudando em nosso site.