Jump to content
Bessa

Gravar e Apagar Dados em ListBox

Recommended Posts

Bessa

Boas Pessoal!

Dado que após gastar algum tempo no problema do Seguinte e Anterior da BD e não os ter resolvido, resolvi deixar isso um pouco de lado e avançar noutros "mares" para o trabalho andar e não estar preso num problema.

Já consegui colocar os devidos filtros, após escolher o artigo para aparecer apenas as operações que queria, já fiz o Browse e mais uma coisas que após pesquisa e um pouco de pensamento no VB 6 e a imaginar como seria neste, lá consegui resolver.

No entanto, estou com dois problemas:

- Não consigo gravar os dados da ListBox. ;) Coloquei este Código no guardar, mas ele apenas me grava o Cabeçalho. Já as Lists...:

 If Artigo_escolhidoComboBox.Text = "" Or Operacao_artigoListBox.Text = "" Or Fase_artigoComboBox.Text = "" Or Ferramentas_corte_selecListBox.Text = "" Or Ferramentas_posic_selecListBox.Text = "" Or ProgramaTextBox.Text = "" Or Comprimento_ferr_corteListBox.Text = "" Or Diametro_ferr_corteListBox.Text = "" Or X_ferr_posListBox.Text = "" Or Y_ferr_posListBox.Text = "" Or Z_ferr_posListBox.Text = "" Then

            MsgBox("Não preencheu todos os campos! Deseja guardar?", MsgBoxStyle.YesNo, "Questão")

            If Windows.Forms.DialogResult.Yes Then

                If Fase_artigoComboBox.Text > "1" Then
                    MsgBox("Preencha a(s) fase(s) restante(s)!", MsgBoxStyle.Information, "Informação")

                    Dim ligacao As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb"
                    Dim insertcmd As System.Data.OleDb.OleDbCommand = New System.Data.OleDb.OleDbCommand
                    Dim con As New System.Data.OleDb.OleDbConnection(ligacao)

                    insertcmd.CommandType = CommandType.Text

                    insertcmd.CommandText = "INSERT INTO associar_ferramentas (artigo_escolhido, operacao_artigo, fase_artigo, ferramentas_corte_selec, ferramentas_posic_selec, programa, comprimento_ferr_corte, diametro_ferr_corte, x_ferr_pos, y_ferr_pos, z_ferr_pos) VALUES ('" + Artigo_escolhidoComboBox.Text + "', '" + Operacao_artigoListBox.Text + "', '" + Fase_artigoComboBox.Text + "', '" + Ferramentas_corte_selecListBox.Text + "', '" + Ferramentas_posic_selecListBox.Text + "', '" + ProgramaTextBox.Text + "', '" + Comprimento_ferr_corteListBox.Text + "', '" + Diametro_ferr_corteListBox.Text + "', '" + X_ferr_posListBox.Text + "', '" + Y_ferr_posListBox.Text + "', '" + Z_ferr_posListBox.Text + "')"

                    insertcmd.Connection = con

                    con.Open()

                    Try
                        insertcmd.ExecuteNonQuery()
                    Catch ex As Exception
                        MessageBox.Show(ex.Message)
                    End Try


                    con.Close()

                    Me.Validate()
                    Me.Associar_ferramentasBindingSource.EndEdit()
                    Me.TableAdapterManager.UpdateAll(Me.BdfelinoDataSet)

                    '##########

                    'Validar

                    ProgramaTextBox.Enabled = False
                    Fase_artigoComboBox.Enabled = False
                    Button2.Enabled = False
                    Button6.Enabled = False
                    Button8.Enabled = False
                    Button9.Enabled = False
                    Button3.Enabled = True

                Else

                    'Guardar

                    Dim ligacao As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb"
                    Dim insertcmd As System.Data.OleDb.OleDbCommand = New System.Data.OleDb.OleDbCommand
                    Dim con As New System.Data.OleDb.OleDbConnection(ligacao)

                    insertcmd.CommandType = CommandType.Text

                    insertcmd.CommandText = "INSERT INTO associar_ferramentas (artigo_escolhido, operacao_artigo, fase_artigo, ferramentas_corte_selec, ferramentas_posic_selec, programa, comprimento_ferr_corte, diametro_ferr_corte, x_ferr_pos, y_ferr_pos, z_ferr_pos) VALUES ('" + Artigo_escolhidoComboBox.Text + "', '" + Operacao_artigoListBox.Text + "', '" + Fase_artigoComboBox.Text + "', '" + Ferramentas_corte_selecListBox.Text + "', '" + Ferramentas_posic_selecListBox.Text + "', '" + ProgramaTextBox.Text + "', '" + Comprimento_ferr_corteListBox.Text + "', '" + Diametro_ferr_corteListBox.Text + "', '" + X_ferr_posListBox.Text + "', '" + Y_ferr_posListBox.Text + "', '" + Z_ferr_posListBox.Text + "')"

                    insertcmd.Connection = con

                    con.Open()

                    Try
                        insertcmd.ExecuteNonQuery()
                    Catch ex As Exception
                        MessageBox.Show(ex.Message)
                    End Try


                    con.Close()

                    Me.Validate()
                    Me.Associar_ferramentasBindingSource.EndEdit()
                    Me.TableAdapterManager.UpdateAll(Me.BdfelinoDataSet)

                    '##########

                    'Validar

                    ProgramaTextBox.Enabled = False
                    Fase_artigoComboBox.Enabled = False
                    Button2.Enabled = False
                    Button6.Enabled = False
                    Button8.Enabled = False
                    Button9.Enabled = False
                    Button3.Enabled = True

                    Artigo_escolhidoComboBox.Text = ""
                    ProgramaTextBox.Text = ""
                    Fase_artigoComboBox.Text = ""
                    'Operacao_artigoListBox.Items.Clear()
                    'Ferramentas_corte_selecListBox.Items.Clear()
                    'Comprimento_ferr_corteListBox.Items.Clear()
                    'Diametro_ferr_corteListBox.Items.Clear()
                    'Ferramentas_posic_selecListBox.Items.Clear()
                    'X_ferr_posListBox.Items.Clear()
                    'Y_ferr_posListBox.Items.Clear()
                    'Z_ferr_posListBox.Items.Clear()

                    If Windows.Forms.DialogResult.No Then

                        'não faz nada
                    End If
                    End If
            End If
        End If

- E ao Apagar (Está na Imagem o devido botão), apenas apaga UM valor de UMA ListBox...Que é a que clico!  ;)

Quanto ao Código que coloquei...As 1ªs 3 linhas, como estão não funcionam... :wallbash: O resto, se calhar já foi inventar um bocado, mas tinha de TENTAR!  :wallbash: :

       Ferramentas_corte_selecListBox.Items.Remove(Ferramentas_corte_selecListBox.SelectedIndex)
        Comprimento_ferr_corteListBox.Items.Remove(Comprimento_ferr_corteListBox.SelectedIndex)
        Diametro_ferr_corteListBox.Items.Remove(Diametro_ferr_corteListBox.SelectedIndex)

        Dim con As OleDbConnection
        Dim sql As String
        Dim ligacao As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb"

        con = New OleDbConnection(ligacao)
        sql = "Delete FROM associar_ferramentas WHERE comprimento_ferr_corte =  '" & Comprimento_ferr_corteListBox.SelectedItem & "'"
        sql = "Delete FROM associar_ferramentas WHERE diametro_ferr_corte =  '" & Diametro_ferr_corteListBox.SelectedItem & "'"

        Dim cmd As OleDbCommand

        Try

            con.Open()
            cmd = New OleDbCommand(sql, con)
            cmd.ExecuteNonQuery()

            'MsgBox("Registo Apagado!", MsgBoxStyle.Information, "Informação")
            con.Close()

        Catch ex As OleDbException

            'MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")

        Catch ex As Exception

            'MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")

        End Try

Alguém me pode dar uma ajuda ou uns links de Help?

Obrigado.

61.jpg

No caso de apagar, já tentei outras propriedades, mas sem sucesso...No caso de gravar, Idem aspas...

