Tela que Executa Consultas SQL via AdvPL

No post de hoje, vou mostrar uma tela que montei que executa queries (seja SELECT, UPDATE, INSERT, etc). Ideal para quem tem clientes que trabalham com TCloud.

O conceito da tela, nasceu da necessidade de alguns alunos que trabalham com TCloud em poder executar algumas expressões em SQL para testar. Então eu montei esse fonte o zTiSQL, sendo que é possível acionar ele no programa inicial (colocar zTiSQL ao invés de SIGAMDI). Ou inserir ele em alguma tecla de atalho, por exemplo, Shift + F8 e abrir em qualquer tela do sistema.

Print da tela do fonte zTiSQL

Abaixo irei detalhar os principais recursos da tela (clique no título da aba para ver o conteúdo).

Abrir e Salvar

Essa primeira opção, você pode abrir arquivos com extensão .sql ou até mesmo salvar o texto da query digitada em um novo arquivo SQL, definindo a pasta de sua escolha pelo sistema operacional.

Navegação de pastas do botão Abrir (similar ao botão Salvar)

Executar

Para executar uma query, você pode selecionar o texto desejado e apertar F5 (ou clicar no botão executar). Ou se preferir, você pode pressionar F5 diretamente, que irá executar todo o texto digitado.

Se a query tiver alguma falha, irá apresentar uma mensagem de falha.

Erro ao executar um Select

Se estiver tudo correto, ao executar, será carregado a grid, e no rodapé as informações de tempo gasto e o total de linhas.

Resultado de um Select

Agora se for uma query de manipulação, como UPDATE, também exibirá erros caso exista algum na query.

Erro ao executar um Update

Do contrário, se tiver tudo correto, irá exibir uma mensagem de sucesso.

Sucesso ao executar um Update

Ao executar queries que manipulam dados como UPDATE, INSERT INTO e DELETE, será exibido uma mensagem se deseja realmente prosseguir.

Pergunta em query de manipulação de dados

Já para queries de SELECT, se não houver o comando TOP ou não tiver um WHERE, será perguntado se deseja realmente executar, pois o resultado pode demorar.

Pergunta por causa de filtro em execução de Select

Existe a possibilidade também, de executar vários UPDATEs, para isso basta separá-los com ponto e vírgula, conforme print abaixo:

Tela com vários updates, e o terceiro com mensagem de falha

Exportar (Excel ou Txt)

Quando uma query estiver executada e seu resultado estiver na grid, é possível exportar o seu conteúdo ao clicar no botão Exportar.

Será exibido uma tela, para selecionar a extensão do arquivo, sendo possível exportar para:

  • Excel xlsx – Requer o printer.exe mais novo
  • Excel xml
  • Arquivo txt

Tela para exportar o resultado da query

Após escolher o diretório e definir o nome do arquivo, será processado e gerado para exibição.

Excel com o resultado exportado

Gerar Select

Pode ser que haja dúvidas ao montar um SELECT, então o botão Gerar Select tenta suprir essa necessidade.

Ao clicar nele, é exibido uma tela de parâmetros com Tabela, Quais campos, Número de linhas e qual ordenação.

Tela de parâmetros para gerar Select

Ao confirmar, é gerado a query automaticamente no editor.

Select gerado via parâmetros informados

Gerar Update

Se houver dúvidas em como montar um UPDATE, então o botão Gerar Update pode suprir essa necessidade.

Ao clicar nele, é exibido uma tela de parâmetros com Tabela, Campo e novo Conteúdo.

Tela de parâmetros do Update

Ao confirmar, será gerado a query no editor.

Update Gerado

Indentar

Às vezes temos uma query, e queremos indentar seu conteúdo, para ficar melhor legível. Por exemplo, no print abaixo, temos uma query que só tem uma linha:

Query antes de indentar

Ao clicar no botão indentar, ele irá carregar o site Free Formatter já preenchendo o campo da query.

Query no site Free Formatter

Então basta clicar no botão Format SQL para ver a query indentada.

Query após indentar

Buscar campos do Dicionário

Tem uma tecla de atalho na rotina, F3, que exibe uma dialog com todos os campos no sistema, ótimo para quem esqueceu algum nome de campo e precisa por na query. Ao pressionar, será exibido a seguinte tela:

Tela para seleção de campos

É possível filtrar então campo a campo, ou se inserir 3 caracteres, será filtrado o alias da tabela. A cada campo, basta dar duplo clique para dizer que o campo será usado na query.

Tela filtrando apenas SB1 e selecionando alguns campos

Ao confirmar a tela, os campos que foram selecionados, são exibidos na parte de edição de texto.

Resultado da seleção

Pessoal, desde o dia que foi publicado o zTiSQL, ele passou por algumas revisões, irei detalhar abaixo:

  • Revisão 01 – Disponibilização do projeto
  • Revisão 02 e 03 – Ajustes e correções conforme feedbacks de usuários
  • Revisão 04 – Tratativa para definir se irá deixar toda a query maiúscula (SQL Server e Oracle) ou minúscula (Postgre)
  • Revisão 05 – Adição da opção de executar SELECT INTO; Ajuste no posicionamento da tela via programa inicial
  • Revisão 06 – Tratativa para campos muito grandes (quando passa de 10 caracteres), para exibir no rodapé um aviso
  • Revisão 07 – 09/07/2022 – Adição de histórico das queries executadas; De execução de vários UPDATEs separados por ponto e vírgula; De Conversão automática de campos LGI e LGA;
  • Revisão 08 – 20/07/2022 – Adição de tratativa para ao usar o método RetTextSel, quebrar o texto com espaço vazio e mensagem se usar comentário com –;
  • Revisão 09 – 20/01/2023 – Adição de realização de backup dos atalhos F3 e F5, para que se ao usar dentro do SIGAMDI / SIGAADV, não ocasione problemas;

Esse e outros Fontes Premium, estão disponíveis para os assinantes dos Cursos do Terminal de Informação, saiba mais em terminaldeinformacao.com/assinatura.

Ou se preferir, compre esse fonte premium de modo avulso via Mercado Pago (se tiver interesse entre em contato via e-Mail que lhe passamos o valor avulso e as formas de pagamento).

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

10 Responses

  1. ANTONIO COSTA PATINI disse:

    SHOW DE BOLA DANIEL SAN, EU TAMBEM MONTEI UMA TELA QUE FAZ ISSO, A MINHA SÓ NÃO IDENTA A QUERY ,MAS O RESTO É QUASE IGUAL.

  2. Cleber Orati disse:

    Uma dica, estava analisando os fontes pois assino a PREMIUM e vi que tem uma parte que filtra os campos reservados R_E_C_N_O_ , R_E_C_D_E_L_ e D_E_L_E_T_. A Totvs criou outros campos reservados para que as tabelas trabalhem com as aplicações como por exemplo o PAINEL FINANCEIRO. Esses campos são S_T_A_M_P_ e I_N_S_D_T_ , se não inserir esses campos no filtro dá problema no Protheus quando vai executar (para o caso de os campos existirem).

  3. Fernando Vernier disse:

    Programa sensacional Atiílio, existe alguma forma de nesse programa gravar os logs do que cada usuário executou?

    • Fala Fernando, tudo joia?

      Sim, inclusive ele já grava o histórico de queries executadas localmente, dentro da função fSalvHis.

      O que você pode fazer, é dentro dessa função, você adicionar um RecLock em uma tabela customizada sua, gravando a data, a hora, o usuário e a query que ele executou.

      Um grande abraço.

  4. Fernando Vernier disse:

    Sensacional Atílio, será que para a próxima melhoria conseguimos gravar um log do que o usuário realizou?

    Abraços.

    • Bom dia Fernando, tudo joia?
      Se você quiser gravar o log, na função fSalvHis adicione um RecLock para uma tabela sua de logs, similar ao trecho abaixo:

          DbSelectArea("ZZZ")
          cProxNum := GetSXENum("ZZZ", "ZZZ_CODIGO")
          RecLock("ZZZ", .T.)
              ZZZ->ZZZ_CODIGO := cProxNum    //Caractere, tamanho 9
              ZZZ->ZZZ_DATA   := Date()      //Data, tamanho 8
              ZZZ->ZZZ_HORA   := Time()      //Caractere, tamanho 8
              ZZZ->ZZZ_USRCOD := RetCodUsr() //Caractere, tamanho 6
              ZZZ->ZZZ_QUERY  := cTexto      //Memo
          ZZZ->(MsUnlock())
      

      Um grande abraço.

  5. Gabriel Pulido disse:

    Ola, como poderia fazer a identacao no texto da consulta, tem documentação alguna função para isso ?

    • Bom dia Gabriel, tudo joia?

      Olha, você poderia criar a lógica manualmente, tipo encontrou tal texto, pula pra linha de baixo ou adiciona espaços a esquerda e tal.

      Ou você pode abrir um site de terceiros, já com a query preenchida (que é o caso do nosso fonte), se você ir na nossa função fIndentar, note que ele abre o site FreeFormatter passando a query SQL para formatação.

      Ai nisso ao abrir o site, a query já vem preenchida e é só confirmar para indentar.

      Um grande abraço.

Deixe uma resposta

Terminal de Informação