ERRO AO INCLUIR UM REGISTRO NA TABELA ACCESS VBNET
Bom dia, pessoal!
Tenho uma situação e não estou conseguindo ver o erro. No form principal eu passo as informações que serão incluÃdas na tabela:
 Private Sub btnIncluir_Click(sender As Object, e As EventArgs) Handles btnIncluir.Click
       If txtDesc.Text = String.Empty Then
           MsgBox([Ô]Informe o nome do Produto[Ô])
           txtDesc.Focus()
           Return
       End If
       Try
           acc.IncluirProd(txtDesc.Text, txtUnidade.Text, Val(txtSAnter.Text), cboSelecione.Text, txtObs.Text)
           MsgBox([Ô]Dados Salvos com sucesso![Ô])
       Catch ex As Exception
           MsgBox([Ô]Erro ao incluir dados![Ô] & vbCrLf & Err.Number & vbCrLf & Err.Description)
       End Try
       CarregaDadosProd()
   End Sub
E na minha classe, que faço a carga:
Public Sub IncluirProd(ByVal Descricao As String, ByVal Unidade As String, ByVal SAnterior As Integer, ByVal Especie As String, ByVal Obs As String)
       Try
           cn = getConexaoDB()
           Cmd.Connection = cn
           Cmd.CommandText = [Ô]INSERT INTO PRODUTOS (Descricao, Unidade, SAnterior, Especie, Obs ) [Ô] & [Ô] VALUES (@Descricao, @Unidade, @SAnterior, @Especie, @Obs)[Ô]
           Cmd.CommandType = CommandType.Text
           With Cmd.Parameters
               .Add(New OleDbParameter([Ô]@Descricao[Ô], OleDbType.VarChar, 200, [Ô]Descricao[Ô]))
               .Add(New OleDbParameter([Ô]@Unidade[Ô], OleDbType.VarChar, 25, [Ô]Unidade[Ô]))
               .Add(New OleDbParameter([Ô]@SAnterior[Ô], OleDbType.Integer, 5, [Ô]SAnterior[Ô]))
               .Add(New OleDbParameter([Ô]@Especie[Ô], OleDbType.VarChar, 20, [Ô]Especie[Ô]))
               .Add(New OleDbParameter([Ô]@Obs[Ô], OleDbType.VarChar, 255, [Ô]Obs[Ô]))
           End With
           Cmd.ExecuteNonQuery()
       Catch ex As Exception
           Throw ex
       Finally
           closeConexaoDB(cn)
       End Try
   End Sub