Quanto ao GRAVAR, encontrei uma respsota acerca disso que AMANHÃ irei testar e darei Feedback...Ao que parece preciso de um While que percorra toda a lista e insira cada linha na BD...Verei se consigo fazer isso na realidade! lol -> http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/d02303c8-5637-4992-a9c4-81665847e445

Entrento, se alguém tiver ideias quanto na mesma ao Gravar ou Apagar, que diga :)

Entretanto...Continuo a Pesquisar e a explorar o Código, como é claro...

Share this post


Link to post
Share on other sites
Andrepereira9

Podes tentar com

For Each item In ListBox1.Items
            MsgBox(item.ToString)
Next


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
bioshock

Para múltiplas operações (ciclos):

For i As Integer = 0 To Listbox1.Items.Count - 1

  ' Delete Statement
  ' Save statement

Next

Share this post


Link to post
Share on other sites
Bessa

André,

Realmente através disso ele deteta o valor da List, no entanto, após colocar o Insert, do tipo do Exemplo "Guardar" que acima coloquei, ele guarda isto na BD:

System.Windows.Forms.ListBox+ObjectCollection

Tentei com estes e também não deram:

http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/d02303c8-5637-4992-a9c4-81665847e445

http://www.vbforums.com/showthread.php?t=379234

E ainda tive de mudar algumas propriedades, dado que dava erro.

Por fim, tentei com o que o bioshock disse e está muito perto de funcionar! :)

O problema é que ele só grava o registo que clico....Em Duplicado! lol

Então, coloquei este Código para ele me seleccionar todos os items, antes de guardar:

        Ferramentas_corte_selecListBox.SelectionMode = SelectionMode.MultiExtended

        ' seleciona todos os itens da lista

        If Ferramentas_corte_selecListBox.SelectionMode <> SelectionMode.One Then
            For i As Integer = 0 To Ferramentas_corte_selecListBox.Items.Count - 1 Step 1
                Ferramentas_corte_selecListBox.SetSelected(i, True)
            Next
        End If

E ele guarda os 2 registos (por ex)...Mas é sempre com o 1º em Duplicado...São 2 iguais! :cheesygrin:

problema158.jpg

Tenho este Código no INSERT:

insertcmd.CommandText = "INSERT INTO associar_ferramentas (ferramentas_corte_selec, ferramentas_posic_selec) VALUES ('" + Ferramentas_corte_selecListBox.Text + "', '" + Ferramentas_posic_selecListBox.Text + "')"

Pus SelectedItem, mas fez a mesma coisa...O Mesmo em Duplicado...I ".Items.ToString" dá o erro/guarda o que acima disse. E SelectedIndex, não dá.

E se preencho as ListsBox das Ferramentas Posicionamento e de Corte, ele só me grava (Duplicado) as de Posicionamento!

E se coloco apenas um registo em "as Selecionadas" em Ferr Corte e Ferr Posicionamento, ele guarda a BD o registo da Ferr posicionamento e adiciona-me os registo dos campos "Comprimento" e "Diametro" à mesma linha da BD, ao invés de a deixar vazia...

Alguém sabe como resolver?

Entretanto...Googlando! :)

Obrigado aos dois pelas ajudas! :)

Share this post


Link to post
Share on other sites
bioshock

Para nós é complicado que fales, ou melhor dizendo: escrevas, da forma que escreves. Porque tu estás a ver o projecto e nós não.

O que tens de fazer é chegar aqui e dizer o seguinte: "Eu quero fazer inserções na BD consoante o número de registos na Listbox" (ou algo semelhante) e isto vai-nos facilitar muito a vida.

Porque depois de lermos todo o teu texto ou percebemos 0 ou desistimos de te ajudar.

Presumindo que queres inserir todos os dados da Listbox na BD:

For i As Integer = 0 To Listbox1.Items.Count - 1
  Dim query As String = "INSERT INTO Tabela (Nome) VALUES (@Nome)"
  Dim command As New SqlCommand(query, connection)
  command.Parameters.Add("@Nome", VarChar).Value = Listbox1.Items(i).ToString()
  command.ExecuteNonQuery()
Next

Share this post


Link to post
Share on other sites
Bessa

bioshock

Juro que fiquei com esse pensamento no meu último Post. "Eles não devem ter percebido nada"...E assim foi! 😳 Que nó que ficou! LOL

Pois, Só que eu não quero dizer isso porque parece mal! :D Faz entender que não me esforcei! :P

Mas esforcei-me...Para veres, ando nesta porcaria de erro mais afincadamente desde as 09:30! :wallbash: Que nervos! 😡 Já tentei tanta coisa e a maior parte, se eu dissesse diziam que era estúpido! lol

Quanto à tua ajuda:

- Não consigo definir o VarChar e a Connection! :S

A connection já coloquei "Dim Connection as OleDbConnection", "Dim Connection as As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb"", e não dá :S

Já tive a pesquisar, mas como são termos que podem tomar qqlr significado, nada encontrei.! :angry1:

Hoje é dia não para mim. :wallbash:

:dontgetit:

Obrigado por ainda estares a tentar ajudar! :)

E sim, é isso que quero. E como vês, até os insiro o problema, é que ele substitui os dados do 2º registo, pelos dados da 1ª linha, na BD...

Entretanto, vou continuar a procurar uma solução.

Share this post


Link to post
Share on other sites
Bessa

bioshock

Colocando este Código:

        Ferramentas_corte_selecListBox.SelectionMode = SelectionMode.MultiExtended
        Comprimento_ferr_corteListBox.SelectionMode = SelectionMode.MultiExtended
        Diametro_ferr_corteListBox.SelectionMode = SelectionMode.MultiExtended

        ' seleciona todos os itens da lista

        For i As Integer = 0 To Ferramentas_corte_selecListBox.Items.Count - 1

            Ferramentas_corte_selecListBox.SetSelected(i, True)
            Comprimento_ferr_corteListBox.SetSelected(i, True)
            Diametro_ferr_corteListBox.SetSelected(i, True)

Ele já selecciona TODOS os items das ListsBoxs...

Estive agora a adaptar o Insert que deste nesse link, para o meu caso, mas não está a funcionar corretamente. Aqui vai o Código:

 Ferramentas_corte_selecListBox.SelectionMode = SelectionMode.MultiExtended
        Comprimento_ferr_corteListBox.SelectionMode = SelectionMode.MultiExtended
        Diametro_ferr_corteListBox.SelectionMode = SelectionMode.MultiExtended
  
        ' seleciona todos os itens da lista

        For i As Integer = 0 To Ferramentas_corte_selecListBox.Items.Count - 1

            Ferramentas_corte_selecListBox.SetSelected(i, True)
            Comprimento_ferr_corteListBox.SetSelected(i, True)
            Diametro_ferr_corteListBox.SetSelected(i, True)
        Next
        
        'GUARDA OS REGISTOS 

        Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb")
        Dim query As String = "INSERT INTO associar_ferramentas ([artigo_escolhido], [operacao_artigo], [fase_artigo], [ferramentas_corte_selec], [ferramentas_posic_selec], [programa], [comprimento_ferr_corte], [diametro_ferr_corte], [x_ferr_pos], [y_ferr_pos], [z_ferr_pos]) VALUES (@Artigo_escolhido, @Operacao_artigo, @Fase_artigo, @Ferramentas_corte_selec, @Ferramentas_posic_selec, @Programa, @Comprimento_ferr_corte, @Diametro_ferr_corte, @X_ferr_pos, @Y_ferr_pos, @Z_ferr_pos)"

        Dim command As New OleDbCommand(query, ConnectionString)

        command.Parameters.Add("@artigo_escolhido", OleDbType.VarChar).Value = Artigo_escolhidoComboBox.Text
        command.Parameters.Add("@operacao_artigo", OleDbType.VarChar).Value = Operacao_artigoListBox.Text
        command.Parameters.Add("@fase_artigo", OleDbType.VarChar).Value = Fase_artigoComboBox.Text
        command.Parameters.Add("@ferramentas_corte_selec", OleDbType.VarChar).Value = Ferramentas_corte_selecListBox.Text
        command.Parameters.Add("@ferramentas_posic_selec", OleDbType.VarChar).Value = Ferramentas_posic_selecListBox.Text
        command.Parameters.Add("@programa", OleDbType.VarChar).Value = ProgramaTextBox.Text
        command.Parameters.Add("@comprimento_ferr_corte", OleDbType.VarChar).Value = Comprimento_ferr_corteListBox.Text
        command.Parameters.Add("@diametro_ferr_corte", OleDbType.VarChar).Value = Diametro_ferr_corteListBox.Text
        command.Parameters.Add("@x_ferr_pos", OleDbType.VarChar).Value = X_ferr_posListBox.Text
        command.Parameters.Add("@y_ferr_pos", OleDbType.VarChar).Value = Y_ferr_posListBox.Text
        command.Parameters.Add("@z_ferr_pos", OleDbType.VarChar).Value = Z_ferr_posListBox.Text

        ConnectionString.Open()

        Dim x As Integer = command.ExecuteNonQuery()

        If x < 1 Then
            MessageBox.Show("Erro ao inserir", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            MessageBox.Show("Registo inserido com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

        ConnectionString.Close()
        command = Nothing

No Entanto, não está a guardar na mesma todos os registos! Então resolvi fazer um teste APENAS mudando a propriedade do "@ferramentas_corte_selec"...

Com Ferramentas_corte_selecListBox.Text, faz isto:

http://img1.imagilive.com/0511/11c6.JPG

Com Ferramentas_corte_selecListBox.SelectedItems.ToString e Ferramentas_corte_selecListBox.Items.ToString , faz isto:

http://img1.imagilive.com/0511/2da8.JPG

se puser apenas Ferramentas_corte_selecListBox.Items  , dá este erro:

Não foi possível converter o valor do parâmetro de ObjectCollection para String.

:wallbash:

Entretanto...Estou a inventar a ver se sai alguma coisa... :dontgetit:

Share this post


Link to post
Share on other sites
Bessa

Obrigado.

Eu já tinha tentado, só que não estava a dar (Tal como disse no penúltimo Post). No entanto, voltei a tentar com mais calma e adaptei esse código para o que era necessário:

        Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb")

        ConnectionString.Open()

        For i As Integer = 0 To Ferramentas_corte_selecListBox.Items.Count - 1

            Dim query As String = "INSERT INTO associar_ferramentas (ferramentas_corte_selec, ferramentas_posic_selec, programa, comprimento_ferr_corte, diametro_ferr_corte, x_ferr_pos, y_ferr_pos, z_ferr_pos) VALUES (@Ferramentas_corte_selec, @Ferramentas_posic_selec, @Programa, @Comprimento_ferr_corte, @Diametro_ferr_corte, @X_ferr_pos, @Y_ferr_pos, @Z_ferr_pos)"

            Dim connection As New SqlConnection(ConnectionString)

            Dim command As New SqlCommand(query)

            command.Parameters.Add("@ferramentas_corte_selec", OleDbType.VarChar).Value = Ferramentas_corte_selecListBox.Items(i).ToString()
            command.Parameters.Add("@ferramentas_posic_selec", OleDbType.VarChar).Value = Ferramentas_posic_selecListBox.Items(i).ToString()
            command.Parameters.Add("@comprimento_ferr_corte", OleDbType.VarChar).Value = Comprimento_ferr_corteListBox.Items(i).ToString()
            command.Parameters.Add("@diametro_ferr_corte", OleDbType.VarChar).Value = Diametro_ferr_corteListBox.Items(i).ToString()
            command.Parameters.Add("@x_ferr_pos", OleDbType.VarChar).Value = X_ferr_posListBox.Items(i).ToString()
            command.Parameters.Add("@y_ferr_pos", OleDbType.VarChar).Value = Y_ferr_posListBox.Items(i).ToString()
            command.Parameters.Add("@z_ferr_pos", OleDbType.VarChar).Value = Z_ferr_posListBox.Items(i).ToString()
            command.ExecuteNonQuery()
        Next
        ConnectionString.Close()
    End Sub

No Entanto, dá este erro:

Value of type 'System.Data.OleDb.OleDbConnection' cannot be converted to 'String'

Estive a pesquisar e aúnica solução que encontrei era colocar no General:

"Imports System.Data.OleDb

Imports System.Data.SqlClient"

Mas eu já tinha colocado. :)

O que será... ?

E dá estes Warnings/Avisos:

"Public Function Add(parameterName As String, value As Object) As System.Data.SqlClient.SqlParameter' is obsolete: 'Add(String parameterName, Object value) has been deprecated.  Use AddWithValue(String parameterName, Object value)."

É um conselho para utilizar o AddWithValue em vez do Add ? :) lol

Já estive a procurar, mas sem sucesso. :)

Obrigado desde já.

Entretanto, vou vende outra vez tudo, incluindo o outro Tópico.

Share this post


Link to post
Share on other sites
Caça

Troca

Dim connection As New SqlConnection(ConnectionString)
Dim command As New SqlCommand(query)

por

Dim command As New SqlCommand(query)
command.Connection = ConnectionString

Devias ter sempre o Option Strict ligado


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Bessa

Já liguei o Option Strict. Tks. :)

Quanto à mudança de código, já o fiz, só que dá na mesma o erro:

Value of type 'System.Data.OleDb.OleDbConnection' cannot be converted to 'String'

O que será que está a dar "Curto-Circuito"? 🤔

🤔

Share this post


Link to post
Share on other sites
Caça

Apagaste esta linha de código?

Dim connection As New SqlConnection(ConnectionString)

Não deves ter apagado


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
bioshock

Oh my god.. :wallbash:

Então tu referencias a connectionString como base de dados Access:

Dim ConnectionString As New OleDbConnection

E depois queres atribuir os comandos em base de dados SQL ?

Dim connection As New SqlConnection(ConnectionString)
Dim command As New SqlCommand(query)

Vai lá ver o link que está na Wiki, mas vê com olhos de ver. :)

Share this post


Link to post
Share on other sites
Bessa

Já tinha apagado.

no Entanto arranjei forma de não dar esse erro!

Mudei de:

Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb")

Para:

Dim ConnectionString As New SqlConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb")

Mas dava erro no "command.ExecuteNonQuery()"... :S

bioshock

Não te admires de ver barbaridades e estupidez de alto nível! :) :)

Nunca trabalhei em SQL e VB 2008, por isso toda esta confusão que estou a fazer! lol  😳

Sim, é realmente estúpido começar com um objeto OLE e depois fazer coisas em SQL...Mas...Estou perdido! :dontgetit:  :wallbash:

Ora bem:

O meu atual código:

        Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb")

        For i As Integer = 0 To Ferramentas_corte_selecListBox.Items.Count - 1

            Dim query As String = "INSERT INTO associar_ferramentas (ferramentas_corte_selec, ferramentas_posic_selec, programa, comprimento_ferr_corte, diametro_ferr_corte, x_ferr_pos, y_ferr_pos, z_ferr_pos) VALUES (@Ferramentas_corte_selec, @Ferramentas_posic_selec, @Programa, @Comprimento_ferr_corte, @Diametro_ferr_corte, @X_ferr_pos, @Y_ferr_pos, @Z_ferr_pos)"

            Dim command As New SqlCommand(query)
            command.Connection = ConnectionString

            command.Parameters.Add("@ferramentas_corte_selec", OleDbType.VarChar).Value = Ferramentas_corte_selecListBox.Items(i).ToString()
            command.Parameters.Add("@ferramentas_posic_selec", OleDbType.VarChar).Value = Ferramentas_posic_selecListBox.Items(i).ToString()
            command.Parameters.Add("@comprimento_ferr_corte", OleDbType.VarChar).Value = Comprimento_ferr_corteListBox.Items(i).ToString()
            command.Parameters.Add("@diametro_ferr_corte", OleDbType.VarChar).Value = Diametro_ferr_corteListBox.Items(i).ToString()
            command.Parameters.Add("@x_ferr_pos", OleDbType.VarChar).Value = X_ferr_posListBox.Items(i).ToString()
            command.Parameters.Add("@y_ferr_pos", OleDbType.VarChar).Value = Y_ferr_posListBox.Items(i).ToString()
            command.Parameters.Add("@z_ferr_pos", OleDbType.VarChar).Value = Z_ferr_posListBox.Items(i).ToString()
            command.ExecuteNonQuery()
        Next
        ConnectionString.Close()

