Jump to content
Bessa

Filtrar Dados de ComboBox

Recommended Posts

Bessa

Olá Colegas! :D

Estou com um Problema. Isto devido a estar habituado a VB6, e o 2008 ser-me muitíssimo estranho. Mas estou a habituar-me! :D

É o seguinte:

- Após escolher um Código de um Artigo, ele passa automaticamente para o campo Artigo, que está nas operações. Até aqui, tudo bem. O problema, é que eu queria que na Lista da ComboBox da Parte das OPERAÇÕES, apenas aparecesse a lista com o código do Artigo que escolhi, ao invés de todos os artigos existentes! Neste caso que vou mostrar, apenas quero que mostre aqueles QUATRO registos dentro do quadrado vermelho (ABT4001301), ao invés de todos os outros.

problema-jpg-8b3aa6f07c791ab8846c4f429ea

Como posso fazer isso? Alguém tem um tuto ou me dá umas luzes? Estou desde ontem ao fim da tarde a "matar-me" nisto lol Estou farto de procurar na Net e não encontro resposta. :confused:

Agradeço desde já uma possível ajuda.

Cumprimentos

Bessa

Share this post


Link to post
Share on other sites
RobinHood

Boas esses dados estão na bd ou mesmo na ComboBox???

se não tiveres os dados na bd acho que dá para fazer isto:

Segunda ComboBox.text = Primeira ComboBox.text

Se os dados da segunda combobox estiverem na bd podes fazer assim:

Try

            Dim sabe As String

            sabe = primeiracombobox.Text

            Select Case sabe

                Case (sabe)

                    Dim ConnectionString As String = "TUA LIGAÇÃO Á BD"

                    Dim connection As New SqlConnection(ConnectionString)

                    Dim command As New System.Data.SqlClient.SqlCommand("SELECT teu campo FROM tua tabela WHERE teu campo = @AAA ", connection)


                    connection.Open()

                    command.Parameters.AddWithValue("@AAA", Me.PRIMEIRA COMBOBOX.Text)

                    Dim apap As System.Data.SqlClient.SqlDataReader = command.ExecuteReader()

                    ''Limpa os dados da combobox
                    SEGUNDA COMBOBOX.Items.Clear()

                    If apap.HasRows Then

                        While apap.Read() ''-> Para ler todos os dados. O que tinhas so le o primeiro volar
                            SEGUNDA COMBOBOX.Items.Add(apap.GetValue(0).ToString()) ''-> Numa combobox, adiciona-se os valores
                        End While

                    End If

                    connection.Close()


            End Select

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

Experimenta assim.

Share this post


Link to post
Share on other sites
Bessa

Desde já, muito obrigado pela resposta e vontade em ajudar.

Os dados estão na BD, em Access 2007.

Após mudar o código, que muito gentilmente facultaste, apenas apareceu um erro nele: Type 'SqlConnection' is not defined.

Coloquei "Imports System.Data.SqlClient" no General e já deu.

No Entanto, após testar deu este erro:

erro-jpg-118790317a9d0d9aba2f15b06dcf8d9

Que poderá ser?

Obrigado desde já.

Share this post


Link to post
Share on other sites
RobinHood

Acho que é falta das bibliotecas  :confused: .... Mete estas bibliotecas.... antes do


Imports System.Data.SqlClient
Imports System.Data.Odbc
Imports System.Data.OleDb

Public Class Teu Form

End Class

Isto é um pedaço de código que eu uso para ligar ao SQL Server... acho que também deve funcionar com o access... se não diz que tenho aqui

outro.

Pois não sei bem---- mas isso está a preencher os dados através da bd por isso... não é a passagem de nenhum campo da bd para a textbox?

Experimenta por etapas(Campo a campo) e mete algumas msgbox para retornar os resultados que pertendes para as textbox.

 

Share this post


Link to post
Share on other sites
Bessa

