Fórum Consulta SQL Like ¬ #229278
01/05/2004
0
É 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
Curtir tópico
+ 0Posts
01/05/2004
Lucasnishimura
dm.dataset.sql.add(´Select * from table where Field like ´ + #39 + 37 + edit1.text + 37 + 34); :d
Gostei + 0
01/05/2004
Dankada
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;
Gostei + 0
01/05/2004
Aroldo Zanela
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;
Gostei + 0
02/05/2004
Emerson Nascimento
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?
Gostei + 0
02/05/2004
Marco Salles
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]
Gostei + 0
03/05/2004
Cintia
Agradeço a ajuda !
:lol:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)