Jump to content
Sign in to follow this  
arrelialp

Preencher TextBoxes

Achas que, mediante as questões colocadas, há dificuldade de interpretação  

4 members have voted

  1. 1. Achas que, mediante as questões colocadas, há dificuldade de interpretação

    • Sempre
      1
    • Nem sempre
      1
    • Ás vezes
      2
    • Nunca
      0


Recommended Posts

arrelialp

Viva,

Queria preencher as Text Box - Zona Azul em baixo (Nome, Tipo de Externo, N.º Doc. Ident., Firma, Tipo Firma e Observações)  - mediante a selecção que faço nas Combo Boxes em cima (isto já consigo). O que devo fazer, aproveitando o select que já está feito?

externo.jpg

O código é o seguinte:


Public Class Form
     Dim con As SqlConnection
     Dim connectionString As String = ("Data Source=…")
     Dim comando As SqlCommand

    Private bsNome As New BindingSource
     Private bsNum As New BindingSource
    
     Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
         con = New SqlConnection(connectionString)
         Dim com1 As New SqlCommand("Select ID_Externo, ManutencaoExternos.Nome + ' ' + ManutencaoExternos.Apelido [NomeCompleto], " & _
                                    "ManutencaoExternos.Num_Cartao_Ident, ManutencaoExternos.Observacoes, " & _
                                    "TipoExterno.Tipo As TipoExterno, ManutencaoFirmas.Nome As Firma, TipoFirma.Tipo As Tipo " & _
                                    "FROM ManutencaoExternos INNER JOIN " & _
                                    "ManutencaoFirmas ON ManutencaoExternos.ID_Firma = ManutencaoFirmas.ID_Firma RIGHT JOIN " & _
                                    "TipoFirma ON ManutencaoFirmas.Tipo_Firma = TipoFirma.ID_TipoFirma RIGHT JOIN " & _
                                    "TipoExterno ON ManutencaoExternos.ID_TipoExterno = TipoExterno.ID_TipoExterno " & _
                                    "WHERE ManutencaoExternos.Status = 1 ORDER BY NomeCompleto", con)
         Dim dt1 As New DataTable
         Dim com2 As New SqlCommand("Select ID_Externo, ManutencaoExternos.Nome + ' ' + ManutencaoExternos.Apelido [NomeCompleto], " & _
                                    "ManutencaoExternos.Num_Cartao_Ident, ManutencaoExternos.Observacoes, " & _
                                    "TipoExterno.Tipo As TipoExterno, ManutencaoFirmas.Nome As Firma, TipoFirma.Tipo As Tipo " & _
                                    "FROM ManutencaoExternos INNER JOIN " & _
                                    "ManutencaoFirmas ON ManutencaoExternos.ID_Firma = ManutencaoFirmas.ID_Firma RIGHT JOIN " & _
                                    "TipoFirma ON ManutencaoFirmas.Tipo_Firma = TipoFirma.ID_TipoFirma RIGHT JOIN " & _
                                    "TipoExterno ON ManutencaoExternos.ID_TipoExterno = TipoExterno.ID_TipoExterno " & _
                                    "WHERE ManutencaoExternos.Status = 1 ORDER BY Num_Cartao_Ident", con)
         Dim dt2 As New DataTable
         Dim ad As SqlDataAdapter
          '1 ComboBoxNomeExterno = New SqlDataAdapter(com1)
         ad = New SqlDataAdapter(com1)
         ad.Fill(dt1)
         bsNome.DataSource = dt1
         ComboBoxNomeExterno.DataSource = bsNome
         ComboBoxNomeExterno.DisplayMember = "NomeCompleto"
         ComboBoxNomeExterno.ValueMember = "ID_Externo"
         ComboBoxNomeExterno.SelectedIndex = -1
         '2 ComboBoxNomeFuncionario = New SqlDataAdapter(com2)
         ad = New SqlDataAdapter(com2)
         ad.Fill(dt2)
         bsNum.DataSource = dt2
         ComboBoxNumIdentExt.DataSource = bsNum
         ComboBoxNumIdentExt.DisplayMember = "Num_Cartao_Ident"
         ComboBoxNumIdentExt.ValueMember = "ID_Externo"
         ComboBoxNumIdentExt.SelectedIndex = -1
     End Sub
         Sub ComboBoxNomeExterno_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBoxNomeExterno.SelectionChangeCommitted, ComboBoxNumIdentExt.SelectionChangeCommitted
         Dim cb As ComboBox = CType(sender, ComboBox)
         Select Case cb.Name
             Case "ComboBoxNomeExterno"
                 bsNome.Filter = String.Empty
                 bsNum.Filter = String.Concat("ID_Externo=", cb.SelectedValue)
             Case "ComboBoxNumIdentExt"
                 bsNum.Filter = String.Empty
                 bsNome.Filter = String.Concat("ID_Externo=", cb.SelectedValue)
         End Select
     End Sub
