DATAGRIDVIEW NAO INSERE NO ACCESS
Olá pessoal : Vejam o erro e se podem me ajudar por favor.
THE CONNECTION STRING PROPERTY HAS NOT BEEN INITIALIZED
Vejam abaixo meu código :
Imports System.Data
Imports System.Data.OleDb
Public Class Form4
Dim cnnOLEDB As New OleDbConnection
Dim cmdOLEDB As New OleDbCommand
Dim cmdUpdate As New OleDbCommand
Dim cmd As New OleDbCommand
Dim reader As OleDbDataReader
Dim ds As DataSet
Dim da As OleDbDataAdapter
Dim Con As New OleDbConnection([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\gobras.MDB[Ô])
Dim form4button1strProduto As String
Dim intNum As Integer
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim str1
Dim connS As String
connS = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\gobras.mdb;[Ô]
Dim conect As New OleDb.OleDbConnection
conect.ConnectionString = connS
conect.Open()
Dim selcom As New OleDb.OleDbCommand
selcom.CommandText = [Ô]SELECT max(num) FROM [produtos];[Ô]
selcom.Connection = conect
Dim dr As OleDb.OleDbDataReader
dr = selcom.ExecuteReader()
While dr.Read()
intNum = dr.Item(0)
End While
conect.Close()
With DataGridView1
If .Rows.Count = 0 Then
MsgBox([Ô]Não existem Ãtens para serem carregados.[Ô])
Else
Try
cmd = New OleDb.OleDbCommand
cmd.Connection = Con
Dim strDatacadastro As Date
Dim strFamilia As String
Dim strProduto As String
Dim strFoto As String
Dim strUnidade As String
Dim douPrecoproduto As Double
For x As Integer = 0 To DataGridView1.Rows.Count - 1
intNum = intNum + 1
strFamilia = DataGridView1.Rows(x).Cells(0).Value
strProduto = DataGridView1.Rows(x).Cells(1).Value
douPrecoproduto = DataGridView1.Rows(x).Cells(2).Value
strFoto = DataGridView1.Rows(x).Cells(3).Value
strUnidade = DataGridView1.Rows(x).Cells(4).Value
strDatacadastro = Today
Con.Open()
str1 = [Ô]INSERT INTO produtos(num,familia,produto,precoproduto,foto,unidade,datacadastro)values(@num,@familia,@produto,@precoproduto,@foto,@unidade,@datacadastro)[Ô]
Dim com As New OleDb.OleDbCommand(str1, Con)
com.Parameters.AddWithValue([Ô]@num[Ô], intNum)
com.Parameters.AddWithValue([Ô]@familia[Ô], strFamilia)
com.Parameters.AddWithValue([Ô]@produto[Ô], strProduto)
com.Parameters.AddWithValue([Ô]@precoproduto[Ô], douPrecoproduto)
com.Parameters.AddWithValue([Ô]@foto[Ô], strFoto)
com.Parameters.AddWithValue([Ô]@unidade[Ô], strUnidade)
com.Parameters.AddWithValue([Ô]@datacadastro[Ô], strDatacadastro)
com.ExecuteNonQuery()
Con.Dispose()
Next
MessageBox.Show([Ô]Registered Successfully![Ô], [Ô]Register[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As OleDb.OleDbException
MsgBox(ex.Message, MsgBoxStyle.Critical, [Ô]Oledb Error[Ô])
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, [Ô]General Error[Ô])
End Try
End If
End With
Con.Close()
End Sub
THE CONNECTION STRING PROPERTY HAS NOT BEEN INITIALIZED
Vejam abaixo meu código :
Imports System.Data
Imports System.Data.OleDb
Public Class Form4
Dim cnnOLEDB As New OleDbConnection
Dim cmdOLEDB As New OleDbCommand
Dim cmdUpdate As New OleDbCommand
Dim cmd As New OleDbCommand
Dim reader As OleDbDataReader
Dim ds As DataSet
Dim da As OleDbDataAdapter
Dim Con As New OleDbConnection([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\gobras.MDB[Ô])
Dim form4button1strProduto As String
Dim intNum As Integer
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim str1
Dim connS As String
connS = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\gobras.mdb;[Ô]
Dim conect As New OleDb.OleDbConnection
conect.ConnectionString = connS
conect.Open()
Dim selcom As New OleDb.OleDbCommand
selcom.CommandText = [Ô]SELECT max(num) FROM [produtos];[Ô]
selcom.Connection = conect
Dim dr As OleDb.OleDbDataReader
dr = selcom.ExecuteReader()
While dr.Read()
intNum = dr.Item(0)
End While
conect.Close()
With DataGridView1
If .Rows.Count = 0 Then
MsgBox([Ô]Não existem Ãtens para serem carregados.[Ô])
Else
Try
cmd = New OleDb.OleDbCommand
cmd.Connection = Con
Dim strDatacadastro As Date
Dim strFamilia As String
Dim strProduto As String
Dim strFoto As String
Dim strUnidade As String
Dim douPrecoproduto As Double
For x As Integer = 0 To DataGridView1.Rows.Count - 1
intNum = intNum + 1
strFamilia = DataGridView1.Rows(x).Cells(0).Value
strProduto = DataGridView1.Rows(x).Cells(1).Value
douPrecoproduto = DataGridView1.Rows(x).Cells(2).Value
strFoto = DataGridView1.Rows(x).Cells(3).Value
strUnidade = DataGridView1.Rows(x).Cells(4).Value
strDatacadastro = Today
Con.Open()
str1 = [Ô]INSERT INTO produtos(num,familia,produto,precoproduto,foto,unidade,datacadastro)values(@num,@familia,@produto,@precoproduto,@foto,@unidade,@datacadastro)[Ô]
Dim com As New OleDb.OleDbCommand(str1, Con)
com.Parameters.AddWithValue([Ô]@num[Ô], intNum)
com.Parameters.AddWithValue([Ô]@familia[Ô], strFamilia)
com.Parameters.AddWithValue([Ô]@produto[Ô], strProduto)
com.Parameters.AddWithValue([Ô]@precoproduto[Ô], douPrecoproduto)
com.Parameters.AddWithValue([Ô]@foto[Ô], strFoto)
com.Parameters.AddWithValue([Ô]@unidade[Ô], strUnidade)
com.Parameters.AddWithValue([Ô]@datacadastro[Ô], strDatacadastro)
com.ExecuteNonQuery()
Con.Dispose()
Next
MessageBox.Show([Ô]Registered Successfully![Ô], [Ô]Register[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As OleDb.OleDbException
MsgBox(ex.Message, MsgBoxStyle.Critical, [Ô]Oledb Error[Ô])
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, [Ô]General Error[Ô])
End Try
End If
End With
Con.Close()
End Sub
Deixa eu tentar adivinhar o que está acontecendo :
Você carrega o grid no form, preenche com alguns Ãtens e clica no botão gravar, mas os Ãtens que você colocou no grid, não são gravados, certo?
A resposta é simples: Um pequeno erro de lógica.
Ao clicar no botão [Ô]Button5[Ô], que suponho seja seu botão gravar, você está carregando o grid novamente, do zero. Ou seja, todos os Ãtens que você colocou no grid, já eram...
Você carrega o grid no form, preenche com alguns Ãtens e clica no botão gravar, mas os Ãtens que você colocou no grid, não são gravados, certo?
A resposta é simples: Um pequeno erro de lógica.
Ao clicar no botão [Ô]Button5[Ô], que suponho seja seu botão gravar, você está carregando o grid novamente, do zero. Ou seja, todos os Ãtens que você colocou no grid, já eram...
Obrigado Kerplunk.
Na verdade eu carrego os dados de uma plan excel.
Depois de carregados os dados no datagridview eu uso o botão 5 para gravar.
Não consigo enxergar como eu estarÃa recarregando o datagrid. Se você puder ser mais especÃfico eu agradeço;
Me ajuda jovem, pois não consigo enxergar esse meu erro. Não consegui imaginar o que eu terÃa de mudar.
Agradeço;
Na verdade eu carrego os dados de uma plan excel.
Depois de carregados os dados no datagridview eu uso o botão 5 para gravar.
Não consigo enxergar como eu estarÃa recarregando o datagrid. Se você puder ser mais especÃfico eu agradeço;
Me ajuda jovem, pois não consigo enxergar esse meu erro. Não consegui imaginar o que eu terÃa de mudar.
Agradeço;
Hmmm, realmente vi só isso:
E não reparei que você não coloca o datareader no grid....
Mas enfim, o que está acontecendo é que na linha:
Você está fechando a conexão, então o primeiro Ãtem deve gravar, mas os seguintes não.
Coloque essa linha depois do Next que deve resolver.
Dim selcom As New OleDb.OleDbCommand
selcom.CommandText = [Ô]SELECT max(num) FROM [produtos];[Ô]
selcom.Connection = conect
Dim dr As OleDb.OleDbDataReader
dr = selcom.ExecuteReader()
E não reparei que você não coloca o datareader no grid....
Mas enfim, o que está acontecendo é que na linha:
Con.Dispose()
Você está fechando a conexão, então o primeiro Ãtem deve gravar, mas os seguintes não.
Coloque essa linha depois do Next que deve resolver.
Além disso, o Con.Open, deve ficar antes do For. Da maneira que você está fazendo, você abre e fecha a conexão para cada Ãtem e isso não é uma boa idéia...
Matou cara. Resolvido e já funcionando.
Agradeço denovo.
Agradeço denovo.
Tópico encerrado , respostas não são mais permitidas