Locate no DataSet
Como faço para localizar numa tabela, nomes que se iniciam com o que eu digitei numa Edit?
Por exemplo:
Tenho na tabela diversos nomes como JOSE DE OLIVEIRA, JOSE DE SOUZA, JOSELINO DE ALMEIDA, ETC.
Digito na Edit só JOSE e quero que me mostre todos os nomes que comecem com JOSE.
Fiz assim:
[b:4dac34748e]DataSet1.Locate(´NOME´, VarArrayOf([Edit1.Text]),[loPartialKey]);[/b:4dac34748e]
Não funciona da maneira que quero, só funciona se na tabela tiver um nome exatamente igual o digitado na Edit, e obviamente só me mostra esse nome.
Podem me dar uma ajuda?
Agradeço
Por exemplo:
Tenho na tabela diversos nomes como JOSE DE OLIVEIRA, JOSE DE SOUZA, JOSELINO DE ALMEIDA, ETC.
Digito na Edit só JOSE e quero que me mostre todos os nomes que comecem com JOSE.
Fiz assim:
[b:4dac34748e]DataSet1.Locate(´NOME´, VarArrayOf([Edit1.Text]),[loPartialKey]);[/b:4dac34748e]
Não funciona da maneira que quero, só funciona se na tabela tiver um nome exatamente igual o digitado na Edit, e obviamente só me mostra esse nome.
Podem me dar uma ajuda?
Agradeço
Cps.art
Curtidas 0
Respostas
Kenio_c
30/12/2007
Faça um SQL com select assim:
[select t.campos
from tabela t
where t.nome starting with ´JOSE´]
assim tudo q começar com ´JOSE´ sera mostrado[/code]
[select t.campos
from tabela t
where t.nome starting with ´JOSE´]
assim tudo q começar com ´JOSE´ sera mostrado[/code]
GOSTEI 0
Devmedia
30/12/2007
Amigo cps.art
Tudo bom cara?
Como não sei seu BD, nem seu componente de Conexão. Então vamos imaginar né ... rsrsrsrs
Se o seu BD da suporte a comando SQL.
Então é fácil.
Este código se voce tiver um DBGrid com seu DataSource setado as querys (supondo) abaixo, então será mostrado a consulta por cada letra ou nome total que voce desejar buscar.
Este código busca somente um ou todos os registros que tenham seus valores iguais ao que voce deseja buscar.
Espero ajudar.
Um abraço. Um feliz ano novo.
Att.
Tudo bom cara?
Como não sei seu BD, nem seu componente de Conexão. Então vamos imaginar né ... rsrsrsrs
Se o seu BD da suporte a comando SQL.
Então é fácil.
Este código se voce tiver um DBGrid com seu DataSource setado as querys (supondo) abaixo, então será mostrado a consulta por cada letra ou nome total que voce desejar buscar.
DM.ClientDataSet.Active := False; DM.SQLQuery.SQL.Clear; DM.SQLQuery.SQL.Add(´select * from CADASTRO_DE_CIDADES where); DM.SQLQuery.SQL.Add(´NOME_CIDADE like :NOME´); DM.SQLQuery.ParamByName(´NOME´).AsString:=´¬´+EditConsultaCidades.Text+´¬´; DM.SQLQuery.ExecSQL; DM.ClientDataSet.Active := True;
Este código busca somente um ou todos os registros que tenham seus valores iguais ao que voce deseja buscar.
DM.ClientDataSet.Active := False; DM.SQLQuery.SQL.Clear; DM.SQLQuery.SQL.Add(´select * from CADASTRO_DE_CIDADES where=´); DM.SQLQuery.SQL.Add(´EditConsultaCidades.Text´); DM.SQLQuery.ExecSQL; DM.ClientDataSet.Active := True;
Espero ajudar.
Um abraço. Um feliz ano novo.
Att.
GOSTEI 0
Devmedia
30/12/2007
Somente corrigindo um equivoco.
O certo é [color=blue:8a5d417828]DM.SQLQuery.Open; [/color:8a5d417828]
Este código busca somente um ou todos os registros que tenham seus valores iguais ao que voce deseja buscar.
DM.ClientDataSet.Active := False; DM.SQLQuery.SQL.Clear; DM.SQLQuery.SQL.Add(´select * from CADASTRO_DE_CIDADES where=´); DM.SQLQuery.SQL.Add(´EditConsultaCidades.Text´); DM.SQLQuery.Open; DM.ClientDataSet.Active := True;
O certo é [color=blue:8a5d417828]DM.SQLQuery.Open; [/color:8a5d417828]
GOSTEI 0
Jpauloss
30/12/2007
Como faço para localizar numa tabela, nomes que se iniciam com o que eu digitei numa Edit?
Por exemplo:
Tenho na tabela diversos nomes como JOSE DE OLIVEIRA, JOSE DE SOUZA, JOSELINO DE ALMEIDA, ETC.
Digito na Edit só JOSE e quero que me mostre todos os nomes que comecem com JOSE.
Fiz assim:
[b:edd3e6a16d]DataSet1.Locate(´NOME´, VarArrayOf([Edit1.Text]),[loPartialKey]);[/b:edd3e6a16d]
Não funciona da maneira que quero, só funciona se na tabela tiver um nome exatamente igual o digitado na Edit, e obviamente só me mostra esse nome.
Podem me dar uma ajuda?
Agradeço
Estava com o mesmo problema e pesquisando no forum achei a solução
dm.cdsCliente.Locate(´NOME_CLI´,edit2.text,[lopartialkey,locaseinsensitive]);
NOME_CLI é o nome do campo. Edit2.text é o edit que o usuário digita.
Tenta aí qualquer coisa posta de novo.
GOSTEI 0
Cps.art
30/12/2007
Olá amigos.
Primeiro, [b:11d49c5c02]FELIZ ANO NOVO A TODOS VOCÊS[/b:11d49c5c02].
Caro [b:11d49c5c02]lucasfss[/b:11d49c5c02], um grande abraço.
Meu Banco de Dados é DBase e utilizo um componente chamado Halcyon, que aproveita tudo do Clipper.
Por isso estou tendo um trabalhão danado pra adaptar para o Delphi.
Já tentei o LOCATE de diversas formas e não dá certo, pois com esse componente, fico limitado às formas de sintese do comando.
Alem disso não tenho um Help do componente, tenho que ficar nas tentativas, e como parece que só eu utilizo o Halcyon, pouca gente pode me ajudar.
Mas a maioria dos problemas resolvi com dicas do forum, pois aproveito um pouco de cada sugestão e acaba funcionando.
Acho que vou ter que migrar para um gerenciador de Banco de Dados mais adaptado ao Delphi.
Nesse caso, as sugestões dos amigos mais experientes serão bem vindas.
Um agrande abraço a todos.
Primeiro, [b:11d49c5c02]FELIZ ANO NOVO A TODOS VOCÊS[/b:11d49c5c02].
Caro [b:11d49c5c02]lucasfss[/b:11d49c5c02], um grande abraço.
Meu Banco de Dados é DBase e utilizo um componente chamado Halcyon, que aproveita tudo do Clipper.
Por isso estou tendo um trabalhão danado pra adaptar para o Delphi.
Já tentei o LOCATE de diversas formas e não dá certo, pois com esse componente, fico limitado às formas de sintese do comando.
Alem disso não tenho um Help do componente, tenho que ficar nas tentativas, e como parece que só eu utilizo o Halcyon, pouca gente pode me ajudar.
Mas a maioria dos problemas resolvi com dicas do forum, pois aproveito um pouco de cada sugestão e acaba funcionando.
Acho que vou ter que migrar para um gerenciador de Banco de Dados mais adaptado ao Delphi.
Nesse caso, as sugestões dos amigos mais experientes serão bem vindas.
Um agrande abraço a todos.
GOSTEI 0
Devmedia
30/12/2007
Amigo cps.art
Tudo bom? Obrigado pela retribuição.
Olha. Eu passei pelo mesmo problema que voce. Possuo um sistema de gerenciamento de Indústrias e Comércio em Clipper. Só que vendo a melhor solução para o meu sistema, estou desenvolvendo um novo sistema. Seguindo os mesmos padrões e melhorando defeitos e falhas que o clipper não me da possibilidade de melhorar.
Estou desenvolvendo em Delphi 7, meu banco de dados é MySQL e conexão estou com dbExpress.
Olha, sinceramente está sendo a melhor coisa. Futuramente e ´financeiramente´ quero migrar meu sistema para o CodeGear Delphi 2007 for win32. Pois tendo visto e estudando sobre esta nova versão, melhorou e foi muito o Delphi.
Te recomendo voce comessar novamente seu sistema. Digo do zero mesmo. Agora se voce tiver uma aplicação, menor. Recomento Firebird para seu Banco de Dados.
Quaisquer dúvidas.
Um abraço.
Att.
Tudo bom? Obrigado pela retribuição.
Olha. Eu passei pelo mesmo problema que voce. Possuo um sistema de gerenciamento de Indústrias e Comércio em Clipper. Só que vendo a melhor solução para o meu sistema, estou desenvolvendo um novo sistema. Seguindo os mesmos padrões e melhorando defeitos e falhas que o clipper não me da possibilidade de melhorar.
Estou desenvolvendo em Delphi 7, meu banco de dados é MySQL e conexão estou com dbExpress.
Olha, sinceramente está sendo a melhor coisa. Futuramente e ´financeiramente´ quero migrar meu sistema para o CodeGear Delphi 2007 for win32. Pois tendo visto e estudando sobre esta nova versão, melhorou e foi muito o Delphi.
Te recomendo voce comessar novamente seu sistema. Digo do zero mesmo. Agora se voce tiver uma aplicação, menor. Recomento Firebird para seu Banco de Dados.
Quaisquer dúvidas.
Um abraço.
Att.
GOSTEI 0
Felipeucc
30/12/2007
Caros amigos,
Pode-se haver a necessidade de se trazer todos os registros, logo uma clausula where no select não seria o ideal, e o locate muito menos.
Por isso existe o Filter no ClientDataSet.
Exemplo:
ClientDataSet.Filtered := False;
ClientDataSet.Filter := ´CampoNome = ´ + Edit1.text;
ClientDataSet.Filtered := True;
No help do Delphi pode-se ver que é possível usar LIKE, >, <>, <, não necessáriamente o =.
Pode-se haver a necessidade de se trazer todos os registros, logo uma clausula where no select não seria o ideal, e o locate muito menos.
Por isso existe o Filter no ClientDataSet.
Exemplo:
ClientDataSet.Filtered := False;
ClientDataSet.Filter := ´CampoNome = ´ + Edit1.text;
ClientDataSet.Filtered := True;
No help do Delphi pode-se ver que é possível usar LIKE, >, <>, <, não necessáriamente o =.
GOSTEI 0
Devmedia
30/12/2007
Caros amigos,
Pode-se haver a necessidade de se trazer todos os registros, logo uma clausula where no select não seria o ideal, e o locate muito menos.
Por isso existe o Filter no ClientDataSet.
Exemplo:
ClientDataSet.Filtered := False;
ClientDataSet.Filter := ´CampoNome = ´ + Edit1.text;
ClientDataSet.Filtered := True;
No help do Delphi pode-se ver que é possível usar LIKE, >, <>, <, não necessáriamente o =.
Amigo felipeucc.
Tudo bom cara?
Só uma coisa. Acho que você não leu a resposta do nosso amigo cps.art que criou este tópico. Segue:
Meu Banco de Dados é DBase e utilizo um componente chamado Halcyon, que aproveita tudo do Clipper.
Por isso estou tendo um trabalhão danado pra adaptar para o Delphi.
Já tentei o LOCATE de diversas formas e não dá certo, pois com esse componente, fico limitado às formas de sintese do comando.
Alem disso não tenho um Help do componente, tenho que ficar nas tentativas, e como parece que só eu utilizo o Halcyon, pouca gente pode me ajudar.
Mas a maioria dos problemas resolvi com dicas do forum, pois aproveito um pouco de cada sugestão e acaba funcionando.
Acho que vou ter que migrar para um gerenciador de Banco de Dados mais adaptado ao Delphi.
Nesse caso, as sugestões dos amigos mais experientes serão bem vindas.
Um agrande abraço a todos.
Agora em questão ao que voce disse:
Pode-se haver a necessidade de se trazer todos os registros, logo uma clausula where no select não seria o ideal ...
Quando se executa um comando SQL da forma que passei:
DM.ClientDataSet.Active := False; DM.SQLQuery.SQL.Clear; DM.SQLQuery.SQL.Add(´select * from CADASTRO_DE_CIDADES where); DM.SQLQuery.SQL.Add(´NOME_CIDADE like :NOME´); DM.SQLQuery.ParamByName(´NOME´).AsString:=´¬´+EditConsultaCidades.Text+´¬´; DM.SQLQuery.ExecSQL; DM.ClientDataSet.Active := True;
Voce irá retornar todos os campos que ´coincidirem´ até o final do seu texto/valor que deseja buscar. E exibe todos que encontrar no DBGrid por exemplo.
Agora da outra forma:
DM.ClientDataSet.Active := False; DM.SQLQuery.SQL.Clear; DM.SQLQuery.SQL.Add(´select * from CADASTRO_DE_CIDADES where=´); DM.SQLQuery.SQL.Add(´EditConsultaCidades.Text´); DM.SQLQuery.Open; DM.ClientDataSet.Active := True;
Faz a busca por todos os textos/valores que tiverem na minha tabela e exibe todos que encontrar no DBGrid por exemplo.
Utilizar o comando:
ClientDataSet.Filtered := False; ClientDataSet.Filter := ´CampoNome = ´ + Edit1.text; ClientDataSet.Filtered := True;
Voce irá estar utilizando, vamos dizer assim memória ´atoa´ no seu projeto. Já que voce tem um Banco de Dados aonde ele mesmo já pode lhe retornar estas consultas.
Um abraço.
Att.
GOSTEI 0
Devmedia
30/12/2007
Amigo cps.art
Tudo bom cara?
Mais uma ajuda no seu componente ´Halcyon´, talvez já conheça mais: http://www.grifsolu.com ta ae o site do Desnvolvedor deste componente. La possui um Forum (Em inglês). Talvez lhe ajude.
Agora:
http://forum.devmedia.com.br/viewtopic.php?p=104197&sid=f90578f4117341d94443a137d8c76c09
Achei este tópico. Nossa, desde 2004 voce está na luta com este componente?
Um abraço.
Att.
Tudo bom cara?
Mais uma ajuda no seu componente ´Halcyon´, talvez já conheça mais: http://www.grifsolu.com ta ae o site do Desnvolvedor deste componente. La possui um Forum (Em inglês). Talvez lhe ajude.
Agora:
http://forum.devmedia.com.br/viewtopic.php?p=104197&sid=f90578f4117341d94443a137d8c76c09
Achei este tópico. Nossa, desde 2004 voce está na luta com este componente?
Um abraço.
Att.
GOSTEI 0
Cps.art
30/12/2007
Olá amigos, cá estou eu de volta.
Cheguei na conclusão que com o [b:f6e50151e5]Locate[/b:f6e50151e5] não dá pra encontrar nomes que contenham parte do que foi digitado na Edit.
Consegui isso no [b:f6e50151e5]DBGrid[/b:f6e50151e5].
Não é bem o que eu queria mas dá pra quebrar o galho por enquanto.
E quanto ao que observou o amigo [b:f6e50151e5]lucasfss[/b:f6e50151e5], é isso mesmo.
Adquiri esse componente mais ou menos em 2004 e realmente no site da Griftsolu existe um forum em ingles, e como sou meio ruim nisso, to apanhando um pouco, mas chego lá um dia, principalmente com a ajuda de vocês.
Vou postar outro tópico com referência aos [b:f6e50151e5]Clicks[/b:f6e50151e5] nas células da [b:f6e50151e5]DBGrid[/b:f6e50151e5].
Então vocês estão convocados a ´visitar´ o tópico e me dar uma ajudazinha.
Brincadeira......
Sei que posso contar sempre com vocês.
Um grande abraço.
Cheguei na conclusão que com o [b:f6e50151e5]Locate[/b:f6e50151e5] não dá pra encontrar nomes que contenham parte do que foi digitado na Edit.
Consegui isso no [b:f6e50151e5]DBGrid[/b:f6e50151e5].
Não é bem o que eu queria mas dá pra quebrar o galho por enquanto.
E quanto ao que observou o amigo [b:f6e50151e5]lucasfss[/b:f6e50151e5], é isso mesmo.
Adquiri esse componente mais ou menos em 2004 e realmente no site da Griftsolu existe um forum em ingles, e como sou meio ruim nisso, to apanhando um pouco, mas chego lá um dia, principalmente com a ajuda de vocês.
Vou postar outro tópico com referência aos [b:f6e50151e5]Clicks[/b:f6e50151e5] nas células da [b:f6e50151e5]DBGrid[/b:f6e50151e5].
Então vocês estão convocados a ´visitar´ o tópico e me dar uma ajudazinha.
Brincadeira......
Sei que posso contar sempre com vocês.
Um grande abraço.
GOSTEI 0