PDA

View Full Version : Database Design for Multiple Filters



lipse
11-12-2011, 09:50 PM
Hi Guys, Me Again.
First of All, thanks in advance for any help.

Im doing a userform with 6 comboboxes.
These box are populated in a auxiliar spreadsheet.
When user Select a option in Combobox1, i use Change event to call a method passing a query (string) as parameter. That method applies the filter in database, and call other method to recalculate all values in spreadsheet.

At this point, everything's is fine. When user select first filter in combo 1, i apply. When select filter in combo2, apply using the previous filtered data (used in combo1)... and go...

My problem is, all combo boxes have an option to disable the specific filter (Disable the filter for specific combobox), so im thinking how ill do that... i have no ideia, anyone knows the best way? Im thinking about store all filters and pass all filters in every method call, following this idea i dont know if it solve my problem. Any suggestions? Ideas?

Again, thanks in advance.
Sorry about my English (i dont speak english)

Benzadeus
11-14-2011, 02:40 PM
Olá,

Seria melhor você utilizar filtro avançado ao invés de, simplesmente, um filtro.
Você sabe usar filtro avançado? O Excel tem uma ajuda boa de como usá-la.

---

Instead of using filter method, you should use advanced filter.

lipse
11-14-2011, 09:09 PM
Benzadeus, Obrigado pela resposta.
O jeito que dei foi aplicar o filtro sempre mesmo, tenho 6 combo boxes, armazeno a query de cada uma num vetor de 6 posições, quando executa o evento change eu chamo a função que calcula e verifico em cada posição do vetor se a string não é nula (se existe query, ou seja, existe filtro) se não for nula eu filtro, se não passo para a próxima. Funcionou bem, fica a dica....

Obrigado novamente pela resposta.

Benzadeus
11-15-2011, 06:04 AM
OK. Vale a pena eu compartilhar a dica:
Normalmente, o caminho da evolução de programação dos desenvolvedores de sistemas VBA em Excel segue o caminho Filtro - Filtro Avançado - SQL. Você poderia começar a experimentar usar o SQL, que tal?
É necessário criar uma cadeia de conexão com o servidor (explicado no link a seguir), o cabeçalho da tabela deve-se iniciar na célula A1, e a instrução SQL pode ser do tipo:
SELECT nome, endereço, idade
FROM banco
WHERE nome='Feli%' AND idade=22
(strings ficam entre aspas simples e números foram de aspas simples. caracteres coringas é o símbolo %)
http://www.ambienteoffice.com.br/excel/manipular_uma_pasta_de_trabalho_atraves_de_uma_conexao_ado/

lipse
11-15-2011, 06:25 AM
Obrigado pela resposta amigo, então na verdade foi assim mesmo que eu fiz.. tipo, eu tenho uma planilha com 26 colunas, sendo que uma delas é uma data (ano e mes no formato YYYYMM). Eu aplico um autofiltro nessa coluna para pegar cada data especifica, copio essa planilha filtrada para outra, e aplico as query's (usando SQL) nessa planilha. O meu problema era a questão de interação entre os filtros, quando haviam multiplas seleções, o jeito que dei foi reaplicar as query's sempre.

Obrigado pelo link, não tinha achado nada parecido na internet dessa qualidade ainda, se tiver mais coisas interessantes, poste!

Aproveitando o interesse mútuo, existe alguma maneira de atualizar o "Text" de um Combobox sem disparar o evento Change?

Grato.

Benzadeus
11-16-2011, 03:39 AM
Obrigado pelo link. Você pode assinar o RSS do site para obter novidades.

Em relação ao ComboBox, não é possível fazer o que deseja diretamente, no entanto, há um traquejo simples. Use um código como:

Dim blEventos As Boolean

Private Sub ComboBox1_Change()
If Not blEventos Then Exit Sub

MsgBox ComboBox1

End Sub

Private Sub ComboBox2_Change()
If Not blEventos Then Exit Sub

MsgBox ComboBox2

End Sub

Private Sub CommandButton1_Click()
'Alternar entre habilitar/desabilitar eventos

blEventos = Not blEventos

End Sub

Private Sub UserForm_Initialize()
blEventos = True

ComboBox1.AddItem "Felipe"
ComboBox1.AddItem "Costa"
ComboBox1.AddItem "Gualberto"
ComboBox2.AddItem "Felipe"
ComboBox2.AddItem "Costa"
ComboBox2.AddItem "Gualberto"

End Sub

Ppara usar o código, crie um formulário com um botão e dois Combobox. O botão alterna entre os modos de habilitar/desabilitar eventos.