Consulta SQL Like ¬
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!!
É 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
Curtidas 0
Respostas
Lucasnishimura
01/05/2004
dm.dataset.sql.add(´Select * from table where Field like ´ + #39 + 37 + edit1.text + 37 + 34); :d
GOSTEI 0
Dankada
01/05/2004
faz assim
no evento OnKeyUp do edit
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
Aroldo Zanela
01/05/2004
Colega,
Remova estas linhas:
Faça as seguintes alterações:
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
Emerson Nascimento
01/05/2004
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?
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
Marco Salles
01/05/2004
O ´Emerson´ foi muito feliz com a sua colocação
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]
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
Cintia
01/05/2004
Obrigado a todos. Realmente deu certo de dois modos citados neste topico.
Agradeço a ajuda !
:lol:
Agradeço a ajuda !
:lol:
GOSTEI 0