Fórum Consulta SQL Like ¬ #229278

01/05/2004

0

Oiiiii a todos !.
É a primeira vez q eu escrevo aki !...
Minha dúvida é:

Tenho um form com um edit e um dbgrid.
Tenho tbem um componente q faz a conexao do Banco de Dados ACCESS.

Meu objetivo é, quando digitar ´A´ todos os nomes com inicio A apareçam, assim por diante, até terminar o nome ´AMIR´, mostrar todos os ALMIR, mas nao to conseguindo...
Meu codigo no onchange do edit ta assim:

Modulo.Tb.SQL.Clear;
Modulo.Tb.SQL.Add(´select member from member where name like ´+ ´¬´ + quotedstr(e1.text));
Modulo.Tb.Open;
e1.Clear;
e1.SetFocus;

nome member = tabela e campo.

o erro é StackOverflow !!!.....

Agradeço a ajudinha de vcs!!


Cintia

Cintia

Responder

Posts

01/05/2004

Lucasnishimura

dm.dataset.sql.add(´Select * from table where Field like ´ + #39 + 37 + edit1.text + 37 + 34);

:d



Responder

Gostei + 0

01/05/2004

Dankada

faz assim

no evento OnKeyUp do edit

var
  tam:integer;
begin
  Modulo.Tb.SQL.Close;
  tam := length(E1.text);
  DMPri.QPesqAluno.SQL.Text := ´SELECT * FROM member WHERE mid(name,1,´+IntToStr(tam)+´)=´´´+E1.Text+´´´  order by name ´ ;
  Modulo.Tb.SQL.Open;



Responder

Gostei + 0

01/05/2004

Aroldo Zanela

Colega,

Remova estas linhas:

e1.Clear; // Aqui provoca o vazamento de pilha
e1.SetFocus; 


Faça as seguintes alterações:

Modulo.Tb.Close;
Modulo.Tb.SQL.Text := ´select member from member where name like ¬´ + e1.text; 
Modulo.Tb.Open; 



Responder

Gostei + 0

02/05/2004

Emerson Nascimento

Modulo.Tb.Close;
Modulo.Tb.SQL.Text := ´select member from member where name like ´+QuotedStr( copy(e1.text+´¬´,1,TamanhoDoCampoName) );
Modulo.Tb.Open;

substitua [b:fbbc91483c]TamanhoDoCampoName[/b:fbbc91483c] pelo tamanho físico do campo, em caracteres.

o sinal [b:fbbc91483c]¬[/b:fbbc91483c] funciona como um curinga. da forma que vc estava fazendo, será pesquisado tudo que termine com ´A´ (´¬A´). como vc quer tudo que INICIE por A, o curinga deve ser no final (´A¬´).

o Copy() na montagem da instrução é pra prevenir um possível erro em tempo de execução: supondo que o seu campo [i:fbbc91483c]name[/i:fbbc91483c] tenha 30 posições e vc digita, no campo e1, um valor com 30 posições, a instrução pode retornar um erro, pois vc terá os 30 caracteres q vc digitou mais o curinga, que dará um total de 31 caracteres, estourando a capacidade do campo. o Copy() previne esse erro, pois trará somente as 30 posições.

a função QuotedStr() serve para envolver o resultado com aspas.
da formar usual - somente concatenando - a instrução final seria:
select member from member where name like AL¬
com o QuotedStr() fica:
select member from member where name like ´AL¬´


ajudei ou compliquei?


Responder

Gostei + 0

02/05/2004

Marco Salles

O ´Emerson´ foi muito feliz com a sua colocação
Modulo.Tb.Close; 
Modulo.Tb.SQL.Text := ´select member from member where name like ´+QuotedStr( copy(e1.text+´¬´,1,TamanhoDoCampoName) ); 
Modulo.Tb.Open; 

Eu so Acrescetaria duas coisas :
Usar o Operador [b:15634045fe]Like[/b:15634045fe] em Um Campo Indexado,pode deixar a a pesquisa lenta , Pois o Servidor Não Usará o indice Sempre...[b:15634045fe]Se for este o Seu Caso[/b:15634045fe]...Pode se Usar em Contrapartida a Expressão [b:15634045fe]Starting With[/b:15634045fe] que ativa o Indice e é muito mais rápida
[b:15634045fe]Duas Considerações:[/b:15634045fe]
a)Se tiver trabalhando Local, [b:15634045fe]desconsidere[/b:15634045fe]..Por isto que eu citei: ´Se for este o teu caso´
b)Não sei se o Banco de Dados [b:15634045fe]ACCESS[/b:15634045fe] tem suporte a esta instrução :(

Outro detalhe que gostaria de acrescentar e de classsificar as informações
retornadas pela instrução select,especificando a cláusula [b:15634045fe]Order By[/b:15634045fe]


Responder

Gostei + 0

03/05/2004

Cintia

Obrigado a todos. Realmente deu certo de dois modos citados neste topico.

Agradeço a ajuda !
:lol:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar