Você está aqui: Delphi ::: dbExpress ::: TSQLMonitor |
Entenda e aprenda a usar a classe TSQLMonitor em suas aplicações Delphi + dbExpressQuantidade de visualizações: 11433 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 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): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm3.SQLMonitor1LogTrace(Sender: TObject; TraceInfo: TDBXTraceInfo); begin // vamos transferir para um TMemo as mensagens trocadas // entre o SQLConnection e o banco de dados Memo1.Lines := TStrings(SQLMonitor1.TraceList); end; 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 Esta dica foi escrita e testada no Delphi 2009. |
![]() |
Delphi ::: Dicas & Truques ::: Arquivos e Diretórios |
Como listar todos os arquivos de um diretório usando DelphiQuantidade de visualizações: 1642 vezes |
Como listar todos os arquivos de um diretório usando Delphi Em algumas situações precisamos listar todos os arquivos contidos em um determinado diretório. Para isso podemos usar a função abaixo. Esta função recebe o caminho e nome de um diretório e uma coleção de strings TStrings. Como resultado de sua execução, a função insere em TStrings todos os nomes dos diretórios encontrados. Para facilitar o entendimento do exemplo eu incluí uma chamada à função a partir do evento Click de um botão. Tenha a certeza de colocar uma TListBox no formulário antes de executar o código: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure listarArquivosDir(diretorio: string; lista: TStrings); var search_rec: TSearchRec; begin if FindFirst(diretorio + '*.*', faAnyFile, search_rec) = 0 then begin repeat if search_rec.Attr <> faDirectory then lista.Add(search_rec.Name); until FindNext(search_rec) <> 0; FindClose(search_rec); end; end; procedure TForm1.Button1Click(Sender: TObject); begin listarArquivosDir('c:\', ListBox1.Items); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Dicas & Truques ::: Data e Hora |
Delphi para iniciantes - Como criar uma data e hora em Delphi usando a função EncodeDateTime()Quantidade de visualizações: 20478 vezes |
Em algumas situações precisamos contruir uma determinada data e hora e retornar um TDateTime. Isso pode ser feito com o auxílio da função EncodeDateTime(). Esta função requer valores inteiros representando o ano, mês, dia, horas, minutos, segundos e milisegundos. Veja um exemplo no qual construímos a data 22/10/2009: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var data_hora: TDateTime; begin // não esqueça de incluir DateUtils no uses // vamos construir a data 22/10/2009 data_hora := EncodeDateTime(2009, 10, 22, 0, 0, 0, 0); // vamos exibir o resultado ShowMessage('A data é: ' + DateTimeToStr(data_hora)); end; Note que deixamos os valores de horas, minutos, segundos e milisegundos como 0. Experimente construir a mesma data fornecendo também os valores de horas, minutos, segundos e milisegundos. Há, contudo, alguns cuidados a serem tomados. Os valores fornecidos para a função EncodeDateTime() devem obedecer as regras de limites mínimos e máximos: a) O valor do ano deve estar entre 1 e 9999; b) Os valores de meses devem estar entre 1 e 12 (incluindo); c) Os valores válidos para os dias variam de 1 até 28, 29, 30 ou 31, dependendo do valor do mês. Por exemplo, os valores possíveis para o mês 2 (fevereiro) são de 1 até 28 ou até 29, dependendo ou não se o valor do ano especificado for um ano bissexto; d) Valores para a hora devem estar entre 0 e 24. Se a hora for definida como 24, os valores dos minutos, segundos e milisegundos deverão ser 0, e o TDateTime resultante representará a meia-noite no final do dia especificado e o início do próximo dia; d) Os valores dos minutos devem variar de 0 até 59; e) Os valores de segundos devem variar de 0 até 59; f) Os valores de milisegundos devem variar de 0 até 999. Se os valores informados para a função EncodeDateTime() estiverem fora destas faixas, uma exceção EConvertError será lançada. Esta exceção ocorrerá em tempo de execução. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como calcular o cateto oposto dadas as medidas da hipotenusa e do cateto adjascente em DelphiQuantidade de visualizações: 2558 vezes |
Todos estamos acostumados com o Teorema de Pitágoras, que diz que "o quadrado da hipotenusa é igual à soma dos quadrados dos catetos". Baseado nessa informação, fica fácil retornar a medida do cateto oposto quando temos as medidas da hipotenusa e do cateto adjascente. Isso, claro, via programação em linguagem Delphi. Comece observando a imagem a seguir: ![]() Veja que, nessa imagem, eu já coloquei os comprimentos da hipotenusa, do cateto oposto e do cateto adjascente. Para facilitar a conferência dos cálculos, eu coloquei também os ângulos theta (que alguns livros chamam de alfa) e beta já devidamente calculados. A medida da hipotenusa é, sem arredondamentos, 36.056 metros. Então, sabendo que o quadrado da hipotenusa é igual à soma dos quadrados dos catetos (Teorema de Pitógoras): \[c^2 = a^2 + b^2\] Tudo que temos que fazer é mudar a fórmula para: \[a^2 = c^2 - b^2\] Veja que agora o quadrado do cateto oposto é igual ao quadrado da hipotenusa menos o quadrado do cateto adjascente. Não se esqueça de que a hipotenusa é o maior lado do triângulo retângulo. Veja agora como esse cálculo é feito em linguagem Delphi: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm2.Button1Click(Sender: TObject); var a, b, c: Real; begin c := 36.056; // medida da hipotenusa b := 30; // medida do cateto adjascente // agora vamos calcular o comprimento da cateto oposto a := sqrt(sqr(c) - sqr(b)); // e mostramos o resultado Edit1.Text := 'A medida do cateto oposto é: ' + FloatToStr(a); end; Veja que o cálculo é feito a partir do evento Click de um botão Button1 e o resultado é apresentado na propriedade Text de uma caixa de texto Edit1. Ao executar este código Delphi nós teremos o seguinte resultado: A medida do cateto oposto é: 20,0008783807112 Como podemos ver, o resultado retornado com o código Delphi confere com os valores da imagem apresentada. |
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
Dicas e truques de outras linguagens |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |