Jump to content
tiagom91

Gravar dados do data grid na base de dados

Recommended Posts

tiagom91

Boas,

estou a fazer um aplicação de gestão de um loja,  e tenho um form de vendas onde vou buscar os campos relativos aos produtos e etc e estes dados copio para um datagrid feito por mim, falta agora e saber como se grava na base de dados.

alguma luzinha? :P

Share this post


Link to post
Share on other sites
Caça

Qual é a BD que vais usar?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
bioshock

aqui

Devia de ser possível criar binds aqui no P@P. :P

Há quantidade de vezes que dizemos constantemente as mesmas coisas...

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Preenches a Datagrid á mão ou automaticamente?


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
cmd

Desculpa a minha ignorância mas não percebo anda daquilo :S

O que não percebes?


Cumps.cmd

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

For Linhas As Integer = 0 To DataGridView1.RowCount - 1
            Try

                ' Texto de ligação à base de dados
                Dim myConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\Administrador\Ambiente de trabalho\BD.accdb;Persist Security Info=False;"

                ' Comando que irá inserir os dados (Nome, Morada e Idade) na Tabela Dados
                Dim SQL As String = "Insert into Dados ([Nome], [Morada], [idade]) values (@Nom, @Morad, @Idad);"

                ' Cria uma nova ligação à base de dados
                Dim connection As New OleDbConnection(myConnectionString)

                ' Criação do comando indicando a instrução e a ligação
                Dim command As New OleDbCommand(SQL, connection)

                ' Indicação dos parâmetros que serão inseridos

                'Onde esta DataGridView1.Item("Nome", Linhas).Value, altera o  "Nome" para o nome do campo da tua datagrid, e o mesmo para os restantes campos.
                command.Parameters.Add("@Nom", OleDbType.VarChar).Value = DataGridView1.Item("Nome", Linhas).Value ' Le o valor da celula 'Nome' da linha actual
                command.Parameters.Add("@Morad", OleDbType.VarChar).Value = DataGridView1.Item("Morada", Linhas).Value ' Le o valor da celula 'Morada' da linha actual
                command.Parameters.Add("@Idad", OleDbType.VarChar).Value = DataGridView1.Item("Idade", Linhas).Value ' Le o valor da celula 'Idade' da linha actual

                ' Abre a ligação, executa o comando e guarda em "x" o número de registos actualizados
                connection.Open()

                Dim x As Integer = command.ExecuteNonQuery()
                If x < 1 Then
                    MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
                End If

                ' Fecha a ligação e limpa as variáveis
                connection.Close()
                connection = Nothing
                command = Nothing

            Catch
            End Try

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
tiagom91

Fiz as adaptações ao meu código e ficou o seguinte:

 For Linhas As Integer = 0 To DataGridView1.RowCount - 1
            Try

                ' Texto de ligação à base de dados


                ' Comando que irá inserir os dados (Nome, Morada e Idade) na Tabela Dados
                Dim SQL As String = "Insert into venderprodutos ([codigoproduto], [codigocliente], [quantidade], [preço], [data],[tipopagamento], [nºTalao]) values (@codigoproduto, @codigocliente, @quantidade, @preço, @data, @tipopagamento, @Nºtalao);"

                ' Cria uma nova ligação à base de dados
                Dim connection As New OleDbConnection(ConnectionString)

                ' Criação do comando indicando a instrução e a ligação
                Dim command As New OleDbCommand(SQL, connection)

                ' Indicação dos parâmetros que serão inseridos

                'Onde esta DataGridView1.Item("Nome", Linhas).Value, altera o  "Nome" para o nome do campo da tua datagrid, e o mesmo para os restantes campos.
                command.Parameters.Add("@nºtalao", OleDbType.VarChar).Value = DataGridView1.Item("nºtalao", Linhas).Value ' Le o valor da celula 'Nome' da linha actual
                command.Parameters.Add("@codigoproduto", OleDbType.VarChar).Value = DataGridView1.Item("codigoproduto", Linhas).Value ' Le o valor da celula 'Morada' da linha actual
                command.Parameters.Add("@codgocliente", OleDbType.VarChar).Value = DataGridView1.Item("codigocliente", Linhas).Value ' Le o valor da celula 'Idade' da linha actual
                command.Parameters.Add("@quantidade", OleDbType.VarChar).Value = DataGridView1.Item("quantidade", Linhas).Value ' Le o valor da celula 'Nome' da linha actual
                command.Parameters.Add("@preço", OleDbType.VarChar).Value = DataGridView1.Item("preço", Linhas).Value ' Le o valor da celula 'Morada' da linha actual
                command.Parameters.Add("@tipopagamento", OleDbType.VarChar).Value = DataGridView1.Item("tipopagamento", Linhas).Value ' Le o valor da celula 'Nome' da linha actual
                command.Parameters.Add("@data", OleDbType.VarChar).Value = DataGridView1.Item("data", Linhas).Value ' Le o valor da celula 'Idade' da linha actual

                ' Abre a ligação, executa o comando e guarda em "x" o número de registos actualizados
                connection.Open()
                command.ExecuteScalar()
                Dim x As Integer = command.ExecuteNonQuery()
                If x < 1 Then
                    MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
                End If

                ' Fecha a ligação e limpa as variáveis
                connection.Close()
                connection = Nothing
                command = Nothing

            Catch
            End Try

        Next

Dá o seguinte erro: Tipo de dados incorrecto na expressão de critérios.

Share this post


Link to post
Share on other sites
Andrepereira9

E qual é o tipo de dados que tens nos campos da Base de dados??

Verifica se não tens o campo 'Data' como Date, na BD

EDIT:

Indica os parâmetros, pela mesma ordem que os inseres na BD

command.Parameters.Add("@codigoproduto", OleDbType.VarChar).Value = DataGridView1.Item("codigoproduto", Linhas).Value 

command.Parameters.Add("@codgocliente", OleDbType.VarChar).Value = DataGridView1.Item("codigocliente", Linhas).Value
     
command.Parameters.Add("@quantidade", OleDbType.VarChar).Value = DataGridView1.Item("quantidade", Linhas).Value 

command.Parameters.Add("@preço", OleDbType.VarChar).Value = DataGridView1.Item("preço", Linhas).Value

command.Parameters.Add("@data", OleDbType.VarChar).Value = DataGridView1.Item("data", Linhas).Value

command.Parameters.Add("@tipopagamento", OleDbType.VarChar).Value = DataGridView1.Item("tipopagamento", Linhas).Value

command.Parameters.Add("@nºtalao", OleDbType.VarChar).Value = DataGridView1.Item("nºtalao", Linhas).Value

               

Estas a inserir 2 vezes os registos         

command.ExecuteScalar()  'Apaga esta linha. A linha de baixo, faz o mesmo
Dim x As Integer = command.ExecuteNonQuery()

             


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
tiagom91

alterei e deu o seguinte erro: Parâmetro @codigoproduto não tem predefinição.

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Isso acontece porque a Datagrid, tem uma opção 'Habilitar adição de dados', que permite ao utilizador escrever dados na celulas. E com essa opção, el cria aquelas primeira linha de células em branco.

Agora tens 2 opções:

1º Como és tu que inseres os dados na DataGrid, desactivas essa opção.

2º opção: Alteras a linha

For Linhas As Integer = 0 To DataGridView1.RowCount - 1

Para

For Linhas As Integer = 0 To DataGridView1.RowCount - 2


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

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.