End Class

Obrigado desde já!

Share this post


Link to post
Share on other sites
herty

Eu aconselho.te a dividires o problema.

1º Ok fazes uma query que te devolva todos os nomes dos externos e adicionas à combo.

Depois ao escolheres fazes outra query que te traga o resto da informação.

Cumps

Share this post


Link to post
Share on other sites
arrelialp

Pensei que poderia, a seguir aos queries que faço, por algo do tipo:

TexBoxObservacoes.DisplayMember = "Observacoes"  🤔

Share this post


Link to post
Share on other sites
bioshock

Deves colocar a query dentro do evento SelectedIndexChanged() da Combobox.

Share this post


Link to post
Share on other sites
arrelialp

Não dá!  :wallbash:


Private Sub ComboBoxNomeExterno_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxNomeExterno.SelectedIndexChanged

        con = New SqlConnection(connectionString)

        con.Open()

        Dim cmd As New SqlCommand("Select ManutencaoExternos.Nome + ' ' + ManutencaoExternos.Apelido As [NomeCompleto], " & _

                                  "ManutencaoExternos.Num_Cartao_Ident, ManutencaoExternos.Observacoes, " & _

                                  "TipoExterno.Tipo As TipoExterno, ManutencaoFirmas.Nome As Firma, TipoFirma.Tipo As Tipo " & _

                                  "FROM ManutencaoExternos INNER JOIN " & _

                                  "ManutencaoFirmas ON ManutencaoExternos.ID_Firma = ManutencaoFirmas.ID_Firma RIGHT JOIN " & _

                                  "TipoFirma ON ManutencaoFirmas.Tipo_Firma = TipoFirma.ID_TipoFirma RIGHT JOIN " & _

                                  "TipoExterno ON ManutencaoExternos.ID_TipoExterno = TipoExterno.ID_TipoExterno " & _

                                  "where ManutencaoExternos.Nome + ' ' + ManutencaoExternos.Apelido = '" & ComboBoxNomeExterno.SelectedText & "'", con)

        Dim drdr As SqlDataReader

        drdr = cmd.ExecuteReader

        drdr.Read()

        TextBoxNome.Text = drdr.Item("NomeCompleto").ToString

        TextBoxNumDocIdent.Text = drdr.Item("Num_Cartao_Ident").ToString

        TextBoxObservacoes.Text = drdr.Item("Observacoes").ToString

        TextBoxTipoExterno.Text = drdr.Item("TipoExterno").ToString

        TextBoxFirma.Text = drdr.Item("Firma").ToString

        TextBoxTipoFirma.Text = drdr.Item("Tipo").ToString

        con.Close()

    End Sub 

Dá-me o erro: "Tentativa de leitura inválida quando não estão presentes dados."

Ah, e comentei entretanto o

'ComboBoxNomeExterno.SelectedIndex = -1

Mas se colocar"where ManutencaoExternos.Nome + ' ' + ManutencaoExternos.Apelido = 'Helena Ramos'", con)