Portanto, tenho de pssar isto:

Dim connection As New SqlConnection(ConnectionString)
Dim command As New SqlCommand(query)

Para comandos Access, dado que é a plataforma onde estou a trabalhar...? Correto?

Tipo..."Dim command As New OleDbCommand(query)" (Apesar de não funcionar, é para saber se é do tipo lol) ?

Share this post


Link to post
Share on other sites
bioshock

Oh rapaz, vamos lá ver se é desta.

Se tu estás a trabalhar com base de dados Access os teus comandos terão, obrigatoriamente, de ter a instância OleDb antes de qualquer função que tenha como objectivo interagir com a base de dados.

Dim connection As New OleDbConnection("....")
connection.Open()
Dim query As String = "SELECT Cenouras FROM Ortalica WHERE Grelos = @Grelos"
Dim command As New OleDbCommand(query, connection) 
command.Parameters.Add("@Grelos", OleDbType.Int).Value = 3
command.ExecuteNonQuery()
connection.Close()

Dá-te esse erro porque, para além da query, precisas de dizer ao comando qual a connection da base de dados.

Dim command As New OleDbCommand(query, connection)

Share this post


Link to post
Share on other sites
Bessa

Obrigado pela paciência. :)

Aqui está o meu atual código alterado e adaptado:

        Dim connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb")
        'connection.Open()

        Dim query As String = "INSERT INTO associar_ferramentas (ferramentas_corte_selec, ferramentas_posic_selec, comprimento_ferr_corte, diametro_ferr_corte, x_ferr_pos, y_ferr_pos, z_ferr_pos) VALUES (@Ferramentas_corte_selec, @Ferramentas_posic_selec, @Comprimento_ferr_corte, @Diametro_ferr_corte, @X_ferr_pos, @Y_ferr_pos, @Z_ferr_pos)"
        Dim command As New OleDbCommand(query, connection)

        For i As Integer = 0 To Ferramentas_corte_selecListBox.Items.Count - 1 And Ferramentas_posic_selecListBox.Items.Count - 1

            connection.Open()

            command.Parameters.Add("@ferramentas_corte_selec", OleDbType.VarChar).Value = Ferramentas_corte_selecListBox.Items(i).ToString()
            command.Parameters.Add("@ferramentas_posic_selec", OleDbType.VarChar).Value = Ferramentas_posic_selecListBox.Items(i).ToString()

            command.Parameters.Add("@comprimento_ferr_corte", OleDbType.Integer).Value = Comprimento_ferr_corteListBox.Items(i).ToString()
            command.Parameters.Add("@diametro_ferr_corte", OleDbType.Integer).Value = Diametro_ferr_corteListBox.Items(i).ToString()

            command.Parameters.Add("@x_ferr_pos", OleDbType.Integer).Value = X_ferr_posListBox.Items(i).ToString()
            command.Parameters.Add("@y_ferr_pos", OleDbType.Integer).Value = Y_ferr_posListBox.Items(i).ToString()
            command.Parameters.Add("@z_ferr_pos", OleDbType.Integer).Value = Z_ferr_posListBox.Items(i).ToString()
            command.ExecuteNonQuery()

            connection.Close()

        Next

Pelo meio de uns erros, mas que consegui resolver (parece impossível, mas foi verdade lol). :)

No entanto, estou com outro problema:

- Guarda os três registos de cada tabela,  só que repete sempre o 1º. Basicamente guarda os três, mas substitui os dados do 2º e do 3º pelos do 1º. 🤔

http://img1.imagilive.com/0511/prob.JPG

Entretanto vou ver isto outra vez...

🤔

Share this post


Link to post
Share on other sites
bioshock

@Bessa, eu devo falar grego.

Então estou-te farto de dizer que a estrutura de inserção de múltiplos registos é a seguinte:

