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 Castro



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.

Entã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.

Walbert Castro

Walbert Castro - Trabalha como Coordenador de informática na revenda Ambev do Amapá, utiliza o Delphi desde a versão 1, onde já desenvolveu vários sistema usando os bancos de dados Interbase, Firebird, MySQL e Paradox. Possui conhecimentos em Delphi, Clipper, VBA, PHP e administração de Servidores Linux e Windows 2000.