Jump to content
dipacheco

select através de filtragem

Recommended Posts

dipacheco

Boas pessoal... é o seguinte, quero fazer uma filtragem de dados numa tabela sql. Já construí o design de todas as opções por que se pode filtrar. No entanto gostava de saber se há maneira de fazer o select mediante os filtros porque posso selecionar 1 ou mais q 1, ou ate mesmo nenhum...

Exemplo:

Filtrar por:

Nome

Idade

Localidade

Peso

Altura

DataNascimento

Se eu quiser mostrar todos os Manueis nascidos entre 01/01/1900 e 01/01/2011 poderei faze-lo... Mas ha maneira de o fazer sem ter q testar se a caixa de texto tem texto ou nao? basicametne queria que ele aplicasse o filtro numa linha só, se for possivel, de maneira a evitar testes desnecessário e a dar eficácia ao programa. ao mesmo tempo tnh q ter a preocupaçao q pode nao ter filtros e o q ele fará é terá d ter o mesmo resultado que um select * from tabela.

Share this post


Link to post
Share on other sites
Caça

Tens de criar a consulta base, ec:

SELECT * FROM TABELA WHERE DATA = '2011-01-01'

Depois tens de verificar se as textboxes estão preenchidas, caso estejam adicionas o filtro a consulta, ex:

AND NOME LIKE '%TESTE%'


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
dipacheco

mas e se a consulta base nao tiver where...

imagina q tnh "select a,b,c,d from tabela"

e depois escrevo numa caixa de texto um nome... entao, tem algo nessa caixa de texto adicionaria and nome=textbox1.text... e o where? e o and q n é necessario... :)

so se fizer 1 variavel de controlo em q seja 0 qnd está simples e seja 1 qnd ja tem where... e dentro d cada textbox1 tnh d ver se tem algo e se tiver, ver se a variavel d teste é 0 ou 1... ou sejas um if para decidir a string a concatenar... so se for assim

Share this post


Link to post
Share on other sites
Caça

Cria uma variável para a consulta base e outra para os filtros.

Se a variável dos filtros for diferente de nada fazes a concatenação das duas, mas com o WHERE entre elas


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
dipacheco

yep.. é isso!

ja agora aproveito para perguntar... é suposto eu concatenar quando está com texto nas textboxes... mas quando está vazio é suposto ela ficar simples. agora imagina q eu escrevo e dps apago... ha alguma metodo associado às textboxes q caso fique vazio anule o q fiz??

Share this post


Link to post
Share on other sites
jpaulino

Colocas sempre um WHERE com uma condição sempre verdadeira, como por exemplo "SELECT * FROM tabela WHERE id IS NOT NULL". Depois, se tiveres mais informação a filtar é só acrescentar " AND campo = 123", etc

Share this post


Link to post
Share on other sites
dipacheco

sim, facilita bastante! :) obrigado.

no post anterior deixei uma pergunta mas acho q n fui bem explicito... eu se usar o evento textbox1_textchanged, mal ele escreve algo acrescento o "and nome=x"... mas se apagar tudo ele nao remove... ha alguma maneira de fazer com que ele escreva apenas se la tiver algo? ou seja, um evento q n o textchanged...

Share this post


Link to post
Share on other sites
dipacheco

tou a ser burro... neste caso n posso fazer atraves da alteraçao na textbox... tem d ser qnd faço enter ir ver se está preenchido ou nao... se está coloca condição, caso contrario n faz nada! nao liguem!

Share this post


Link to post
Share on other sites
jpaulino

no post anterior deixei uma pergunta mas acho q n fui bem explicito... eu se usar o evento textbox1_textchanged, mal ele escreve algo acrescento o "and nome=x"... mas se apagar tudo ele nao remove... ha alguma maneira de fazer com que ele escreva apenas se la tiver algo? ou seja, um evento q n o textchanged...

É preciso ter cuidado com o evento TextChanged() porque pode tornar a pesquisa um pouco lenta pois sempre que insere uma letra, actualiza a listagem.

No entanto, e se quiseres mesmo usar, podes colocar um timer a dar um atraso para permitir ele escrever. Sempre que escreva faz o restart ao timer, e passados x milisegundo, actualiza a lista.

Mas podes sempre actualizar quando sair da textbox ou quanto pressionar um botão (o que permite actualizar vários campos e só depois actualiza-se a lista). Esta forma pode ser muito mais interessante, mesmo para o utilizador.

Share this post


Link to post
Share on other sites
dipacheco

uma duvida q surgiu agora tb haver com isto. imagina q eu tnh uma tabela com milhares d registos, e dentro desses registos ha repetiçoes. ha maneira de "anular" as repetiçoes e somar os valores q forem mostrados?

basicamente o q tnh sao produtos com quantidades, valores e taxas. se houvesse repetiçao d um produto quero q apareça o nome desse produtos o somatório das quantidades, o somatório dos valores e o somatórios das taxas. é possivel?

Share this post


Link to post
Share on other sites
dipacheco

se usar directamente o group by ele faz somas?

tenho outro problema... existem produtos taxados com taxas diferentes... ele separa?

Share this post


Link to post
Share on other sites
Caça

Tens de usar a função SUM nos campos a somar.


Separa.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
dipacheco

mas separa se fizer como? group by Nome ou se fizer group by Nome and group by Taxa?

Share this post


Link to post
Share on other sites
Caça

Tudo o que colocares no group by é agrupado, ex:

1 | Pedro | 10

1 | Pedro | 10

2 | Pedros | 10

SELECT ID, NOME, SUM(VALOR) AS TOTAL
FROM TABELA
GROUP BY ID, NOME

Output

1 | Pedro | 20

2 | Pedros | 10


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
dipacheco

outra encrenca... estava a gravar mal os dados, em vez de float estava a gravar como varchar e agora nao deixa fazer sum... ha maneira de contornar isto?

Share this post


Link to post
Share on other sites
Caça

Podes

SUM(CONVERT(FLOAT, NOME_DO_CAMPO)) AS TOTAL


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
dipacheco

deu-me este erro... lol

Error converting data type varchar to float.

Não sei se isto ajuda mas a minha string é esta

con = "SELECT Produto,Nome,SUM(Convert(Float,Quantidade)),SUM(Convert(Float,Valor)),TaxaIVA AS TOTAL FROM Arquivo WHERE Posto IS NOT NULL GROUP BY Produto,Nome,TaxaIVA"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.