Jump to content

Retirar valores a um campo numa base de dados


wizzuu
 Share

Recommended Posts

Boa tarde.

Mais um problema no meu projecto. 😛

Ora bem, no formulário "pedidos" tenho uma datagridview que não está ligada a nenhuma base de dados.

no formulário "gestão" tenho outra datagridview(StocksDataGridView) que está ligada a uma base de dados .

  • Formulário "pedidos":
    • DataGridView1
      • Colunas: "Mesa", "Nome", "Preço", "Quantidade"

    [*]Formulário "gestão":

    • ​StocksDataGridView (ligada ao StocksDataSet)
      • ​Colunas: "Cod", "Nome", "Quantidade", "Tipo"

A DataGridView1 é preenchida com o seguinte código:

                        For Each item As ListViewItem In ListView2.Items
                            DataGridView1.Rows.Add(lbl_nrmesa.Text, item.SubItems(0).Text, item.SubItems(1).Text, item.SubItems(2).Text)
                        Next

Depois de efetuar isto,

Estando os seguintes valores na StockDataGridView:

Cod Nome Quantidade Tipo

1 Frango 15 Pratos

O que eu queria era que ao clicar num botão, fosse retirado ao campo Quantidade da StocksDataGridView, o valor do campo Quantidade da DataGridView1. Ou seja uma simples subtração, para ir controlando os stocks disponíveis.

Tentei das seguintes formas:

  • Forma 1:

                        Dim i As Integer
                        i = 1
                        For Each row As DataGridViewRow In DataGridView1.Rows
                            If row.Cells(1) = gestao.StocksDataGridView.Rows(i).Cells(1).Value Then
                                Dim targetRow = DirectCast(gestao.StocksBindingSource.AddNew(), DataRowView)
                                targetRow(3) = gestao.StocksDataGridView.Rows(i).Cells(3).Value - row.Cells(3).Value
                                'Etc.
                                gestao.StocksBindingSource.EndEdit()
                            End If
                            i = i + 1
                        Next

Com esta forma primeiro deu este erro, penso que seja por causa da StocksDataGridView estar ligada a uma base de dados, logo não dará para adicionar nem modificar nada de forma programática.

aKfJcIT.png

  • Forma 2

                            For Each row As DataGridViewRow In DataGridView1.Rows
                                Dim instrucao As String = "UPDATE Stocks SET Quantidade=Quantidade-'" & row.Cells(3).Value & "' WHERE Nome='" & row.Cells(1).Value.ToString & "'"
                                Me.StocksTableAdapter1.Adapter.SelectCommand.CommandText = instrucao
                                Me.TableAdapterManager.UpdateAll(Me.StocksDataSet)
                                Me.StocksTableAdapter1.Fill(Me.StocksDataSet.Stocks)
                            Next

Com este código não dá erro nenhum, simplesmente não modifica nada, quando vou ao formulário gestão, a StocksDataGridView está igual (mesmo fechando e abrindo este formulário gestão).

Volto a repetir,

quero que ao clicar num botão, seja retirado ao campo Quantidade da StocksDataGridView, o valor do campo Quantidade da DataGridView1. Ou seja uma simples subtração, para ir controlando os stocks disponíveis.

Agradecia imenso a vossa ajuda, é para a PAP.

Obrigado,

Cumprimentos 🙂

Link to comment
Share on other sites

A melhor solução é ao clicar no botão, passar os valores dos campos das duas datagridviews que pretende, para duas variáveis. Depois fazer a operação de subtração com as variáveis e só depois fazer o update à base de dados com base no resultado.

Um alerta é que o update deveria ser efetuado com base no campo Cod e não Nome, dado que se pressupõe que o Cod seja único e o nome poderá eventualmente ser repetido ou ter semelhanças que poderá causar eventuais conflitos.

Edited by Cerzedelo
Link to comment
Share on other sites

A melhor solução é ao clicar no botão, passar os valores dos campos das duas datagridviews que pretende, para duas variáveis. Depois fazer a operação de subtração com as variáveis e só depois fazer o update à base de dados com base no resultado.

Um alerta é que o update deveria ser efetuado com base no campo Cod e não Nome, dado que se pressupõe que o Cod seja único e o nome poderá eventualmente ser repetido ou ter semelhanças que poderá causar eventuais conflitos.

Desculpe a demora a responder.

Obrigado desde já pela resposta.

Já consegui pôr uma parte a funcionar, só há um problema.

For i = 0 To DataGridView1.RowCount - 1
Label5.Text = DataGridView1.Rows(i).Cells(1).Value.ToString
Label6.Text = DataGridView1.Rows(i).Cells(3).Value
instrucao = "UPDATE Stocks SET Quantidade=Quantidade-'" & Label6.Text & "' WHERE Nome='" & Label5.Text.ToString & "'"
Me.StocksTableAdapter1.Adapter.SelectCommand.CommandText = instrucao
Next

Estou a usar este código, o problema é que só muda o ultimo valor da datagrid.. Quero que mude todas as linhas.

Cumprimentos

Edited by apocsantos
geshi
Link to comment
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
 Share

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