Quando o Form é carregado aparecem logo os dados, nas Text Boxes, para este nome...Programar é complicado!!  :)

Share this post


Link to post
Share on other sites
bioshock

Altera esta linha:

 "where ManutencaoExternos.Nome + ' ' + ManutencaoExternos.Apelido = Helena Ramos", con)

Deixa estar na mesma no evento da combobox e diz-me se funciona.

Share this post


Link to post
Share on other sites
bioshock

Então coloca:

"where ManutencaoExternos.Nome = Helena", con)

Se não funcionar, o problema está no resto da query ;)

Share this post


Link to post
Share on other sites
arrelialp

O que é executado primeiro: O "SelectedIndexChanged" ou o "SelectionChangeCommited"?

Quanto ao facto de substituir na cláusula Where por um nome em concreto (neste caso Helena Ramos) já tinha dito que funciona, no evento SelectedIndexChanged (que tu me disseste para fazer).

Só que eu quero que os campos de baixo sejam preenchidos consoante a selecção que se faça nas ComboBoxes"Nome do Externo" ou "Num.Ident. do Externo". E, se não tiver um nome em concreto, assim que o Form é carregado, dá o erro: "Tentativa de leitura inválida quando não estão presentes dados." Não há outra forma de fazer isto?...

Share this post


Link to post
Share on other sites
bioshock

Quanto ao facto de substituir na cláusula Where por um nome em concreto (neste caso Helena Ramos) já tinha dito que funciona, no evento SelectedIndexChanged (que tu me disseste para fazer).

A mim disseste-me isto:

Não! Não funcemina...

Share this post


Link to post
Share on other sites
thoga31

Só um aparte, a poll que está a decorrer neste tópico foi acrescentada. Com que objectivo? 🤔


Knowledge is free!

Share this post


Link to post
Share on other sites
Tuntankamon

Boas

Isto aqui anda uma confusão completa...

Para identificar qual a ordem dos eventos uma boa maneira é meter por exemplo uma msgbox em cada um deles e verificar qual a ordem que elas aparecem.

O que tu precisas para resolver o teu problema é fazer o bind das textbox's a uma origem de dados (datatable,bindingsource).

Podes fazer de duas maneiras, ou carregas os dados todos como tens e seleccionas o correcto por código, ou então no Load do form, preenches ambas as combos só com os valores necessários para ambas e na selecção preenches uma nova datatable que utilizas para fazer o bind.

MSDN

Exemplo:

TextboxNome.Databindings.add("text",NomeDaDatatableBindingSource,"CampoTabelaNome")
TextboxMorada.Databindings.add("text",NomeDaDatatableBindingSource,"CampoTabelaMOrada")

Share this post


Link to post
Share on other sites
arrelialp

Já consegui fazer mas não da forma que dizes.

Percebo o que queres dizer, mas só obtenho erros.

Sempre que vou buscar a selecção efectuada nas ComboBoxes (que funcionam muito bem), tipo isto:

"where (ManutencaoExternos.Nome+' '+ ManutencaoExternos.Apelido) = '" & ComboBoxNomeExterno.SelectedItem & "'", con)

Dá-me erro(s)

Tendo em conta o primeiro código de bloco deste tópico, que eu coloquei, podias dar um exemplo para a TextBoxFirma, da tabela ManutencaoFirmas.Nome?

Share this post


Link to post
Share on other sites
arrelialp

De qualquer forma, vou colocar a solução pois pode ajudar outros que tenham o mesmo problema.

Agradeço muito a ajuda do Tuntankamon, sempre elevou o interesse deste tópico

Imports System.Data.SqlClient 

Imports System.Data

Imports System.Windows.Forms

