Jump to content
informaster

Temos Entradas, Saidas e Acertos de Stocks e Ficha de Produtos - com SQLITE

Recommended Posts

informaster

Boa Tarde a todos

Estou com um problema no meu programa que estou a fazer.

Ja fiz o Seguinte:

Entradas de Stocks

Saidas de Stocks

Acertos de Stocks

Agora vou dar um exemplo em codido

Entradas de Stocks

Imports System.Data.SQLite

Public Class frm_entradas
    Dim sConnectionString As String

    Private Sub carregaentradas()
        Try
            'define string de conexão com banco de dados SQLite
            'usando a criptografia
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            'abre a conexão
            Dim oConn As New SQLite.SQLiteConnection(sConnectionString)
            oConn.Open()
            'define o comando SQL para retornar todos os dados da tabela Movimentos Entradas
            Dim daentradas As New SQLite.SQLiteDataAdapter("Select id,produto,quantidade,data,hora,empregado,iddoc From moventradas Where empregado='" & frm_principal.txt_infoemp.Text & "' AND data = '" & frm_principal.txt_data.Text & "' order by id Desc", oConn)
            ' ("order by id desc", oConn)
            'define o dataset
            Dim ds As New DataSet("Northwind")
            'define o esquema da tabela
            daentradas.FillSchema(ds, SchemaType.Source, "moventradas")
            'preenche o dataset
            daentradas.Fill(ds, "moventradas")
            'exibe os dados no datagridview
            gdvDados_entradas.DataSource = ds.Tables("moventradas")
            'fecha a conexao
            oConn.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o banco de dados SQLite: " & ex.Message)
        End Try
    End Sub

    Public Sub valores_produtos()
        Try

            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'executa a consulta
            SQLcommand.CommandText = "Select * from produtos"

            'VARIAVEL LEITOR É UM DATA READER DO SQLITE E PODE SER IGUAL A UM COMANDO SQL . EXECUTANDO UM READER
            Dim leitorprodutos As SQLiteDataReader = SQLcommand.ExecuteReader()

            'SE LEITOR  TIVER LINHAS ENTÃO
            If leitorprodutos.HasRows Then

                'EXECUTA ATE LERES OS DADOS TIPO ACESSO PARA STRING
                While leitorprodutos.Read()
                    cb_produtosins.Items.Add(leitorprodutos.Item("descricao")).ToString()
                    cb_produtosins.Text = leitorprodutos.Item("descricao")
                End While
            End If

            SQLcommand.Dispose()
            SQLconnect.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub



    Private Sub bt_sairacesso_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_sairentrada.Click
        frm_principal.Enabled = True
        Me.Close()

    End Sub

    Private Sub frm_entradas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        frm_principal.Enabled = False
        bt_gravarentrada.Enabled = False

        carregaentradas()
        valores_produtos()
        valores_iddocentradas()
    End Sub
    Public Sub valores_iddocentradas()
        Try

            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'executa a consulta
            SQLcommand.CommandText = "Select docnumero from docentradas"

            'VARIAVEL LEITOR É UM DATA READER DO SQLITE E PODE SER IGUAL A UM COMANDO SQL . EXECUTANDO UM READER
            Dim leitordocentradas As SQLiteDataReader = SQLcommand.ExecuteReader()

            'SE LEITOR  TIVER LINHAS ENTÃO
            If leitordocentradas.HasRows Then

                'EXECUTA ATE LERES OS DADOS TIPO ACESSO PARA STRING
                While leitordocentradas.Read()
                    txt_iddoc.Text = (leitordocentradas.Item("docnumero") + 1)

                End While
            End If

            SQLcommand.Dispose()
            SQLconnect.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub

    Private Sub bt_inserirlinha_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_inserirlinha.Click
        Try
            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'Botao gravar está enable
            bt_gravarentrada.Enabled = True

            'INSERE OS REGISTOS DAS TEXTBOX´S NA BD SQLITE ENTRADAS DE PRODUTOS
            SQLcommand.CommandText = "INSERT INTO moventradas(produto,quantidade,data,hora,empregado,iddoc)  VALUES ('" + cb_produtosins.Text.Replace("'", "''") + "','" + txt_quantidade.Text.Replace("'", "''") + "','" + frm_principal.txt_data.Text.Replace("'", "''") + "','" + frm_principal.txt_hora.Text.Replace("'", "''") + "','" + frm_principal.txt_infoemp.Text.Replace("'", "''") + "','" + txt_iddoc.Text.Replace("'", "''") + "')"
            'executa a consulta
            SQLcommand.ExecuteNonQuery()
            SQLcommand.Dispose()
            SQLconnect.Close()

            cb_produtosins.Text = String.Empty
            txt_quantidade.Value = "1"

        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try
        cb_produtosins.Focus()
        carregaentradas()
    End Sub

    Private Sub bt_gravarentrada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_gravarentrada.Click
        Try
            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand


            'INSERE OS REGISTOS DAS TEXTBOX´S NA BD SQLITE docentradas
            SQLcommand.CommandText = "INSERT INTO docentradas(docnumero)  VALUES ('" + txt_iddoc.Text.Replace("'", "''") + "')"

            'executa a consulta
            SQLcommand.ExecuteNonQuery()
            SQLcommand.Dispose()
            SQLconnect.Close()

            'Mensagem quando guarda
            MsgBox("Foi inserido um novo documento de ENTRADA DE STOCK Nº" + txt_iddoc.Text.ToUpper + "Por o empregado, " + frm_principal.txt_infoemp.Text)
            Me.Close()
            frm_principal.Enabled = True

        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub


    Private Sub bt_cancelarentrada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_cancelarentrada.Click
        frm_principal.Enabled = True
        Close()
    End Sub
