Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

wizzuu

Retirar valores a um campo numa base de dados

Mensagens Recomendadas

wizzuu    1
wizzuu

Boa tarde.

Mais um problema no meu projecto. :P

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 :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Cerzedelo    14
Cerzedelo

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.

Editado por Cerzedelo

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
wizzuu    1
wizzuu

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

Editado por apocsantos
geshi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.