Pois não sei bem---- mas isso está a preencher os dados através da bd por isso... não é a passagem de nenhum campo da bd para a textbox?

Experimenta por etapas(Campo a campo) e mete algumas msgbox para retornar os resultados que pertendes para as textbox.

 

A 1ª ComboBox está Ligada à BD, o que permite ir buscar todos esses dados.

A 2ª ComboBox também está Ligada à BD, para ir buscar outros dados que também são necessários e que também têm o Numero do Artigo. São duas tabelas diferentes, que têm em comum o Código do Artigo.

Por isso é que a minha ideia era, na 2ª ComboBox, dependo do artigo que fosse acima escrito, aparecer na 2ª ComboBox, apenas os registos com aquele Código do Artigo. :D

Só que já estive a tentar de muitas formas e não consegui. Sabes de mais soluções? :confused:

Obrigado!

Share this post


Link to post
Share on other sites
RobinHood

Mas tipo eu tambem utilizei este código para fazer um cena parecida do tipo: :confused:

a 1ª ComboBox vai buscar os dados á tabela Famílias

e depois a 2ª ComboBox vai buscar os dados á tabela Sub-famílias

As duas tabelas têm o mesmo campo em comum "familia" e o que faz o código é que quando escolho a família .... ele filtra os dados da 2ª cbox de acordo  com a familia... comigo funciona..... :cheesygrin:

mas talvez o pessoal aqui te possa ajudar melhor pk eu ainda sou novato em vs2010 :D

Mas a combobox's funcionam ???

Share this post


Link to post
Share on other sites
Bessa

Pois...Parece-me ser +- isso que preciso.

As ComboBox funcionam, isto é, aparece os dados todos nas duas. :D Mas Não está a filtrar, apesar do código. :confused:

Este é VS/VB 2008. :D

Estou mesmo à deriva com isto! o.O Um gajo foi habituado a VB 6.0, depois aparece VB 2008 e ...Eu Pelo menos... 😲

Share this post


Link to post
Share on other sites
RobinHood

Esta query é o parâmetro que tu queres, por isso é para a segunda tabela não para a primeira... isto é vai Seleccionar os dados da segunda tabela de acordo com o valor da primeira cbox

 
Dim command As New System.Data.SqlClient.SqlCommand("SELECT teu campo FROM tua tabela WHERE teu campo = @AAA ", connection)

do tipo a primeira cb deve ficar assim:

- http://img217.imageshack.us/i/cb1h.png/

a segunda deve estar assim:

- http://img846.imageshack.us/i/cb2.png/

Pois Por isso é que eu aprendi c++ primeiro e só no ano passado é que passei a vs2010 (logo para começar com esta versão).

Share this post


Link to post
Share on other sites
bioshock

http://wiki.portugal-a-programar.org/dev_net:vb.net:access

Através do link que te dei, encontras aí informações sobre a selecção de dados (SELECT). Só tens que alterar os campos e colocar em vez de:

command.Parameters.Add("@IDCliente", OleDbType.Integer).Value = 3 

isto:

command.Parameters.Add("@TeuCampo", OleDbType.Integer).Value = ComboboxXPTO.Text 

Deves colocar todo o código no evento apropriado da combobox Código de Artigo (Escolher artigo). Só assim, conseguirás filtrar os dados como pretendes.

Share this post


Link to post
Share on other sites
Bessa
Em 05/05/2011 às 12:33, RobinHood disse:

Esta query é o parâmetro que tu queres, por isso é para a segunda tabela não para a primeira... isto é vai Seleccionar os dados da segunda tabela de acordo com o valor da primeira cbox


 
Dim command As New System.Data.SqlClient.SqlCommand("SELECT teu campo FROM tua tabela WHERE teu campo = @AAA ", connection)
 

do tipo a primeira cb deve ficar assim:

- http://img217.imageshack.us/i/cb1h.png/

a segunda deve estar assim:

- http://img846.imageshack.us/i/cb2.png/

