Jump to content
Sign in to follow this  
arrelialp

Relacionar duas ComboBoxes

Recommended Posts

arrelialp

Viva,

Tenho duas tabelas:

ManutencaoFirmas

  • ID_Firma int (Campo Chave)
  • Nome nchar(255)
  • Tipo_Firma int
  • Status bit
  • Observacoes nvarchar (MAX)

TipoFirma

  • ID_TipoFirma int (Campo Chave)
  • Tipo varchar(50)

As duas tabelas relacionam-se pelos campos Tipo_Firma (Tabela ManutencaoFirmas) e ID_TipoFirma (Tabela TipoFirma).

Em Visual Net 2008, tenho um form com duas ComboBoxes. Já consegui, no load do Form carregar na 1.ª ComboBox (ComboBoxTipoFirma) a tabela TipoFirmas, campo "Tipo". Na 2.ª ComboBox (ComboBoxFirma) a tabela ManutencaoFirmas, campo "Nome".

O que não estou a conseguir é, nos eventos de ambas as ComboBoxes, SelectedIndexChanged, quando altero uma, aparecerem-me apenas os registos relacionados e vice-versa:

PrivateSub ComboBoxTipoFirma_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxTipoFirma.SelectedIndexChanged
con = New SqlConnection(connectionString)
con.Open()
Dim cmd As New SqlCommand("SELECT ManutencaoFirmas.Nome " & _

"FROM ManutencaoFirmas INNER JOIN TipoFirma ON " & _

"ManutencaoFirmas.Tipo_Firma = TipoFirma.ID_TipoFirma " & _

"where TipoFirma.Tipo = '" & ComboBoxTipoFirma.SelectedItem & "'", con)

Dim drdr As SqlDataReader
drdr = cmd.ExecuteReader
drdr.Read()
ComboBoxFirma.Text = drdr.Item("Nome").ToString
con.Close()
End Sub

Private Sub ComboBoxFirma_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxFirma.SelectedIndexChanged
con = New SqlConnection(connectionString)
con.Open()
Dim cmd As New SqlCommand("SELECT TipoFirma.Tipo " & _
"FROM TipoFirma RIGHT JOIN ManutencaoFirmas ON " & _
"ManutencaoFirmas.Tipo_Firma = Tipo_Firma.ID_TipoFirma " & _
"where (ManutencaoFirmas.Nome) = '" & ComboBoxFirma.SelectedItem & "'", con)
Dim drdr As SqlDataReader
drdr = cmd.ExecuteReader
drdr.Read()
ComboBoxTipoFirma.Text = drdr.Item("Tipo")
con.Close()
End Sub

O erro que obtenho é o seguinte: "The muiti-part identifier "Tipo_Firma.ID_TipoFirma" could not be bound. Alguém me pode indicar outra forma de fazer isto ou corrigir o que estou a fazer mal? Agradeço desde já.

Share this post


Link to post
Share on other sites
Caça

Dim cmd As New SqlCommand("SELECT TipoFirma.Tipo " & _
"FROM TipoFirma RIGHT JOIN ManutencaoFirmas ON " & _
"ManutencaoFirmas.Tipo_Firma = Tipo_Firma.ID_TipoFirma " & _
"where (ManutencaoFirmas.Nome) = '" & ComboBoxFirma.SelectedItem & "'", con)

Repara, num sitio tens TipoFirma, no outro tens Tipo_Firma


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
arrelialp

Upss, tens razão!!

Só que agora testei o código e se escolho um tipo de firma (campo Tipo) da Tabela TipoFirma na ComboBoxTipoFirma aparece-me na outra ComboBox (ComboBoxFirma) inicialmente o 1.º registo que tem que ver com a escolha em função da 1.ª ComboBox. Mas quando abro a ComboBox reparo que continuam lá todos os outros registos.

Supõe que tenho um tipo de firma "Grandes Superfícies". Se selecciono este campo aparece-me El Corte Inglês, mas eu queria Pão de Açucar, então abro a Combo e agora, além das grandes superfícies tenho ainda todas as outras firmas para além de grandes superfícies.

Será que me podes ajudar? 🤔 

Share this post


Link to post
Share on other sites
arrelialp

Tipo de Firma: ComboBoxTipoFirma

Firma: ComboBoxFirma

Se na ComboBoxTipoFirma seleccionar "Grandes Superfícies" na ComboBoxFirma só me podem aparecer nomes de Firmas que sejam Grandes Superfíceis como Jumbo, Continente, etc. Esta parte NÃO FUNCIONA (ver código em baixo)

Se na ComboBoxFirma seleccionar por exemplo a Firma Continente, na ComboBoxTipoFirma só me pode aparecer "Grandes Superfícies". Esta parte está a funcionar

Código:

 
Private Sub ComboBoxFirma_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxFirma.SelectedIndexChanged

        con = New SqlConnection(connectionString)

        con.Open()

        Dim cmd As New SqlCommand("SELECT TipoFirma.Tipo " & _

                                 "FROM TipoFirma LEFT JOIN ManutencaoFirmas ON " & _

                                 "ManutencaoFirmas.Tipo_Firma = TipoFirma.ID_TipoFirma " & _

                                 "where (ManutencaoFirmas.Nome) = '" & ComboBoxFirma.SelectedItem & "'", con)

        Dim drdr As SqlDataReader

        drdr = cmd.ExecuteReader

        drdr.Read()

        ComboBoxTipoFirma.Text = drdr.Item("Tipo")

        con.Close()

    End Sub

Já testei o meu select com INNER JOIN, LEFT JOIN e RIGHT JOIN e nada! Haverá uma forma melhor de fazer isto?

Share this post


Link to post
Share on other sites
Caça

Esse código só é executado quando um item da combobox ComboBoxFirma for seleccionado e o que tu queres é que ele seja executado quando na ComboBoxTipoFirma um item seja seleccionado.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
bioshock
SELECT Tabela1.*, Tabela2.*
FROM Tabela1
INNER JOIN Tabela1.CampoXpto ON Tabela2.CampoXPTO
WHERE Tabela2.TypeOf = "GrandesSuperficies" AND Tabela2.Nome = ComboBoxFirma.SelectedItem

Share this post


Link to post
Share on other sites
arrelialp

O que eu pretendia é que consoante a escolha que faço numa Combo aparece-me a lista de possíveis valores na outra e vice-versa.

Vou mais uma vez explicar com outro exemplo. Tenho 2 ComboBoxes. Uma que se chama TipoAnimais e outra Animais. Se na ComboBox TipoAnimais seleccionar Mamíferos, aparecem-me na ComboBox Animais apenas animais que sejam mamíferos.

Se na ComboBox Animais escolher golfinho então, na ComboBox TipoAnimais deve aparecer Mamíferos.

No Load do Form são carregados inicialmente todos os animais que existem à face da terra na ComboBox Animais assim como na ComboBox TipoAnimais são carregadas todas as categorias de animais existentes.

Como é que isto se faz?

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
Sign in to follow this  

×
×
  • 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.