End Class

Aqui é onde nós escolhemos os produtos e colocamos para as linhas da datagrid as quantidades associadas aos produtos e grava em uma tabela "moventradas"

So que no fim quando GRAVO que é onde ele vai gravar na tabela docentradas o id do documento da entrada quero colocar em cada produto que dei entrada em quantidade a actualização de stocks.

É obvio que tenho uma txtbox na ficha de cada produto para lá aparecer qual é o stock actual mas não estou a ver como é que adiciono da DATAGRID as QUANTIDADEs DE CADA PRODUTO para a ficha de cada PRODUTO.

Deixo aqui o codigo de uma inserção de produto:

Imports System.Data.SQLite
'FORM INSERÇAO DE PRODUTO

Public Class frm_inserirprodutos
    Dim sConnectionString As String
    Public sql_select_produtos As String = "Select produtos From produtos order by produtos"

    Private Sub bt_gravarproduto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_gravarproduto.Click
        Try
            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'Se for vazio então repete
            If txt_produto.Text = "" Then
                txt_produto.Focus()
                MsgBox("Tem que no minimo preencher o nome do produto ou então cancelar a operação.")
                Return
            End If

            'INSERE OS REGISTOS DAS TEXTBOX´S NA BD SQLITE EMPREGADOS
            SQLcommand.CommandText = "INSERT INTO produtos(descricao,composto1,composto2,composto3,medida1,medida2,medida3)  VALUES ('" + txt_produto.Text.Replace("'", "''") + "','" + cb_composto1.Text.Replace("'", "''") + "','" + cb_composto2.Text.Replace("'", "''") + "','" + cb_composto3.Text.Replace("'", "''") + "','" + txt_medida1.Text.Replace("'", "''") + "','" + txt_medida2.Text.Replace("'", "''") + "','" + txt_medida3.Text.Replace("'", "''") + "')"

            'executa a consulta
            SQLcommand.ExecuteNonQuery()
            SQLcommand.Dispose()
            SQLconnect.Close()

            'Mensagem quando guarda
            MsgBox("Foi inserido um novo Produto " + "." + " Com a descrição de ," + txt_produto.Text.ToUpper)
            txt_produto.Text = String.Empty


        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try
        txt_produto.Focus()
    End Sub

    Public Sub valores_compostos()
        Try

            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'executa a consulta
            SQLcommand.CommandText = "Select tipocomposto from compostos"

            'VARIAVEL LEITOR É UM DATA READER DO SQLITE E PODE SER IGUAL A UM COMANDO SQL . EXECUTANDO UM READER
            Dim leitor As SQLiteDataReader = SQLcommand.ExecuteReader()

            'SE LEITOR  TIVER LINHAS ENTÃO
            If leitor.HasRows Then

                'EXECUTA ATE LERES OS DADOS TIPO ACESSO PARA STRING
                While leitor.Read()
                    cb_composto1.Items.Add(leitor.Item("tipocomposto")).ToString()
                    cb_composto1.Text = leitor.Item("tipocomposto")
                    cb_composto2.Items.Add(leitor.Item("tipocomposto")).ToString()
                    cb_composto2.Text = leitor.Item("tipocomposto")
                    cb_composto3.Items.Add(leitor.Item("tipocomposto")).ToString()
                    cb_composto3.Text = leitor.Item("tipocomposto")


                End While
            End If

            SQLcommand.Dispose()
            SQLconnect.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub

    Private Sub frm_inserirprodutos_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        txt_produto.Focus()
        cb_composto1.Text = "Sem nada"
        cb_composto2.Text = "Sem nada"
        cb_composto3.Text = "Sem nada"
    End Sub

    Private Sub bt_cancelarproduto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_cancelarproduto.Click
        cb_composto1.Items.Clear()
        cb_composto2.Items.Clear()
        cb_composto3.Items.Clear()
        txt_medida1.Clear()
        txt_medida2.Clear()
        txt_medida3.Clear()
        Close()
    End Sub

    Private Sub bt_sair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_sair.Click
        cb_composto1.Items.Clear()
        cb_composto2.Items.Clear()
        cb_composto3.Items.Clear()
        txt_medida1.Clear()
        txt_medida2.Clear()
        txt_medida3.Clear()
        Close()
    End Sub

    Private Sub frm_inserirprodutos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        valores_compostos()
        cb_composto1.Text = "Sem nada"
        cb_composto2.Text = "Sem nada"
        cb_composto3.Text = "Sem nada"
    End Sub

End Class

Vamos ver se me fiz entender    :wallbash:

Abraço a todos

Nuno Revez   


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
Caça

Para actualizar o stock actual utiliza uma instrução Update

isto.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
informaster

Bom Dia

Mas para subtrair e somar como faço na instrução do update.

Eu quero sumar as linhas que estão na datagrid neste momento

ex da data grid entradas (positivas +):

Produto    Quantidade

queijo      2

tomate      1

fiambre    7

ex da data grid acertos:

Produto    Quantidade

queijo      -1

tomate      1

Ok o queijo tenho 1 afinal

Ok o tomate tenho 2 afinal

Que exemplo seria aqui para somar e subtrair esta condição toda?

Abraço

Nuno Revez


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
Caça

Ex:

UPDATE Artigos SET Quantidade = Quantidade + 5 where ID = IDArtigo


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
informaster

Bom Dia

tenho assim para inserir na tabela de movimentos dos produtos

'INSERE OS REGISTOS DAS TEXTBOX´S NA BD SQLITE ENTRADAS DE PRODUTOS
            SQLcommand.CommandText = "INSERT INTO movsaidas(produto,quantidade,data,hora,empregado,iddoc)  VALUES ('" + cb_produtosins.Text.Replace("'", "''") + "','" + txt_quantidade.Text.Replace("'", "''") + "','" + frm_principal.txt_data.Text.Replace("'", "''") + "','" + frm_principal.txt_hora.Text.Replace("'", "''") + "','" + frm_principal.txt_infoemp.Text.Replace("'", "''") + "','" + txt_iddoc.Text.Replace("'", "''") + "')"

a seguir a esta instrução tenho que colocar o que tinha na txt_quantidade o valor adicional (+) ou (-) para dentro da tabela produtos onde tenho um campo stock actual.

Como seria instrução?????

:wallbash:

Atentamente

Nuno Revez


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
Caça

Ex:

UPDATE Artigos SET Quantidade = Quantidade + 5 where ID = IDArtigo


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
informaster

Boa Noite

Eu já fiz de maneira que actualiza stock mas agora não me aparece no data grid as linhas que insiro

se tirar a linha do update já aparece a linha que inseri na datagrid

Muito estranho

Private Sub bt_inserirlinha_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_inserirlinha.Click
        Try
            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'Botao gravar está enable
            bt_gravarentrada.Enabled = True

            Dim maisstock As Integer = txt_quantidade.Value
            'INSERE OS REGISTOS DAS TEXTBOX´S NA BD SQLITE ENTRADAS DE PRODUTOS
            SQLcommand.CommandText = "INSERT INTO moventradas(produto,quantidade,data,hora,empregado,iddoc)  VALUES ('" + cb_produtosins.Text.Replace("'", "''") + "','" + txt_quantidade.Text.Replace("'", "''") + "','" + frm_principal.txt_data.Text.Replace("'", "''") + "','" + frm_principal.txt_hora.Text.Replace("'", "''") + "','" + frm_principal.txt_infoemp.Text.Replace("'", "''") + "','" + txt_iddoc.Text.Replace("'", "''") + "')"
            SQLcommand.CommandText = "UPDATE produtos SET stockactual = stockactual + ('" + maisstock.ToString + "') WHERE id=id"

            'executa a consulta
            SQLcommand.ExecuteNonQuery()
            SQLcommand.Dispose()
            SQLconnect.Close()

            carregaentradas()
            valores_produtos()
            cb_produtosins.Text = String.Empty
            txt_quantidade.Value = "1"

        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try
        cb_produtosins.Focus()
        carregaentradas()
    End Sub


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
informaster

Depois ainda á outro problema é que actualiza toda a coluna da quantidade dentro da tabela moventradas com o mesmo numero.

Ou seja

Tenho a tabela moventradas onde grava todos os movimentos de quantidades artigo a artigo

Depois tenho que fazer o update na tabela produtos e actualizar o campo stockactual. Mas só desse artigo de linha a linha.

Eu penso é que não posso gravar logo na base de dados o documento que tou a dar entrada e só no fim é que soma quantidade a quantidade e adiciona a quantidade produto a produto.

Sinceramente não consigo já ter ideias para fazer isto bem.

Alguem me pode ajudar?

Abraço a todos  :wallbash:


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
Caça

SQLcommand.CommandText = "UPDATE produtos SET stockactual = stockactual + ('" + maisstock.ToString + "') WHERE id=id"

Não estás a parametrizar o ID


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Caça

Certo, pelo que eu vi, corresponde à Textbox "cb_produtosins"


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
informaster

sim é essa a combobox com as descrições dos produtos

Ok essa parte já resolvi coloquei uma txt_id com o id do produto

Fica aqui a total programação dessa form das entradas de produtos.

Imports System.Data.SQLite

Public Class frm_entradas
    Dim sConnectionString As String

    Private Sub carregaentradas()
        Try
            'define string de conexão com banco de dados SQLite
            'usando a criptografia
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            'abre a conexão
            Dim oConn As New SQLite.SQLiteConnection(sConnectionString)
            oConn.Open()
            'define o comando SQL para retornar todos os dados da tabela Movimentos Entradas
            Dim daentradas As New SQLite.SQLiteDataAdapter("Select id,produto,quantidade,data,hora,empregado,iddoc From moventradas Where empregado='" & frm_principal.txt_infoemp.Text & "' AND data = '" & frm_principal.txt_data.Text & "' AND iddoc = '" & txt_iddoc.Text & "' order by id Desc", oConn)
            'define o dataset
            Dim ds As New DataSet("Northwind")
            'define o esquema da tabela
            daentradas.FillSchema(ds, SchemaType.Source, "moventradas")
            'preenche o dataset
            daentradas.Fill(ds, "moventradas")
            'exibe os dados no datagridview
            gdvDados_entradas.DataSource = ds.Tables("moventradas")
            'fecha a conexao
            oConn.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o banco de dados SQLite: " & ex.Message)
        End Try
    End Sub

    Public Sub valores_produtos()
        Try

            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'executa a consulta
            SQLcommand.CommandText = "Select * from produtos"

            'VARIAVEL LEITOR É UM DATA READER DO SQLITE E PODE SER IGUAL A UM COMANDO SQL . EXECUTANDO UM READER
            Dim leitorprodutos As SQLiteDataReader = SQLcommand.ExecuteReader()

            'SE LEITOR  TIVER LINHAS ENTÃO
            If leitorprodutos.HasRows Then

                'EXECUTA ATE LERES OS DADOS TIPO ACESSO PARA STRING
                While leitorprodutos.Read()
                    cb_produtosins.Items.Add(leitorprodutos.Item("descricao")).ToString()
                    cb_produtosins.Text = leitorprodutos.Item("descricao")
                    txt_stockactual.Text = leitorprodutos.Item("stockactual")
                    txt_id.Text = leitorprodutos.Item("id")
                End While
            End If

            SQLcommand.Dispose()
            SQLconnect.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub

    Public Sub valores_actualizados()
        Try

            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'executa a consulta
            SQLcommand.CommandText = "Select * from produtos"

            'VARIAVEL LEITOR É UM DATA READER DO SQLITE E PODE SER IGUAL A UM COMANDO SQL . EXECUTANDO UM READER
            Dim leitorprodutos As SQLiteDataReader = SQLcommand.ExecuteReader()

            'SE LEITOR  TIVER LINHAS ENTÃO
            If leitorprodutos.HasRows Then

                'EXECUTA ATE LERES OS DADOS TIPO ACESSO PARA STRING
                While leitorprodutos.Read()
                    txt_stockactual.Text = leitorprodutos.Item("stockactual")
                    txt_id.Text = leitorprodutos.Item("id")
                End While
            End If

            SQLcommand.Dispose()
            SQLconnect.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub



    Private Sub bt_sairacesso_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_sairentrada.Click
        frm_principal.Enabled = True
        Me.Close()

    End Sub

    Private Sub frm_entradas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        frm_principal.Enabled = False
        bt_gravarentrada.Enabled = False

        carregaentradas()
        valores_produtos()
        valores_iddocentradas()
    End Sub
    Public Sub valores_iddocentradas()
        Try

            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'executa a consulta
            SQLcommand.CommandText = "Select docnumero from docentradas"

            'VARIAVEL LEITOR É UM DATA READER DO SQLITE E PODE SER IGUAL A UM COMANDO SQL . EXECUTANDO UM READER
            Dim leitordocentradas As SQLiteDataReader = SQLcommand.ExecuteReader()

            'SE LEITOR  TIVER LINHAS ENTÃO
            If leitordocentradas.HasRows Then

                'EXECUTA ATE LERES OS DADOS TIPO ACESSO PARA STRING
                While leitordocentradas.Read()
                    txt_iddoc.Text = (leitordocentradas.Item("docnumero") + 1)

                End While
            End If

            SQLcommand.Dispose()
            SQLconnect.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub

    Private Sub bt_inserirlinha_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_inserirlinha.Click
        Try
            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'Botao gravar está enable
            bt_gravarentrada.Enabled = True

            Dim maisstock As String = txt_quantidade.Value
            Dim idproduto As String = txt_id.Text
            'INSERE OS REGISTOS DAS TEXTBOX´S NA BD SQLITE ENTRADAS DE PRODUTOS
            SQLcommand.CommandText = "INSERT INTO moventradas(produto,quantidade,data,hora,empregado,iddoc)  VALUES ('" + cb_produtosins.Text.Replace("'", "''") + "','" + txt_quantidade.Text.Replace("'", "''") + "','" + frm_principal.txt_data.Text.Replace("'", "''") + "','" + frm_principal.txt_hora.Text.Replace("'", "''") + "','" + frm_principal.txt_infoemp.Text.Replace("'", "''") + "','" + txt_iddoc.Text.Replace("'", "''") + "')"
            SQLcommand.CommandText = "UPDATE produtos SET stockactual = stockactual + ('" + maisstock.ToString + "') WHERE id=('" + idproduto.ToString + "')"

            'executa a consulta
            SQLcommand.ExecuteNonQuery()
            SQLcommand.Dispose()
            SQLconnect.Close()

            valores_actualizados()
            cb_produtosins.Text = String.Empty
            txt_quantidade.Value = "1"

        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try
        cb_produtosins.Focus()
        carregaentradas()
    End Sub

    Private Sub bt_gravarentrada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_gravarentrada.Click
        Try
            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand


            'INSERE OS REGISTOS DAS TEXTBOX´S NA BD SQLITE docentradas
            SQLcommand.CommandText = "INSERT INTO docentradas(docnumero)  VALUES ('" + txt_iddoc.Text.Replace("'", "''") + "')"

            'executa a consulta
            SQLcommand.ExecuteNonQuery()
            SQLcommand.Dispose()
            SQLconnect.Close()

            'Mensagem quando guarda
            MsgBox("Foi inserido um novo documento de ENTRADA DE STOCK Nº" + txt_iddoc.Text.ToUpper + "Por o empregado, " + frm_principal.txt_infoemp.Text)
            Me.Close()
            frm_principal.Enabled = True

        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub


    Private Sub bt_cancelarentrada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_cancelarentrada.Click
        frm_principal.Enabled = True
        Close()
    End Sub

    Private Sub cb_produtosins_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles cb_produtosins.MouseClick
        valores_actualizados()
    End Sub



    Private Sub cb_produtosins_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cb_produtosins.SelectedValueChanged
        valores_actualizados()
    End Sub
End Class

Agora passa-se é duas coisas na data grid não aparece os valores quando insiro linha a linha

E quando mudo de produto na combobox não me actualiza nem o txt_id nem o txt_stockactual pois esses é que vão actualizar o stock actual na tabela produtos.

Por eu disse que WHERE id = txt_id

Entendes. Desculpa lá mas isto é dificil para quem começou a programar á 2 semanas. :wallbash:


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
informaster

Olha se tirar a linha do UPDATE já me aparece na datagrid as linhas que insiro.

aiai meu Deus. :smoke:

No entanto a actualização de quando mexo na combobox mantem-se sem alterar o txt_id quando se muda de produto..... :wallbash:


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
Caça

Repara

SQLcommand.CommandText = "INSERT INTO moventradas(produto,quantidade,data,hora,empregado,iddoc)  VALUES ('" + cb_produtosins.Text.Replace("'", "''") + "','" + txt_quantidade.Text.Replace("'", "''") + "','" + frm_principal.txt_data.Text.Replace("'", "''") + "','" + frm_principal.txt_hora.Text.Replace("'", "''") + "','" + frm_principal.txt_infoemp.Text.Replace("'", "''") + "','" + txt_iddoc.Text.Replace("'", "''") + "')"
SQLcommand.CommandText = "UPDATE produtos SET stockactual = stockactual + ('" + maisstock.ToString + "') WHERE id=('" + idproduto.ToString + "')"

'executa a consulta
SQLcommand.ExecuteNonQuery()

Não estas a executar a query Insert, deveria ficar assim

SQLcommand.CommandText = "INSERT INTO moventradas(produto,quantidade,data,hora,empregado,iddoc)  VALUES ('" + cb_produtosins.Text.Replace("'", "''") + "','" + txt_quantidade.Text.Replace("'", "''") + "','" + frm_principal.txt_data.Text.Replace("'", "''") + "','" + frm_principal.txt_hora.Text.Replace("'", "''") + "','" + frm_principal.txt_infoemp.Text.Replace("'", "''") + "','" + txt_iddoc.Text.Replace("'", "''") + "')"
'executa a consulta
SQLcommand.ExecuteNonQuery()           
SQLcommand.CommandText = "UPDATE produtos SET stockactual = stockactual + ('" + maisstock.ToString + "') WHERE id=('" + idproduto.ToString + "')"
'executa a consulta
SQLcommand.ExecuteNonQuery()


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
informaster

Meu Deus, será que é normal depois de uma resposta ficarmos envergonhados.

Desculpa por favor nem tinha reparado nisso.

aiaiaiai

E o facto de quando eu mexer na combo e alterar o produto o id_txt não mudar ?

qual é o event para isso? da combobox

já experimenter Changed, click etc e não muda o valor da txt_id onde contem o actual id do produto ....


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
Caça

O Evento utilizado é o Evento por defeito(aquele que aparece ao dar duplo clique) que é SelectedIndexChanged


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
informaster

Pois meti isto lá

Public Sub valores_actualizados()
        Try

            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'executa a consulta
            SQLcommand.CommandText = "Select * from produtos"

            'VARIAVEL LEITOR É UM DATA READER DO SQLITE E PODE SER IGUAL A UM COMANDO SQL . EXECUTANDO UM READER
            Dim leitorprodutos2 As SQLiteDataReader = SQLcommand.ExecuteReader()

            'SE LEITOR  TIVER LINHAS ENTÃO
            If leitorprodutos2.HasRows Then

                'EXECUTA ATE LERES OS DADOS TIPO ACESSO PARA STRING
                While leitorprodutos2.Read()
                    txt_stockactual.Text = leitorprodutos2.Item("stockactual")
                    txt_id.Text = leitorprodutos2.Item("id")
                End While
            End If

            SQLcommand.Dispose()
            SQLconnect.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub

    Private Sub cb_produtosins_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cb_produtosins.SelectedIndexChanged
        valores_actualizados()
    End Sub

Mas não me muda nada nas texts boxs


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
informaster

Bem de qualquer maneira o topico pode ser fechado vou abrir novos topicos.

Obrigado por tudo

Estou aprender muito convosco.

Agradeço muito. Se precisarem seja o que for de mim estou disponivel.

Abraço


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
Caça

Mas não me muda nada nas texts boxs

Mas o Evento não está a ser disparado?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
informaster

Muito Estranho

Meti isto para testar

    Private Sub cb_produtosins_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cb_produtosins.SelectedIndexChanged
        txt_id.Text = "mudou"
    End Sub

sabes eu penso que o problemas está aqui porque quando meto isto ele simplesmente bloqueia a aplicação na entrada e nem dá erro.

Public Sub valores_actualizados()
        Try

            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'executa a consulta
            SQLcommand.CommandText = "Select * from produtos"

            'VARIAVEL LEITOR É UM DATA READER DO SQLITE E PODE SER IGUAL A UM COMANDO SQL . EXECUTANDO UM READER
            Dim leitorprodutos2 As SQLiteDataReader = SQLcommand.ExecuteReader()

            'SE LEITOR  TIVER LINHAS ENTÃO
            If leitorprodutos2.HasRows Then

                'EXECUTA ATE LERES OS DADOS TIPO ACESSO PARA STRING
                While leitorprodutos2.Read()
                    txt_stockactual.Text = leitorprodutos2.Item("stockactual")
                    txt_id.Text = leitorprodutos2.Item("id")

                End While
            End If

            SQLcommand.Dispose()
            SQLconnect.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub

pois é isto que faz actualizar os dados das txtboxs


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
informaster

no entanto com o exemplo em cima que testei dá e a txtid muda

se meter valores_actualizados ()

não funciona bloqueia a aplicação.

isto para resumir.


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
Caça

Já te dei uma resposta no teu novo tópico


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
informaster

Fecha este.

este tá já muito grande e mais que resolvido apesar do tema ser interessante para todos.

Grande Abraço


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
informaster

Bingo

Já temos a Form Entrada de Stock de Artigos a dar entrada nos conformes.

Ficou assim tudo:

Tabelas a usar:

Produtos (onde estão produtos e stocks actuais)

Moventradas (onde damos entrada de stocks positicos desses produtos linha a linha)

Imports System.Data.SQLite

Public Class frm_entradas
    Dim sConnectionString As String

    Private Sub carregaentradas()
        Try
            'define string de conexão com banco de dados SQLite
            'usando a criptografia
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            'abre a conexão
            Dim oConn As New SQLite.SQLiteConnection(sConnectionString)
            oConn.Open()
            'define o comando SQL para retornar todos os dados da tabela Movimentos Entradas
            Dim daentradas As New SQLite.SQLiteDataAdapter("Select id,produto,quantidade,data,hora,empregado,iddoc From moventradas Where empregado='" & frm_principal.txt_infoemp.Text & "' AND data = '" & frm_principal.txt_data.Text & "'order by id Desc", oConn)
            'AND iddoc = '" & txt_iddoc.Text & "'
            'define o dataset
            Dim ds As New DataSet("Northwind")
            'define o esquema da tabela
            daentradas.FillSchema(ds, SchemaType.Source, "moventradas")
            'preenche o dataset
            daentradas.Fill(ds, "moventradas")
            'exibe os dados no datagridview
            gdvDados_entradas.DataSource = ds.Tables("moventradas")
            'fecha a conexao
            oConn.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o banco de dados SQLite: " & ex.Message)
        End Try
    End Sub

    Public Sub valores_produtos()
        Try

            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'executa a consulta
            SQLcommand.CommandText = "Select * from produtos"

            'VARIAVEL LEITOR É UM DATA READER DO SQLITE E PODE SER IGUAL A UM COMANDO SQL . EXECUTANDO UM READER
            Dim leitorprodutos As SQLiteDataReader = SQLcommand.ExecuteReader()

            'SE LEITOR  TIVER LINHAS ENTÃO
            If leitorprodutos.HasRows Then

                'EXECUTA ATE LERES OS DADOS TIPO ACESSO PARA STRING
                While leitorprodutos.Read()
                    cb_produtosins.Items.Add(leitorprodutos.Item("descricao")).ToString()
                    cb_produtosins.Text = leitorprodutos.Item("descricao")
                    txt_stockactual.Text = leitorprodutos.Item("stockactual")
                    txt_id.Text = leitorprodutos.Item("id")

                End While
            End If

            SQLcommand.Dispose()
            SQLconnect.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub

    Public Sub valores_actualizados(ByVal actualizar As String)
        Try

            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'executa a consulta
            SQLcommand.CommandText = "SELECT * FROM produtos WHERE descricao = '" + actualizar + "'"

            'WHERE id=('" + txt_id.ToString + "') AND stockactual=('" + txt_stockactual.ToString + "')"

            'VARIAVEL LEITOR É UM DATA READER DO SQLITE E PODE SER IGUAL A UM COMANDO SQL . EXECUTANDO UM READER
            Dim leitorprodutos2 As SQLiteDataReader = SQLcommand.ExecuteReader()

            'SE LEITOR  TIVER LINHAS ENTÃO
            If leitorprodutos2.HasRows Then

                'EXECUTA ATE LERES OS DADOS TIPO ACESSO PARA STRING
                While leitorprodutos2.Read()
                    txt_stockactual.Text = leitorprodutos2.Item("stockactual")
                    txt_id.Text = leitorprodutos2.Item("id")

                End While
            End If

            SQLcommand.Dispose()
            SQLconnect.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub



    Private Sub bt_sairacesso_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_sairentrada.Click
        frm_principal.Enabled = True
        Me.Close()
    End Sub

    Private Sub frm_entradas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        frm_principal.Enabled = False
        bt_gravarentrada.Enabled = False

        carregaentradas()
        valores_produtos()
        valores_iddocentradas()
    End Sub
    Public Sub valores_iddocentradas()
        Try

            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'executa a consulta
            SQLcommand.CommandText = "Select docnumero from docentradas"

            'VARIAVEL LEITOR É UM DATA READER DO SQLITE E PODE SER IGUAL A UM COMANDO SQL . EXECUTANDO UM READER
            Dim leitordocentradas As SQLiteDataReader = SQLcommand.ExecuteReader()

            'SE LEITOR  TIVER LINHAS ENTÃO
            If leitordocentradas.HasRows Then

                'EXECUTA ATE LERES OS DADOS TIPO ACESSO PARA STRING
                While leitordocentradas.Read()
                    txt_iddoc.Text = (leitordocentradas.Item("docnumero") + 1)

                End While
            End If

            SQLcommand.Dispose()
            SQLconnect.Close()
        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub

    Private Sub bt_inserirlinha_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_inserirlinha.Click
        Try
            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand

            'Botao gravar está enable
            bt_gravarentrada.Enabled = True

            Dim maisstock As String = txt_quantidade.Value
            Dim idproduto As String = txt_id.Text

            'INSERE OS REGISTOS DAS TEXTBOX´S NA BD SQLITE ENTRADAS DE PRODUTOS
            SQLcommand.CommandText = "INSERT INTO moventradas(produto,quantidade,data,hora,empregado,iddoc)  VALUES ('" + cb_produtosins.Text.Replace("'", "''") + "','" + txt_quantidade.Text.Replace("'", "''") + "','" + frm_principal.txt_data.Text.Replace("'", "''") + "','" + frm_principal.txt_hora.Text.Replace("'", "''") + "','" + frm_principal.txt_infoemp.Text.Replace("'", "''") + "','" + txt_iddoc.Text.Replace("'", "''") + "')"
            SQLcommand.ExecuteNonQuery()
            SQLcommand.CommandText = "UPDATE produtos SET stockactual = stockactual + ('" + maisstock.ToString + "') WHERE id=('" + idproduto.ToString + "')"
            SQLcommand.ExecuteNonQuery()
            SQLcommand.Dispose()
            SQLconnect.Close()
            valores_actualizados(cb_produtosins.Text)
            cb_produtosins.Text = String.Empty
            txt_quantidade.Value = "1"

        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

        cb_produtosins.Focus()
        carregaentradas()
    End Sub

    Private Sub bt_gravarentrada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_gravarentrada.Click
        Try
            'define um objeto Command
            Dim SQLcommand As SQLiteCommand
            sConnectionString = "Data Source=C:\StockUs\bdstocks2011.db3;Version=3;New=True;Compress=True;"
            Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString)
            SQLconnect.Open()
            SQLcommand = SQLconnect.CreateCommand


            'INSERE OS REGISTOS DAS TEXTBOX´S NA BD SQLITE docentradas
            SQLcommand.CommandText = "INSERT INTO docentradas(docnumero)  VALUES ('" + txt_iddoc.Text.Replace("'", "''") + "')"

            'executa a consulta
            SQLcommand.ExecuteNonQuery()
            SQLcommand.Dispose()
            SQLconnect.Close()

            'Mensagem quando guarda
            MsgBox("Foi inserido um novo documento de ENTRADA DE STOCK Nº" + txt_iddoc.Text.ToUpper + "Por o empregado, " + frm_principal.txt_infoemp.Text)
            Me.Close()
            frm_principal.Enabled = True

        Catch ex As Exception
            MsgBox("Erro ao acessar o SQLite: " & ex.Message)
        End Try

    End Sub


    Private Sub bt_cancelarentrada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_cancelarentrada.Click
        frm_principal.Enabled = True
        Close()
    End Sub


    Private Sub cb_produtosins_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cb_produtosins.SelectedIndexChanged
        valores_actualizados(cb_produtosins.Text)
    End Sub
End Class

Podemos fechar o topico


 

 

Nuno Revez

@informaster

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.