Pois Por isso é que eu aprendi c++ primeiro e só no ano passado é que passei a vs2010 (logo para começar com esta versão).

Mas fazendo isso, dá-me este problema:

sd-jpg-22caad9393fee004873d04510c4125ac.

Já agora, em "@AAA" que devo colocar?

___

Em 05/05/2011 às 12:41, bioshock disse:

http://wiki.portugal-a-programar.org/dev_net:vb.net:access

Através do link que te dei, encontras aí informações sobre a selecção de dados (SELECT). Só tens que alterar os campos e colocar em vez de:


command.Parameters.Add("@IDCliente", OleDbType.Integer).Value = 3 
 

isto:


command.Parameters.Add("@TeuCampo", OleDbType.Integer).Value = ComboboxXPTO.Text 
 

Deves colocar todo o código no evento apropriado da combobox Código de Artigo (Escolher artigo). Só assim, conseguirás filtrar os dados como pretendes.

Obrigado! :confused:

Tentei e dá o mesmo problema. :S E dá outro erro neste código: DataAdapter.Fill(MyData, "informix_pp_gamope") ...Que é o nome da Tabela da 2ª Combo...Mas mesmo com a Tabela da 1ª, dá erro... -> System.Data.OleDb.OleDbException was unhandled

Coloquei assim o Código:

       Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Administrador\Desktop" & Application.StartupPath & "\teste.accdb")
        Dim query As String = "SELECT * FROM informix_pp_gamope WHERE ID = @art_codpro"

        Dim command As New OleDbCommand(query, ConnectionString)
        ' Seleccionar os dados da Combo 1
        command.Parameters.Add("@art_codpro", OleDbType.Integer).Value = Gam_codproComboBox.Text

        Dim DataAdapter As New OleDbDataAdapter(command)
        Dim MyData As New DataSet
        DataAdapter.Fill(MyData, "informix_pp_gamope")
 

Share this post


Link to post
Share on other sites
bioshock

My bad. Estava a perceber que tinhas outro tipo de problema.

Se queres preencher uma combobox, deves fazer da seguinte forma:

        Dim Connection As New OleDbConnection(BaseDados)
        Dim query As String = "SELECT Campo FROM Tabela WHERE ID = @Campo"
        Dim Command As New OleDbCommand(query, Connection)
        Command.Parameters.Add("@Campo", OleDbType.Integer).Value = ComboboxXPTO.Text 
       ' Aqui metes a combobox Código do Artigo (secção Escolher Artigo)

        Dim Adapter As New OleDbDataAdapter(Command)
        Dim Table As New DataTable
        Adapter.Fill(Table)

        With ComboBoxXPTO(2) ' Aqui colocas a combobox Código do Artigo (secção Operações)
            .DataSource = Table
            .DisplayMember = "Tabela"
        End With

Share this post


Link to post
Share on other sites
Bessa

Obrigado. :)

No Entanto, dá-me este erro:

"Value of type 'Verificar2TextB.testeDataSet' cannot be converted to 'String'"

Isto acontece nesta linha de código:

Dim Connection As New OleDbConnection(TesteDataSet)

'TesteDataSet foi a BD que coloquei

Já tentei o caminho para a BD, e apenas a BD+formato e dá sempre este erro. ;) Já procurei na Net e não encontro a resolução do problema. :S

E já agora, este código:

.DataSource = Table

Em "Table", deixou assim ou devo colocar a Tabela da Escolha de Artigo (Na Parte das Operações) ? É que coloquei a tabela e deu erro...

Obrigado desde já.

Share this post


Link to post
Share on other sites
RobinHood

Dim Connection As New OleDbConnection(TesteDataSet)

'TesteDataSet foi a BD que coloquei

Então mas onde está TesteDataSet não é o caminho da bd????  🤔

tens a certeza que o parametro que chamas no programa

 Command.Parameters.Add("@Campo", OleDbType.Integer).Value = ComboboxXPTO.Text 

é do mesmo tipo que está na bd???? aqui o teu parâmetro é do tipo Integer... por isso na bd deverá estar Int no campo.....

se na bd o campo estiver do tipo texto aqui no parâmetro tens de ter assim:

 Command.Parameters.Add("@Campo", OleDbType.VarChar).Value = ComboboxXPTO.Text 

Share this post


Link to post
Share on other sites
Bessa

Realmente estava em texto (para dar Texto+Números)... :wallbash:

Mudei para VarChar. No Entanto continua a dar o problema no DataSet...E sim, a BD este está no sitio correto desde inicio. ;)

Share this post


Link to post
Share on other sites
bioshock

"Value of type 'Verificar2TextB.testeDataSet' cannot be converted to 'String'"

Dim Connection As New OleDbConnection(TesteDataSet)

Isso já é problema teu. Nada tem haver com o código que te dei. Podes encontrar dois tipos de connectionString neste artigo (Access 2003 e Access 2007). Deves colocar o caminho referente à base de dados e não o nome do Dataset que criaste via wizard.

E já agora, este código:

.DataSource = Table

É para deixares ficar tal e qual.

Share this post


Link to post
Share on other sites
Bessa

Notei agora que já tinha tentado isso. :) Mas não dava porque dava erro nas "\" de tipo "C:\Users\"... :) E no 12.0 diz que falta parêntesis! ;)

Que poderá ser? 🤔

Depois tenho de voltar à carga com isto. Porque é uma função que será realmente necessária.

Obrigado :P

Share this post


Link to post
Share on other sites
bioshock

No link que te dei tens lá as connections direitinhas. Com o exemplo que lá coloquei nas connections, eu vou buscar a base de dados à pasta bin\debug\ da aplicação, experimenta também colocar a tua base de dados nessa pasta específica da aplicação. Caso o faças, apenas terás de alterar o nome da base de dados na connectionString.

Mais não te posso nem vou fazer. Não é preciso criares tópicos/posts por cada erro que te dá.

Existe o google e existe a pesquisa P@P Fórum, dúvidas dessas são às dezenas. ;)

Share this post


Link to post
Share on other sites
Bessa

Estás a ser injusto. Eu não sou como a maior parte que pede Código de mão beijada. Por isso peço sempre que me dêm algumas luzes, isto é que me digam que funções utilizar e como fazer. Obviamente que se tiver um Código exemplo, excelente, senão também não venho para aqui dizer "ah e tal quero era o Código".

E Em todos os tópicos que criei, eu procurei antes no Google e também aqui no P@P. Se quiser confirmar, experimenta então tu pesquisar e se tu encontrares a resolução, então sou eu que procuro muito mal mesmo. ;) Ainda num outro tópico, refiri links de tópicos de cá ou então de resolução que encontrei no Google e não funcionaram.

Obviamente que se não encontro, pergunto a quem sabe. Mas pronto. Tudo bem. Provavelmente, há tanto pessoal que só quer código feito, que acabei por ser visado como que outro que é assim. Mas não sou. Mas claro que não sou burro ao ponto de rejeitar quem tem código à mão. Mas se não tiver, basta dizer, que vou ao google coo sempre fiz e procuro. :P

E estes problemas todos surgem porque realmente não estou nada à vontade com este código, mas tenho de utilizar... :)

Portanto, não digo que não tenhas razão ao dizer isso, dado que realmente já fiz imensas perguntas que provavelmente para vós que sabem muito disto, era extremamente fácil! lol Mas, pessoa,ente, há coisas que não compreendo neste VB. Agora queria contar campos, e nem a propriedade COUNT tem! lol Lá tenho que fazer, o que faço desde inicio: Google It :)

Desculpa lá então, se te chateei assim tanto.. (Realmente ainda foram várias perguntas)

Obrigado por toda a ajuda que deste.  :) E ao Caça também.

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.