connection.Open()
For i As Integer = 0 To Listbox1.Items.Count - 1
  Dim query As String = "INSERT INTO Tabela (Nome) VALUES (@Nome)"
  Dim command As New OleDbCommand(query, connection)
  command.Parameters.Add("@Nome", VarChar).Value = Listbox1.Items(i).ToString()
  command.ExecuteNonQuery()
Next
connection.Close()

E o que tu estás, novamente, a fazer é:

Dim query As String = "INSERT INTO Tabela (Nome) VALUES (@Nome)"
Dim command As New OleDbCommand(query, connection)
For i As Integer = 0 To Listbox1.Items.Count - 1
  connection.Open()
  command.Parameters.Add("@Nome", VarChar).Value = Listbox1.Items(i).ToString()
  command.ExecuteNonQuery()
  connection.Close()
Next

Vê lá se não notas diferenças..

Share this post


Link to post
Share on other sites
Bessa

Sou Nab0, mas tão nab0! :wallbash:

JÁ ESTÁ A FUNCIONAR!  :)

Muito obrigado por toda a ajuda bioshock! :cheesygrin:

Que paciência que tiveste de ter... LOL é melhor nem imaginar... :) Provavelmente, já estavas irritado e no limiar de desistir de me ajudar, com tanta nabice minha LOL

Obrigadão colega.

        Dim connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb")

        connection.Open()

        For i As Integer = 0 To Ferramentas_corte_selecListBox.Items.Count - 1 And Ferramentas_posic_selecListBox.Items.Count - 1

            Dim query As String = "INSERT INTO associar_ferramentas (ferramentas_corte_selec, ferramentas_posic_selec, comprimento_ferr_corte, diametro_ferr_corte, x_ferr_pos, y_ferr_pos, z_ferr_pos) VALUES (@Ferramentas_corte_selec, @Ferramentas_posic_selec, @Comprimento_ferr_corte, @Diametro_ferr_corte, @X_ferr_pos, @Y_ferr_pos, @Z_ferr_pos)"

            Dim command As New OleDbCommand(query, connection)

            command.Parameters.Add("@ferramentas_corte_selec", OleDbType.VarChar).Value = Ferramentas_corte_selecListBox.Items(i).ToString()
            command.Parameters.Add("@ferramentas_posic_selec", OleDbType.VarChar).Value = Ferramentas_posic_selecListBox.Items(i).ToString()
            command.Parameters.Add("@comprimento_ferr_corte", OleDbType.Integer).Value = Comprimento_ferr_corteListBox.Items(i & Environment.NewLine).ToString()
            command.Parameters.Add("@diametro_ferr_corte", OleDbType.Integer).Value = Diametro_ferr_corteListBox.Items(i).ToString()
            command.Parameters.Add("@x_ferr_pos", OleDbType.Integer).Value = X_ferr_posListBox.Items(i).ToString()
            command.Parameters.Add("@y_ferr_pos", OleDbType.Integer).Value = Y_ferr_posListBox.Items(i).ToString()
            command.Parameters.Add("@z_ferr_pos", OleDbType.Integer).Value = Z_ferr_posListBox.Items(i).ToString()

            command.ExecuteNonQuery()

        Next

        connection.Close()

Share this post


Link to post
Share on other sites
Bessa

Descobri só um problema com este código...

Quando eu adiciono 2 Ferramentas e Corte e apenas 1 Ferramenta de Posicionamento, ele só me guarda 1 ferr corte e 1 ferr pos...Se adicionar 3 Ferr Corte e 2 de Pos, só me adiciona 2 ferr corte e 2 ferr Pos...E assim sucessivamente.

11fa.JPG

E Na Base de Dados...

width=750 height=60http://img1.imagilive.com/0611/2d05.JPG[/img]

Alguém faz ideia como corrigir ou que ciclo poderei utilizar para ver se consigo descobrir a forma?

Já estive a tentar, mas na Net não consigo encontrar e não estou a ver que ciclo poderei colocar para que quando nao houver o mesmo número de Registos em cima e em Baixo, ele adicione na mesma... 🤔

Obrigado desde já.

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.