Quando Executo a querie para incluir está me retornando erro código 5 o Valor @Descricao não tem valor padrão! (Na depuração me mostra o valor digitado correto)
Como resolvo isto, pois é só uma inclusão, simples de tudo, estou usando access 2010 (estou usando mdb, versão 4.0 : <add name=[Ô]ConexaoEstq[Ô] providerName=[Ô]System.Data.OleDb[Ô] connectionString=[Ô]Provider=Microsoft.Jet.OleDb.4.0; Data Source=C:\dados\Estoque.mdb[Ô]/>
Framework 4.5.2
Alguém poderia me indicar onde estou errando????
Obrigado.
Tenho uma situação e não estou conseguindo ver o erro. No form principal eu passo as informações que serão incluÃdas na tabela:
 Private Sub btnIncluir_Click(sender As Object, e As EventArgs) Handles btnIncluir.Click
       If txtDesc.Text = String.Empty Then
           MsgBox([Ô]Informe o nome do Produto[Ô])
           txtDesc.Focus()
           Return
       End If
       Try
           acc.IncluirProd(txtDesc.Text, txtUnidade.Text, Val(txtSAnter.Text), cboSelecione.Text, txtObs.Text)
           MsgBox([Ô]Dados Salvos com sucesso![Ô])
       Catch ex As Exception
           MsgBox([Ô]Erro ao incluir dados![Ô] & vbCrLf & Err.Number & vbCrLf & Err.Description)
       End Try
       CarregaDadosProd()
   End Sub
E na minha classe, que faço a carga:
Public Sub IncluirProd(ByVal Descricao As String, ByVal Unidade As String, ByVal SAnterior As Integer, ByVal Especie As String, ByVal Obs As String)
       Try
           cn = getConexaoDB()
           Cmd.Connection = cn
           Cmd.CommandText = [Ô]INSERT INTO PRODUTOS (Descricao, Unidade, SAnterior, Especie, Obs ) [Ô] & [Ô] VALUES (@Descricao, @Unidade, @SAnterior, @Especie, @Obs)[Ô]
           Cmd.CommandType = CommandType.Text
           With Cmd.Parameters
               .Add(New OleDbParameter([Ô]@Descricao[Ô], OleDbType.VarChar, 200, [Ô]Descricao[Ô]))
               .Add(New OleDbParameter([Ô]@Unidade[Ô], OleDbType.VarChar, 25, [Ô]Unidade[Ô]))
               .Add(New OleDbParameter([Ô]@SAnterior[Ô], OleDbType.Integer, 5, [Ô]SAnterior[Ô]))
               .Add(New OleDbParameter([Ô]@Especie[Ô], OleDbType.VarChar, 20, [Ô]Especie[Ô]))
               .Add(New OleDbParameter([Ô]@Obs[Ô], OleDbType.VarChar, 255, [Ô]Obs[Ô]))
           End With
           Cmd.ExecuteNonQuery()
       Catch ex As Exception
           Throw ex
       Finally
           closeConexaoDB(cn)
       End Try
   End Sub
Quando Executo a querie para incluir está me retornando erro código 5 o Valor @Descricao não tem valor padrão! (Na depuração me mostra o valor digitado correto)
Como resolvo isto, pois é só uma inclusão, simples de tudo, estou usando access 2010 (estou usando mdb, versão 4.0 : <add name=[Ô]ConexaoEstq[Ô] providerName=[Ô]System.Data.OleDb[Ô] connectionString=[Ô]Provider=Microsoft.Jet.OleDb.4.0; Data Source=C:\dados\Estoque.mdb[Ô]/>
Framework 4.5.2
Alguém poderia me indicar onde estou errando????
Obrigado.
Coloque um valor para Descricao, Unidade, SAnterior, Especie, Obs
Não tem nenhum.
Descricao = Cachorro
unidade = 2 eeeeeeeeeee assim por diante
Não tem nenhum.
Descricao = Cachorro
unidade = 2 eeeeeeeeeee assim por diante
Posso estar falando besteira, mas em cada parâmetro adicionado, a variável deveria estar sem as aspas, não é?
.Add(New OleDbParameter([Ô]@Descricao[Ô], OleDbType.VarChar, 200, Descricao))
.Add(New OleDbParameter([Ô]@Unidade[Ô], OleDbType.VarChar, 25, Unidade))
.Add(New OleDbParameter([Ô]@SAnterior[Ô], OleDbType.Integer, 5, SAnterior))
.Add(New OleDbParameter([Ô]@Especie[Ô], OleDbType.VarChar, 20, Especie))
.Add(New OleDbParameter([Ô]@Obs[Ô], OleDbType.VarChar, 255, Obs))
Engano seu Omar 2017! Estou passando os valores na rotina: acc.IncluirProd(txtDesc.Text, txtUnidade.Text, Val(txtSAnter.Text), cboSelecione.Text, txtObs.Text)
Na Classe ao passar o cursor nas variáveis estão os valores conforme digitado no Formuário. Com certeza o problema é outro! Obrigado pela tentativa. Ainda continuo sofrendo buscando outras soluções...
Na Classe ao passar o cursor nas variáveis estão os valores conforme digitado no Formuário. Com certeza o problema é outro! Obrigado pela tentativa. Ainda continuo sofrendo buscando outras soluções...
Boa tarde, sr. PerciFilho. Tirando as aspas dá erro Expression Expected.
Severity Code Description Project File Line Suppression State
Error BC30201 Expression expected. Estq C:\Dados\Estq\Estq\AcessoDados.vb 35 Active
Obrigado, mesmo assim.
Severity Code Description Project File Line Suppression State
Error BC30201 Expression expected. Estq C:\Dados\Estq\Estq\AcessoDados.vb 35 Active
Obrigado, mesmo assim.
O Problema deve estar na no commandtext, para testar deixe a descrição após a unidade ex:
.Add(New OleDbParameter([Ô]@Unidade[Ô], OleDbType.VarChar, 25, [Ô]Unidade[Ô]))
.Add(New OleDbParameter([Ô]@Descricao[Ô], OleDbType.VarChar, 200, [Ô]Descricao[Ô]))
Fatalmente o erro vai dar na unidade.
.Add(New OleDbParameter([Ô]@Unidade[Ô], OleDbType.VarChar, 25, [Ô]Unidade[Ô]))
.Add(New OleDbParameter([Ô]@Descricao[Ô], OleDbType.VarChar, 200, [Ô]Descricao[Ô]))
Fatalmente o erro vai dar na unidade.
Nilson. Troquei a ordem e mesmo assim continua dando o erro o Parâmetro @Descricao não tem valor padrão. Erro 5
Se vc testou que a função esta realmente recebendo os valores, resta saber se existe esse campo na sua tabela.
Se recebe um valor então tente isto.
With Cmd.Parameters
.Add(New OleDbParameter([Ô]@Descricao[Ô], OleDbType.VarChar, 200, [Ô]Descricao[Ô])).Value = Descricao
.Add(New OleDbParameter([Ô]@Unidade[Ô], OleDbType.VarChar, 25, [Ô]Unidade[Ô])).Value = Unidade
.Add(New OleDbParameter([Ô]@SAnterior[Ô], OleDbType.Integer, 5, [Ô]SAnterior[Ô])).Value = SAnterior
.Add(New OleDbParameter([Ô]@Especie[Ô], OleDbType.VarChar, 20, [Ô]Especie[Ô])).Value = Especie
.Add(New OleDbParameter([Ô]@Obs[Ô], OleDbType.VarChar, 255, [Ô]Obs[Ô])).Value = Obs
End With
With Cmd.Parameters
.Add(New OleDbParameter([Ô]@Descricao[Ô], OleDbType.VarChar, 200, [Ô]Descricao[Ô])).Value = Descricao
.Add(New OleDbParameter([Ô]@Unidade[Ô], OleDbType.VarChar, 25, [Ô]Unidade[Ô])).Value = Unidade
.Add(New OleDbParameter([Ô]@SAnterior[Ô], OleDbType.Integer, 5, [Ô]SAnterior[Ô])).Value = SAnterior
.Add(New OleDbParameter([Ô]@Especie[Ô], OleDbType.VarChar, 20, [Ô]Especie[Ô])).Value = Especie
.Add(New OleDbParameter([Ô]@Obs[Ô], OleDbType.VarChar, 255, [Ô]Obs[Ô])).Value = Obs
End With
Existe sim. Já tinha ate olhado isto. Então fiz estas alterações:
Cmd.CommandText = [Ô]INSERT INTO PRODUTOS (Descricao, Unidade, SAnterior, Especie, Obs) VALUES (@Descricax, @Unidade, @SAnterior, @Especie, @Obs)[Ô]
Cmd.Parameters.Add(New OleDbParameter([Ô]@DescricaO[Ô], OleDbType.VarChar, 200, [Ô]Descricao[Ô]))
e ocorreu o mesmo erro!
Cmd.CommandText = [Ô]INSERT INTO PRODUTOS (Descricao, Unidade, SAnterior, Especie, Obs) VALUES (@Descricax, @Unidade, @SAnterior, @Especie, @Obs)[Ô]
Cmd.Parameters.Add(New OleDbParameter([Ô]@DescricaO[Ô], OleDbType.VarChar, 200, [Ô]Descricao[Ô]))
e ocorreu o mesmo erro!
Acredito que seja o seguinte. Certamente você está utilizando um SqlCommand para tudo, aà os parâmetros(o tal do cmd.Parameters), utilizados em outros casos, continuam lá, por isso o erro. Para contornar isso, dê um Clear neles, conforme abaixo:
Public Sub IncluirProd(ByVal Descricao As String, ByVal Unidade As String, ByVal SAnterior As Integer, ByVal Especie As String, ByVal Obs As String)
Try
cn = getConexaoDB()
Cmd.Connection = cn
Cmd.CommandText = [Ô]INSERT INTO PRODUTOS (Descricao, Unidade, SAnterior, Especie, Obs ) [Ô] & [Ô] VALUES (@Descricao, @Unidade, @SAnterior, @Especie, @Obs)[Ô]
Cmd.CommandType = CommandType.Text
With Cmd.Parameters
[txt-color=#e80000].Clear() [ô]Adicione apenas essa linha[/txt-color]
.Add(New OleDbParameter([Ô]@Descricao[Ô], OleDbType.VarChar, 200, [Ô]Descricao[Ô]))
.Add(New OleDbParameter([Ô]@Unidade[Ô], OleDbType.VarChar, 25, [Ô]Unidade[Ô]))
.Add(New OleDbParameter([Ô]@SAnterior[Ô], OleDbType.Integer, 5, [Ô]SAnterior[Ô]))
.Add(New OleDbParameter([Ô]@Especie[Ô], OleDbType.VarChar, 20, [Ô]Especie[Ô]))
.Add(New OleDbParameter([Ô]@Obs[Ô], OleDbType.VarChar, 255, [Ô]Obs[Ô]))
End With
Cmd.ExecuteNonQuery()
Catch ex As Exception
Throw ex
Finally
closeConexaoDB(cn)
End Try
End Sub
Tópico encerrado , respostas não são mais permitidas