Public Class FormEntradaExternos

    Dim con As SqlConnection

    Dim da As SqlDataAdapter

    Dim connectionString As String = ("Data Source=...")

    Dim DataSetManutencaoFuncionarios As DataSet

    Dim comando As SqlCommand

    Dim dt As DataTable

    Private Sub FormEntradaExternos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Call CarregaNomes()

        Call CarregaNumeros()

        Call CarregaDestinos()

    End Sub

        

    Public Sub CarregaNumeros()

        con = New SqlConnection(connectionString)

        Dim ds As New DataSet

        Dim dr As DataRow

        Dim dt As New DataTable

        Dim adptr As New SqlDataAdapter("Select ID_Externo, ManutencaoExternos.Nome + ' ' + ManutencaoExternos.Apelido [NomeCompleto], " & _

                                   "ManutencaoExternos.Num_Cartao_Ident, ManutencaoExternos.Observacoes, " & _

                                   "TipoExterno.Tipo As TipoExterno, ManutencaoFirmas.Nome As Firma, TipoFirma.Tipo As Tipo " & _

                                   "FROM ManutencaoExternos INNER JOIN " & _

                                   "ManutencaoFirmas ON ManutencaoExternos.ID_Firma = ManutencaoFirmas.ID_Firma RIGHT JOIN " & _

                                   "TipoFirma ON ManutencaoFirmas.Tipo_Firma = TipoFirma.ID_TipoFirma RIGHT JOIN " & _

                                   "TipoExterno ON ManutencaoExternos.ID_TipoExterno = TipoExterno.ID_TipoExterno " & _

                                   "WHERE ManutencaoExternos.Status = 1 ORDER BY Num_Cartao_Ident", con)

        adptr.Fill(ds, "ManutencaoExternos")

        dt = ds.Tables(0)

        For Each dr In dt.Rows

            ComboBoxNumIdentExt.Items.Add(dr.Item("Num_Cartao_Ident"))

        Next

        con.Close()

    End Sub

    Public Sub CarregaNomes()

        con = New SqlConnection(connectionString)

        Dim ds As New DataSet

        Dim dr As DataRow

        Dim dt As New DataTable

        Dim adptr As New SqlDataAdapter("Select ID_Externo, ManutencaoExternos.Nome + ' ' + ManutencaoExternos.Apelido [NomeCompleto], " & _

                                   "ManutencaoExternos.Num_Cartao_Ident, ManutencaoExternos.Observacoes, " & _

                                   "TipoExterno.Tipo As TipoExterno, ManutencaoFirmas.Nome As Firma, TipoFirma.Tipo As Tipo " & _

                                   "FROM ManutencaoExternos INNER JOIN " & _

                                   "ManutencaoFirmas ON ManutencaoExternos.ID_Firma = ManutencaoFirmas.ID_Firma RIGHT JOIN " & _

                                   "TipoFirma ON ManutencaoFirmas.Tipo_Firma = TipoFirma.ID_TipoFirma RIGHT JOIN " & _

                                   "TipoExterno ON ManutencaoExternos.ID_TipoExterno = TipoExterno.ID_TipoExterno " & _

                                   "WHERE ManutencaoExternos.Status = 1 ORDER BY NomeCompleto", con)

        adptr.Fill(ds, "ManutencaoExternos")

        dt = ds.Tables(0)

        For Each dr In dt.Rows

            ComboBoxNomeExterno.Items.Add(dr.Item("NomeCompleto"))

        Next

        con.Close()

    End Sub

    Public Sub CarregaDestinos()

        con = New SqlConnection(connectionString)

        Dim ds As New DataSet

        Dim dr As DataRow

        Dim dt As New DataTable

        Dim adptr As New SqlDataAdapter("SELECT ID_Destino, Destino FROM ManutencaoDestinos order by Destino", con)

        adptr.Fill(ds, "ManutencaoDestinos")

        dt = ds.Tables(0)

        For Each dr In dt.Rows

            ComboBoxDestino.Items.Add(dr.Item("Destino"))

        Next

        con.Close()

    End Sub

    Private Sub ComboBoxNomeExterno_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxNomeExterno.SelectedIndexChanged

        con = New SqlConnection(connectionString)

        con.Open()

        Dim cmd As New SqlCommand("SELECT ManutencaoExternos.ID_Externo, ManutencaoExternos.Nome+' '+ManutencaoExternos.Apelido As [Nome Completo], ManutencaoExternos.Num_Cartao_Ident As [Num Ident], " & _

                                  "ManutencaoExternos.Observacoes, TipoExterno.Tipo As [Tipo Externo], TipoFirma.Tipo As [Tipo Firma], ManutencaoFirmas.Nome AS [Nome Firma] " & _

                                  "FROM TipoFirma RIGHT OUTER JOIN " & _

                                  "ManutencaoFirmas ON TipoFirma.ID_TipoFirma = ManutencaoFirmas.Tipo_Firma LEFT OUTER JOIN " & _

                                  "ManutencaoExternos ON ManutencaoFirmas.ID_Firma = ManutencaoExternos.ID_Firma LEFT OUTER JOIN " & _

                                  "TipoExterno ON ManutencaoExternos.ID_TipoExterno = TipoExterno.ID_TipoExterno " & _

                                  "where (ManutencaoExternos.Nome+' '+ ManutencaoExternos.Apelido) = '" & ComboBoxNomeExterno.SelectedItem & "'", con)

        Dim drdr As SqlDataReader

        drdr = cmd.ExecuteReader

        drdr.Read()

        ComboBoxNumIdentExt.Text = drdr.Item("Num Ident").ToString

        TextBoxNome.Text = drdr.Item("Nome Completo").ToString

        TextBoxNumDocIdent.Text = drdr.Item("Num Ident").ToString

        TextBoxObservacoes.Text = drdr.Item("Observacoes").ToString

        TextBoxTipoExterno.Text = drdr.Item("Tipo Externo").ToString

        TextBoxFirma.Text = drdr.Item("Nome Firma").ToString

        TextBoxTipoFirma.Text = drdr.Item("Tipo Firma").ToString

        con.Close()

    End Sub

    Private Sub ComboBoxNumIdentExt_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxNumIdentExt.SelectedIndexChanged

        con = New SqlConnection(connectionString)

        con.Open()

        Dim cmd As New SqlCommand("SELECT ManutencaoExternos.ID_Externo, ManutencaoExternos.Nome+' '+ManutencaoExternos.Apelido As [Nome Completo], ManutencaoExternos.Num_Cartao_Ident As [Num Ident], " & _

                                  "ManutencaoExternos.Observacoes, TipoExterno.Tipo As [Tipo Externo], TipoFirma.Tipo As [Tipo Firma], ManutencaoFirmas.Nome AS [Nome Firma] " & _

                                  "FROM TipoFirma RIGHT OUTER JOIN " & _

                                  "ManutencaoFirmas ON TipoFirma.ID_TipoFirma = ManutencaoFirmas.Tipo_Firma LEFT OUTER JOIN " & _

                                  "ManutencaoExternos ON ManutencaoFirmas.ID_Firma = ManutencaoExternos.ID_Firma LEFT OUTER JOIN " & _

                                  "TipoExterno ON ManutencaoExternos.ID_TipoExterno = TipoExterno.ID_TipoExterno " & _

                                  "where ManutencaoExternos.Num_Cartao_Ident = '" & ComboBoxNumIdentExt.SelectedItem & "'", con)

        Dim drdr As SqlDataReader

        drdr = cmd.ExecuteReader

        drdr.Read()

        ComboBoxNomeExterno.Text = drdr.Item("Nome Completo").ToString

        TextBoxNome.Text = drdr.Item("Nome Completo").ToString

        TextBoxNumDocIdent.Text = drdr.Item("Num Ident").ToString

        TextBoxObservacoes.Text = drdr.Item("Observacoes").ToString

        TextBoxTipoExterno.Text = drdr.Item("Tipo Externo").ToString

        TextBoxFirma.Text = drdr.Item("Nome Firma").ToString

        TextBoxTipoFirma.Text = drdr.Item("Tipo Firma").ToString

        con.Close()

    End Sub

End Class 

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.