Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 20 de Julho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
34 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Construção de Uma Query Robusta com TQuery
Publicado por jcfausto : Sexta, Setembro 17, 2004 - 10:34 GMT-3 (12796 leituras)
Comentários 1 Comentário   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Dicas para se realizar uma Query com um Componente TQuery sem problemas.
Este pequeno artigo, tem como objetivo ajudar a construir queries com o componente TQuery de uma forma que torne a definição mais robusta a fim de evitar erros comuns neste tipo de construção. Espero que ajude, pois se trata de uma boa prática de programação. Vamos lá:
1 - As Primeiras linhas antes de qualquer código deve ser:

nomeDoComponenteQuery.Close;
nomeDoComponenteQuery.SQL.Clear;

Ou se preferir:

With Query1 do
Begin
Close;
SQL.Clear;
End;

A primeira linha seta a propriedade Active do DataSet como False, sendo assim não é mais possível ler ou escrever dados no banco de dados.
A segunda linha se encarrega de limpar qualquer 'lixo' que tenha ficadode outras consultas SQL realizadas com o componente, garantindo assim que não haja erros provenientes de consultas anteriores.


2 - Para efeitos de otimização SEMPRE que for utilizar parâmetros vindos de outros componentes visuais na sua cláusula WHERE ou em alguma outra
cláusula utilizar parâmetros. Não utilize parâmetros pegos direto de componente do tipo Edit1.Text, isto pode lhe trazer problemas! Utilizando parâmetros evitamos mudar o código toda vez que se muda a cara da sua aplicação, e conseguimos uma otimização da query no banco de dados.

Ex:
with Query do
begin
Close;
SQL.Clear;
Query.SQL.Add('SELECT nome,sobrenome FROM cliente');
Query.SQL.Add('WHERE nome LIKE :pNome');
Unprepare;
Query.Params[0].asString := EditNome.Text+'%';
Prepare;
Query.Open;
end;

OBS: Os parâmetros para SELECTs não podem ser NULOS (null) porém para INSERTs e UPDATEs podem ser.
Note que não chamamos a função ExecSql para executar a query. Usamos o ExecSql quando a query não retorna um apontador para os dados, como para os comandos INSERT, UPDATE, DELETE, CREATE TABLE etc... No caso do SELECT basta chamar a função Open.

Os parâmetros podem ser utilizados tanto pra input (entrada) como output (saida) ou seja, podemos atribuir a um componente, valores que são definidos por um parâmetro.

Ex: Edit1.Text := Query.ParamByName('Cidade').AsString;

Neste exemplo o componente Edit1 tem a sua Propriedade Text setada com o valor do parâmetro Cidade da Query.


3 - Por recomendação do componente, caso a query for executada muitas vezes durante a aplicação, é mais conveniente que se defina a seção 'Unprepare, Prepare' para a mesma sendo que entre o bloco está a atribuição dos
parâmetros.
Unprepare: libera os recursos alocados na BDE e no Banco de Dados para a query
Prepare: Prepara a BDE e o Banco de Dados alocando (reservando) recursos para efeitos de otimizalção da query.
Ex:

whit Query1 do
begin
Close;
Unprepare;
Query1.Params[0].asString := 'Nome de Alguém';
Prepare;
end;

Note que isso somente é necessário se a query for executada muitas vezes durante a aplicação. Pois o deplhi faz um controle sobre isto caso não seja
explicitamente definida na aplicação. O Delphi em tempo de execução Prepara e Desprepara a query caso ela não tenha sido preparada em tempo de projeto.
E quando você define o texto de uma query em tempo de execução o Deplhi automaticamente Fecha (Close) e Desprepara (Unprepare) a query.

Uso estas práticas com a construção de minhas querys e não encontro problemas provenientes destas implementações, como encontrava antes de adotar estes hábitos.

Obrigado pela Atenção.

Julio Cesar Fausto
Graduação em Sistemas de Informação
Universidade Federal de Santa Catarina - UFSC
Florianópolis - SC
jcfausto@inf.ufsc.br


Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: Nuk3r : Out 06, 2005 - 06:12
(Informações sobre o membro | Enviar uma mensagem) http://
Amigo
Estou usando o comando:

query1.SQL.Add('Select * from ArqT where codifsab Like '+''''+'['+kcodini+'-'+kcodfin+']%'+'''');

A saída do comando é esse
select * from ArqT where codifsab Like '[0106800105590009-0106800105590720]%'

A minha dificuldade é que o campo codifsab possui 24 dígitos e preciso filtrar todos os registros, os quais o tal campo, comecem com kcodini até kcodfin. Independente dos 8 dígitos finais.
Mas o comando acima resulta em 0(zeros) registros. Eu sei que existem registros nesse intervalo.
O que está errado????
Antecipadamente agradeço a sua ajuda
Valeu!
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados