Jump to content
Fórum Script Brasil
  • 0

Fazer Busca Dentro Da Tabela


vms
 Share

Question

seguinte pessoal:

estou tentando fazer um gerenciador de arquivos salvos em cds

tenho uma tabela(paradox)

nome |A | |*| (nome do Cd)

conteudo |M |10| | (nome dos arquivos)

queria fazer uma busca de um arquivo especifico dentro do campo

conteúdo usando um edit e um button

obs:a busca seria em toda a tabela e não so apenas no memo que estara

sendo mostrado no momento.

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Cara, Tenta isso:

Cria um string dentro da procedure, e depois usa o código abaixo

proced...bitbtn1click..
var
x: string;
begin
x:='';
if inputquery('Procurar','NomeCampo',x) then
if not tabela1.Locate('NomeCampo',x,[])then
Showmessage('Campo pesquisado não Encotrada');
end;

ve se é isso pode ajudar?

Link to comment
Share on other sites

  • 0

Apenas complementado a sugestão do Pirambú!. Quando utilizar Locate, é possível que seja conveniente utilizar as opções de localização:

- loCaseInsensitive; (não diferenciação de maiúscula/minúscula)

- loPartialKey. (procura por palavra parcial - tipo substring)

Tabela1.Locate('NomeCampo', x, [loCaseInsensitive])

Mas, dependendo de como você queira fazer esta pesquisa, pode não lhe atender:

1) se você não utilizar loPartialKey, terá que digitar o texto exato ao cadastrado para que localize o mesmo;

2) se você utilizar loPartialKey, a pesquisa encontrará apenas o campo em que seu conteúdo inicia com o texto digitado, ou seja, não acha o texto quando ele aparece no meio.

Para estas situações, acredito que você teria que utilizar um componente TQuery com um SQL contendo LIKE.

Mas, ainda pode haver outro problema. Eu não tenho certeza, mas localizar um substring dentro de um campo Memo no Paradox, pode ser um pouco incerto. Se não me engano, não dá para utilizar a função UPPER ou LOWER com o campo memo no SELECT de modo a tornar a consulta Case-Insensitive. Tem que dar uma verificada.

Abraços

Link to comment
Share on other sites

  • 0

Fiz dessa forma

procedure TForm1.BitBtn2Click(Sender: TObject);

var

x: string;

begin

x:='';

if inputquery('Procurar','comentario',x) then

datamodule1.table1.Locate('comentario',x,[loPartialKey]);

Showmessage('arquivo não Encontrado');

end;

e apresenta os seguintes erros

[Error]UGerenciador_Arquivos.pas(94): Undeclared identifier: 'loPartialKey'

[Error] UGerenciador_Arquivos.pas(94): Incompatible types: 'TLocateOption' and 'Integer'

Para estas situações, acredito que você teria que utilizar um componente TQuery com um SQL contendo LIKE.

Mas, ainda pode haver outro problema. Eu não tenho certeza, mas localizar um substring dentro de um campo Memo no Paradox, pode ser um pouco incerto. Se não me engano, não dá para utilizar a função UPPER ou LOWER com o campo memo no SELECT de modo a tornar a consulta Case-Insensitive. Tem que dar uma verificada.

a intençao é encontrar uma palavra dentro do memo(no inicio, meio, fim)

Michels, existe uma forma que você tem certeza que dar certo?

outro tipo de banco? (sem ser o paradox, porque esse é o unico que tenho noçao, se for o caso vou tentar aprender outro)

valeu!!!

Link to comment
Share on other sites

  • 0
procedure TForm1.BitBtn2Click(Sender: TObject);
var
  x: string;
begin
  x:='';
  if inputquery('Procurar','comentario',x) then
    datamodule1.table1.Locate('comentario',x,[loPartialKey])
  else
    Showmessage('arquivo não Encontrado');
end;

e apresenta os seguintes erros

[Error]UGerenciador_Arquivos.pas(94): Undeclared identifier: 'loPartialKey'

[Error] UGerenciador_Arquivos.pas(94): Incompatible types: 'TLocateOption' and 'Integer'

É que como você utiliza o datamodule para colocar seu table, no form não existe a declaração, na cláusula uses, da unit DB. Faça isso - acrescente DB na cláusula uses do seu form.

Para estas situações, acredito que você teria que utilizar um componente TQuery com um SQL contendo LIKE.

Mas, ainda pode haver outro problema. Eu não tenho certeza, mas localizar um substring dentro de um campo Memo no Paradox, pode ser um pouco incerto. Se não me engano, não dá para utilizar a função UPPER ou LOWER com o campo memo no SELECT de modo a tornar a consulta Case-Insensitive. Tem que dar uma verificada.

a intençao é encontrar uma palavra dentro do memo(no inicio, meio, fim)

Micheus, existe uma forma que você tem certeza que dar certo?

outro tipo de banco? (sem ser o paradox, porque esse é o unico que tenho noçao, se for o caso vou tentar aprender outro)

essa resposta vai me tomar mais tempo. Faça os testes para confirmar ou não o que mencionei.

Quem sabe, alguém tenha uma alternativa. (logo mais eu volto a esta questão)

Mas para adiantar: este memo você guarda a lista dos nomes dos arquivos certo? Não poderiam ser itens? você teria um arquivo de CD's e outro de nome de arquivos, relacionados por um campo código do CD.

Link to comment
Share on other sites

  • 0

copila normalmente, mas apresenta este erro quando digito o

nome do arquivo para procurar

o nome do arquivo que digitei foi corel draw

Project Gerenciador_Arquivo.exe raised exception class EDatabaseError with message 'Constant is not

correct type Corel Draw'. Process stopped. Use Step or Run to continue

Link to comment
Share on other sites

  • 0
copila normalmente, mas apresenta este erro quando digito o

nome do arquivo para procurar o nome do arquivo que digitei foi corel draw

Project Gerenciador_Arquivo.exe raised exception class EDatabaseError with message 'Constant is not

correct type Corel Draw'. Process stopped. Use Step or Run to continue

mensagem estranha. Como está o código onde este erro ocorre?

Link to comment
Share on other sites

  • 0

o codigo é esse mesmo, apenas acrescentei DB na USES

procedure TForm1.BitBtn2Click(Sender: TObject);

var

x: string;

begin

x:='';

if inputquery('Procurar','comentario',x) then

datamodule1.table1.Locate('comentario',x,[loPartialKey]);

Showmessage('arquivo não Encontrado');

end;

Link to comment
Share on other sites

  • 0

vms, estive verificando e o problema é que o Locate não é aplicado a campos Memo.

Via query, você poderia utilizar o LIKE, mas a consulta é case-sensitive (difere maiúscula de minúscula) e não dá para utilizar a função UPPER sobre o memo:

select *

from tabela

where comentario like '%corel draw%'

Acho que você teria que utilizar outra abordagem.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...