Jump to content
AMB

passar items listbox para base dados

Recommended Posts

AMB

Bom dia

É o seguinte eu tenho um DropDownList com n nomes e à medida que vou seleccionando eu vou preenchendo uma listbox para ser mais facil depois eliminar um nome caso tenha enganado na selecção. A questão é que no final de todos os nomes selleccionados que pretendo queria coloca-los na base dados.

A minha base dados sql tá formada com um Cod_Pedido e o NomeDest

E à medida que realizo o meu codigo so fica gravado o ultimo nome que sellecionei na dropdownlist  :down:

Dim conn As New System.Data.SqlClient.SqlConnection()
        conn.ConnectionString = _Default.conne
        conn.Open()
        Dim destp As String
        destp = DropDownList3.Text

        Dim c As String
        c = DropDownList1.Text
        Dim sel As System.Data.SqlClient.SqlCommand = conn.CreateCommand()
        sel.CommandText = " SELECT NomeDest FROM Pedidos WHERE Cod_Pedido = '" & c & "'"

       
      
        conn.Close()
        conn.Open()

        Dim insdd As System.Data.SqlClient.SqlCommand = conn.CreateCommand()
        insdd.CommandText = " UPDATE Pedidos SET NomeDest = '" & destp & "' WHERE Cod_Pedido = '" & c & "'"
        insdd.ExecuteNonQuery()

        Dim db_r As SqlClient.SqlDataReader = sel.ExecuteReader(CommandBehavior.Default)
        Dim t As String
        Dim i As Integer
        Do While db_r.Read
            t = db_r.Item(0).ToString
            For i = 1 To db_r.FieldCount - 1
                t &= vbTab & db_r.Item(i).ToString
            Next i
            ListBox1.Items.Add(t)
        Loop

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
        If ListBox1.SelectedIndex > -1 Then
            ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
        End If

Gostaria de saber onde estou a errar obrigada

Share this post


Link to post
Share on other sites
Caça

Estás a igualar a variável destp ao texto actual da DropDowsList

        Dim destp As String
        destp = DropDownList3.Text


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
AMB

E como faço para que isso não aconteça???

Eu tenho DropDownList3.Text porque o texto que surge nesta Drop depende do que foi seleccionado na dropDownlist2.selectedvalue

🤔

Share this post


Link to post
Share on other sites
Caça

Estive a analizar o teu código e verifiquei que todos os NomeDest em que o Cod_Pedido é igual ao texto seleccionado da DropDownList1 ficam iguais. Isto não é suposto acontecer? É isto que queres evitar?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
AMB

Aquilo que eu pretendo é por exemplo faço duas selecções na drop 2 que muda automaticamente a drop 3 e a listbox vai ficar com Paula

      Pedro

o que quero é que no cod que surge em drop1 que é incrementado automaticament surja que o NomeDest seja Paula e Pedro

Acho que para isto vai ter de aparecer duas linhas para o mesmo cod uma com Paula e outra com Pedro não é???

Mas como???

Share this post


Link to post
Share on other sites
Caça

Queres inserir e estás a utilizar a instrução Update?

Para isso existe o Insert


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
AMB

Eu estou a realizar um update porque num form anterior já realizei um insert de data e hora para a mesma tabela Pedidos......

Share this post


Link to post
Share on other sites
Caça

Pois, mas da forma que estás a fazer o máximo que consegues, seguindo o teu exemplo é "Pedro Paula" tudo num registo linha


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Caça

Queres colocar todos os registos numa linha?

Para isso terás de usar um separador(Ex "|"), para mais tarde poderes dividir o texto


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
AMB

Se for possível colocar tudo numa linha coloco. Não sei é se depois não terei problemas porque depois o objectivo é comparar esses nomes com uma tabela do banco dados que possui o nome de todos os utilizadores para poder retirar informação como por exemplo o mail.  Achas que deppois consigo fazer isso???

Share this post


Link to post
Share on other sites
Caça

Vai-te dificultar a vida...

O melhor que tens a fazer é ir inserindo conforme precisares.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
MSOlhao

Viva,

Se bem entendo, quando seleccionas um nome na DropDownList esse mesmo nome é adicionado a uma ListBox.

O teu objectivo é inserires todos os nomes dessa ListBox na base de dados.

Penso que isto funcione para ti:

Dim destp As String = String.Empty

For Each person As String In ListBox1.Items
    destp += person + " | "
Next

No final a tua Query ficaria nesta forma

UPDATE Pedidos SET NomeDest = 'Nome1 | Nome2 | Nome3 |' WHERE Cod_Pedido = 'abc'

Não sei se é isto que queres.

Share this post


Link to post
Share on other sites
Caça

O problema é que ele depois quer comparar esses nomes com outros directamente no SQL.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
MSOlhao

E porquê que ele não coloca um nome em cada linha?

O procedimento não é diferente, basta colocar a Query entre o For Each.

For Each person As String In ListBox1.Items
    insdd.CommandText = " UPDATE Pedidos SET NomeDest = '" & person & "' WHERE Cod_Pedido = '" & c & "'"
    insdd.ExecuteNonQuery()
Next

Share this post


Link to post
Share on other sites
Caça

Ok, mas se reparares vai actualizar todos os "NomeDest" para o mesmo "Cod_Pedido", o que leva a que todos os "NomeDest" com aquele "Cod_Pedido" fiquem sempre iguais ao ultimo registo existente na ListBox


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
MSOlhao

Tens razão  😳

Não reparei que aquilo era um UPDATE, sendo assim penso que o 1º exemplo é o melhor.

Depois para comparar faz um String.Split()

Dim destp As String = String.Empty
For Each person As String In ListBox1.Items
    destp += person + "|"
Next

Para comparar crias uma função assim:

Public Function SplitString(ByVal str As String) As String()
    ' Devolve um array com a string passada no parâmetro devidamente separada.
    Return str.Split(New [Char]() {"|"c})
End Function

Share this post


Link to post
Share on other sites
AMB

Desde já obrigada pelo feedback...

Tentei as soluções apresentadas mas está a surgir um erro em

For Each person As String In ListBox1.Items

---- "Conversion from type 'ListItem' to type 'String' is not valid"

🤔

Share this post


Link to post
Share on other sites
MSOlhao

Viva,

O erro dá-te exactamente nessa linha?

Mas é estranho já que aqui não tenho esse problema.  :dontgetit:

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.