Desenvolvimento - Delphi
Delphi: Realizando Consultas/Pesquisas (iniciante)
Neste novo artigo vamos falar sobre consultas e pesquisa em banco de dados. Tenho recebido muitos e-mails de pessoas que estão iniciando em Delphi e estão encontrando uma certa dificuldade em realizar tal operação.
por Walbert CastroEntão mãos a obra.
1 - Pesquisando com FindKey, FindNearest e Locate.
Estas funções e procedimentos são utilizadas para pesquisar por informações dentro de tabelas utilizando os componentes TTable e TQuery.
A) FindKey - esta função pesquisa uma determinada informação exata dentro de um campo indexado ou chave primária, retornando True ou False para pesquisas encontradas ou não. Muito útil para quem ainda utiliza o velho paradox e dbase. Pode ser utilizado para procurar por código, numero de registro, numero de nota fiscal e etc.
Para nosso exemplo temos uma tabela Paradox com a seguinte estrutura:
DataBase Desktop
Salve com o nome Empregado.db.E coloque os seguintes dados.
Observe que o campo Código foi marcado como chave primaria e é através deste campo de podemos utilizar as funções e Procedimentos de pesquisa.
No Delphi coloque os seguintes componentes no formulário:
Edit (Paleta Standard)
Button (Paleta Standard) - Caption = Pesquisar Por Código
DbGrid (Paleta Data Control)
Table (Paleta BDE)
DataSoucer (Paleta Data Access)
Seu formulário deve estar como mostrado abaixo:
No Componente Table vamos fazer associar com nossa tabela:
DataBaseName - coloque o caminho onde se encontra sua tabela. No meu caso "C:\meus documentos".
TableName - escolha a tabela Empregados.db
IndexName - escolha o campo Código (Caso usa tabela só tenha uma chave primaria não é preciso informar nada em IndexName. A busca é feita diretamente pelo campo chave, caso contrario é necessário que se escolha qual o campo ser utilizado).
Active - Coloque true.
No componente DataSource em DataSet escolha Table1 e no DbGrid em DataSource escolha DataSource1.
Clique duas vezes no componente Button e digite o código abaixo:
Table1.FindKey([Edit1.Text]);
Execute o programa digite um código no edit e clique em pesquisar código para testar.
Caso você queira uma mensagem se a pesquisa não foi bem sucedida mude para o código abaixo:
If Not Table1.FindKey([Edit1.Text]) then ShowMessage("Informação não Encontrada");
B) FindNearest - Este procedimento pesquisa por informações parciais dentro de um campo chave ou indexado. Pode ser utilizada para procurar por nomes de pessoas, endereços e etc.
Para um exemplo prático vamos criar um índice secundário em nosso tabela. Abra a tabela Empregado.db com Database Desktop abra a estrutura e em Table Properties escolha Secondary Indexes clique em Define clique duas vezes no Campo Nome e clique no OK. Coloque no nome do nosso índice de iNome e salve a tabela.
Volte para o Delphi no componente Table em IndexName escolha nosso índice INome.
Coloque no formulário outro componente Button com o Caption Localizar Nome. Agora clique duas vezes no botão Localizar Nome e digite o código abaixo:
Table1.FindNearest([Edit1.Text]);
Como no FindNearest você pode informar apenas parte do nome desejado, por exemplo o nome ROSA da nossa tabela, como temos duas ROSA será mostrado a primeira no caso ROSA MARIA.
Execute o programa e faça um teste.
C) Locate - Esta função é bem diferente das outras enquanto FindKey e o FindNearest são utilizados em campos indexados o Locate pode ser utilizado com qualquer campo (String, Inteiros, Float, Data) mesmo que ele não seja um campo chave ou esteja indexado. Também é possível criar pesquisas com vários campos ao mesmo tempo.
Vamos a um exemplo:
No botão Pesquisar Nome vamos substituir o FindNearest pelo Locate. Nossa linha ficaria assim:
Table1.Locate("NOME",Edit1.Text,[ loPartialKey ]);
Onde:
"NOME" - é o campo em que se deseja pesquisa.
Edit1.Text - A informação pesquisada no caso o conteúdo no componente Edit.
[loPartialKey] - Opção de pesquisa que pode ser loPartialKey que representa pesquisa parcial como no FindNearest e/ou loCaseInsensitive que diferencia letras Maiúsculas de Minúsculas.
Você pode usar uma mensagem de alerta caso a pesquisa não seja encontrada.
If not Table1.Locate("NOME",Edit1.Text,[ loPartialKey]) then ShowMessage("Informação não Encontrada");
2 - Pesquisando com instruções SQL
Fazer pesquisas usando instruções SQL é muito melhor e mais rápido além de não precisamos de campos chaves ou indexados. Para isso temos que usar o componente TQuery da paleta BDE.
Coloque no formulário um componente TQuery e mude suas propriedades:
DataBaseName = coloque o caminha de onde se encontra sua tabela no meu caso "C:\meus documentos".
No DataSource mude o Dataset para Query1.
Todas as instruções são informadas na propriedade SQL do TQuery. Assim se queremos fazer uma consulta por determinado nome, por exemplo, teremos:
Select * from Empregado Where Nome = "ROSA MARIA" Order By NOME
Onde Select * from Empregado - Refere-se a tabela que será utilizada e seus campos. Como estamos usando * estamos nos referindo a todos os campos da tabela. Porem é possível a penas especificar os campos que se deseja exemplo: Select Nome from Empregado.
Where Nome = "ROSA MARIA - A instrução where determina uma condição de pesquisa a uma ou vários campos no nosso caso no campo NOME.
Order By - Refere-se a qual campo da tabela será organizado seja em ordem crescente ou decrescente no nosso caso o campo NOME. Para organizamos em ordem decrescente baste no final colocamos a instrução DESC. Exemplo Order by NOME Desc. O Exemplo acima nos mostra uma consulta exata, vamos ver uma consulta parcial.
Select Nome From Empregado Where Nome Like "ROSA%" Order by Nome
Veja que agora estamos utilizando o operador LIKE que exibe dados baseados em uma seqüência de caracteres.
O operador LIKE utiliza um coringa % para representarmos qualquer numero de caracter. Assim com a instrução acima teríamos o seguinte resultado.
Assim podemos realizar diversos tipos de consultas, tais como:
Select * from Empregado Where NOME LIKE "%CIA%" Order by NOME
O resultado seria:
Bem aqui termino mais um artigo espero que estas dicas de como realizar consultas possam ajudar o pessoal novato no assunto Delphi.
Não esqueçam de mandar suas críticas e sugestões para novos artigos ok.
Até a próxima.