DATAGRIDVIEW NAO INSERE NO ACCESS

GILBERTOJW 27/12/2012 14:38:31
#416472
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
KERPLUNK 27/12/2012 16:26:17
#416478
Resposta escolhida
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...
GILBERTOJW 27/12/2012 16:36:24
#416480
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;
KERPLUNK 27/12/2012 16:42:52
#416482
Hmmm, realmente vi só isso:

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.
KERPLUNK 27/12/2012 16:44:39
#416483
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...
GILBERTOJW 27/12/2012 16:55:16
#416484
Matou cara. Resolvido e já funcionando.
Agradeço denovo.
Tópico encerrado , respostas não são mais permitidas