none
Erro: Tipo de dados incompatível na expressão de critério RRS feed

  • Pergunta

  •     

    oi pessoal como estão .

    Eu estou desenvolvendo um sistema de cadastro de material , mas

    toda vez que tento gravar alguma um novo produto e deixo um campo

    em branco ele dar essa menssagem de erro:

    Erro: Tipo de dados incompatível na expressão de critério

    eu estou usando o banco de dados Access.

    se alguem poder me ajudar eu agradeço.

    segue o codigo de gravação .

    abraço para todos!!!

    Private Sub btConfirmarEnt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btConfirmarEnt.Clic If vmodo = "A" Then Dim cs As String = My.Settings.EstoqueConnectionString Dim conect As New OleDb.OleDbConnection conect.ConnectionString = cs Try conect.Open() Dim selcom As New OleDb.OleDbCommand selcom.Connection = conect selcom.CommandText = "UPDATE tb_estoque SET nome_produto='" & txtNome_produto.Text & "', cardex_produto='" & txtCardex.Text _ & "', codigo_fabricante='" & txtCodFabricante.Text & "', local_produto='" & txtLocal.Text _ & "', maquina='" & txtMaquina.Text & "', descricao_produto= '" & txtDescricao.Text & "', qtd_minima='" & txtMinimo.Text _ & "', qtd_atual='" & txtAtual.Text & "', cam_foto='" & txtImagem.Text & _ "' " & " WHERE codigo_estoque= " & acodigo_estoque(dgvEstoque.CurrentRow.Index + 1) selcom.ExecuteNonQuery() 'selcom.ExecuteReader() conect.Close() Catch ex As Exception MessageBox.Show("Erro de Gravação de Dados!" & vbCrLf & ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try desab_campos() carrega_estoque() End If If vmodo = "I" Then Dim cs As String = My.Settings.EstoqueConnectionString Dim conect As New OleDb.OleDbConnection conect.ConnectionString = cs Try conect.Open() Dim selcom As New OleDb.OleDbCommand selcom.Connection = conect selcom.CommandText = " INSERT INTO tb_estoque (nome_produto, local_produto, descricao_produto, cardex_produto, maquina, codigo_fabricante, qtd_minima, qtd_atual, cam_foto) " & _ "VALUES ( '" & (txtNome_produto.Text & Space(50)).Substring(0, 50) & "', '" & txtLocal.Text & "', '" & txtDescricao.Text & _ "', '" & txtCardex.Text & "', '" & txtMaquina.Text & "', '" & txtCodFabricante.Text & "', '" & txtMinimo.Text & "', '" & txtAtual.Text & "', '" & txtImagem.Text & "' ) " If selcom.ExecuteNonQuery() Then MsgBox("Produto Incluido com sucesso!") Else MsgBox("Erro! Produto não Incluido!") End If conect.Close() Catch ex As Exception MessageBox.Show("Erro de Gravação de Dados vv!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try desab_campos() carrega_estoque() End If If vmodo = "E" Then Dim cs As String = My.Settings.EstoqueConnectionString Dim conect As New OleDb.OleDbConnection conect.ConnectionString = cs Try conect.Open() Dim selcom As New OleDb.OleDbCommand selcom.Connection = conect selcom.CommandText = "DELETE FROM tb_estoque WHERE codigo_estoque = " & acodigo_estoque(dgvEstoque.CurrentRow.Index + 1) If selcom.ExecuteNonQuery() Then MsgBox("Produto Excuido com sucesso!") Else MsgBox("Erro! Produto não Excluido!") End If conect.Close() Catch ex As Exception MessageBox.Show("Erro de Gravação de Dados!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try desab_campos() carrega_estoque() End If End Sub


    quinta-feira, 12 de julho de 2012 20:25

Respostas

  • Olá amigo!

    Tentei encontrar alguma sintaxe incorreta no comando, mas não consegui. Será que algum das tuas caixas de texto, que são incluídas no comando, não está com algum apóstrofo (aspa simples) no conteúdo? Se estiver, estaria causando erro de sintaxe na instrução INSERT. Precisas realizar esse tipo de controle na tua janela de entrada de dados, substituindo aspas simples por algum outro caracter, antes de salvá-lo no banco.

    Sds.,


    Daniel Ethur - Porto Alegre/RS

    • Marcado como Resposta gilvanio32 quinta-feira, 26 de julho de 2012 13:46
    sexta-feira, 13 de julho de 2012 11:39

Todas as Respostas

  • Olá gilvanio!

    Pelo que vejo no teu exemplo, estás salvando alguns campos como quantidade mínima, quantidade atual, etc, que parecem ser campos numéricos no banco-de-dados. Entretanto, nas queries que estás montando (UPDATE e INSERT), estás tratando esses campos como Strings.

    Sugiro que dê uma revisada nas definições das tabelas e confirme quais campos são do tipo texto(strings, memos) e quais são de tipos numéricos (integer, long, byte, etc). Nos campos texto, o valor precisa ser passado entre aspa simples ('). Nos campos numéricos, não.

    Exemplo para campo numérico (sem a aspa):

    ... " QTD_TAL = " & txtQtdTal.text & " ....

    Para campos texto (com a aspa simples):

    ... " NOME_TAL = '" & txtNomeTal.text & "' ...

    Esse tipo de passagem de valores para campos com tipos incoerentes com o formato acima pode causar a exceção de Tipo de dados incompatível na expressão de critério .

    Sds.,


    Daniel Ethur - Porto Alegre/RS

    quinta-feira, 12 de julho de 2012 20:59
  •   

    oi como vai.

    corrigi o que vc me falou, as variáveis qtd_atual e qtd_material

    estão setadas para numerico inteiro no BD.

    Mas agora está dando outro erro (Erro de sintax na instrução

    INSERT INTO)quando eu tento gravar algum dado.

    se poder me ajudar eu agradeço..

    o codigo agora ficou assim:

    Private Sub btConfirmarEnt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btConfirmarEnt.Click If vmodo = "A" Then Dim cs As String = My.Settings.EstoqueConnectionString Dim conect As New OleDb.OleDbConnection conect.ConnectionString = cs Try conect.Open() Dim selcom As New OleDb.OleDbCommand selcom.Connection = conect selcom.CommandText = "UPDATE tb_estoque SET nome_produto='" & txtNome_produto.Text & "', cardex_produto='" & txtCardex.Text & _ "', codigo_fabricante='" & txtCodFabricante.Text & "', local_produto='" & txtLocal.Text & _ "', maquina='" & txtMaquina.Text & "', descricao_produto= '" & txtDescricao.Text & "', qtd_minima=" & txtMinimo.Text & _ ", qtd_atual=" & txtAtual.Text & ", cam_foto='" & txtImagem.Text & "' " & " WHERE codigo_estoque= " & acodigo_estoque(dgvEstoque.CurrentRow.Index + 1) selcom.ExecuteNonQuery() 'selcom.ExecuteReader() conect.Close() Catch ex As Exception MessageBox.Show("Erro de Gravação de Dados!" & vbCrLf & ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try desab_campos() carrega_estoque() End If If vmodo = "I" Then Dim cs As String = My.Settings.EstoqueConnectionString Dim conect As New OleDb.OleDbConnection conect.ConnectionString = cs Try conect.Open() Dim selcom As New OleDb.OleDbCommand selcom.Connection = conect selcom.CommandText = " INSERT INTO tb_estoque (nome_produto, local_produto, descricao_produto, cardex_produto, maquina, codigo_fabricante, qtd_minima, qtd_atual, cam_foto) " & _ "VALUES ( '" & (txtNome_produto.Text & Space(50)).Substring(0, 50) & "', '" & txtLocal.Text & "', '" & txtDescricao.Text & _ "', '" & txtCardex.Text & "', '" & txtMaquina.Text & "', '" & txtCodFabricante.Text & "', " & txtMinimo.Text & ", " & txtAtual.Text & ", '" & txtImagem.Text & "' ) " If selcom.ExecuteNonQuery() Then MsgBox("Produto Incluido com sucesso!") Else MsgBox("Erro! Produto não Incluido!") End If conect.Close() Catch ex As Exception MessageBox.Show("Erro de Gravação de Dados vv!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try desab_campos() carrega_estoque() End If If vmodo = "E" Then Dim cs As String = My.Settings.EstoqueConnectionString Dim conect As New OleDb.OleDbConnection conect.ConnectionString = cs Try conect.Open() Dim selcom As New OleDb.OleDbCommand selcom.Connection = conect selcom.CommandText = "DELETE FROM tb_estoque WHERE codigo_estoque = " & acodigo_estoque(dgvEstoque.CurrentRow.Index + 1) If selcom.ExecuteNonQuery() Then MsgBox("Produto Excuido com sucesso!") Else MsgBox("Erro! Produto não Excluido!") End If conect.Close() Catch ex As Exception MessageBox.Show("Erro de Gravação de Dados!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try desab_campos() carrega_estoque() End If End Sub


    sexta-feira, 13 de julho de 2012 02:41
  • Olá amigo!

    Tentei encontrar alguma sintaxe incorreta no comando, mas não consegui. Será que algum das tuas caixas de texto, que são incluídas no comando, não está com algum apóstrofo (aspa simples) no conteúdo? Se estiver, estaria causando erro de sintaxe na instrução INSERT. Precisas realizar esse tipo de controle na tua janela de entrada de dados, substituindo aspas simples por algum outro caracter, antes de salvá-lo no banco.

    Sds.,


    Daniel Ethur - Porto Alegre/RS

    • Marcado como Resposta gilvanio32 quinta-feira, 26 de julho de 2012 13:46
    sexta-feira, 13 de julho de 2012 11:39
  • 

    Oi artur como vai. o meu projeto estava meio desorganizado mesmo , para resolver meu problema refiz todos os formes ai voltou a funcionar. Mas agora eu precisava de outra ajuda sua com um forme de pesquisa. No projeto tem um forme de pesquisa por (nome, Cardex, maquina e local) em um DataGrid, quando faço a pesquisa o filto está funcionando corretamente, mas o correto seria depois que faça uma pesquisa no grid e clico em cima de uma linha carregar as informações nos textBox correspondentes a linha do grid que estiver selecionada. O problema é que quando digito uma letra no textbox de pesquisa e seleciono uma linha no grid garrega as informações erradas nos textbox. Porem, se o campo de pesquisa estiver limpo e o grid estiver carregado com todos os item, e uma linha do grid for selecionada ocorre o carregamento dos textbox corretamente. segue o codigo de pesquisa abaixo: se poder me ajudar eu agradeço!! Public Class PesquisaMNcontrolado Dim acod_estoque(1) As Integer Dim anome(1) As String Dim acod_fabricante(1) As String Dim acardex(1) As String Dim amaquina(1) As String Dim alocal(1) As String Dim aqtdAtual(1) As Integer Dim aqtdmaterial(1) As Integer Dim adescricao(1) As String Dim acamfoto(1) As String Dim aimg(1) As String Dim aqtdMinimo(1) As Integer Dim vmodo As String = "X" Private Sub PesquisaMNcontrolado_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load carrega_usuarios() cbmTipoPesq.Text = "Nome" desab_campos() End Sub Private Sub carrega_usuarios() Dim cs As String = My.Settings.EstoqueConnectionString Dim conect As New OleDb.OleDbConnection conect.ConnectionString = cs conect.Open() Dim selcom As New OleDb.OleDbCommand selcom.Connection = conect selcom.CommandText = "SELECT * FROM tb_estoque ORDER BY nome_produto" Dim vleitor As OleDb.OleDbDataReader vleitor = selcom.ExecuteReader Dim c As Integer = 0 dgvEstoque.Rows.Clear() Do While vleitor.Read c = c + 1 ReDim Preserve acod_estoque(c) ReDim Preserve anome(c) ReDim Preserve acod_fabricante(c) ReDim Preserve acardex(c) ReDim Preserve amaquina(c) ReDim Preserve alocal(c) ReDim Preserve aqtdAtual(c) ReDim Preserve aqtdmaterial(c) ReDim Preserve adescricao(c) ReDim Preserve acamfoto(c) ReDim Preserve aimg(c) ReDim Preserve aqtdMinimo(c) acod_estoque(c) = vleitor("codigo_estoque") anome(c) = vleitor("nome_produto") acod_fabricante(c) = vleitor("codigo_fabricante") acardex(c) = vleitor("cardex_produto") amaquina(c) = vleitor("maquina") alocal(c) = vleitor("local_produto") If IsDBNull(vleitor("qtd_atual")) Then aqtdAtual(c) = 0 Else aqtdAtual(c) = vleitor("qtd_atual") End If If IsDBNull(vleitor("qtd_material")) Then aqtdmaterial(c) = 0 Else aqtdmaterial(c) = vleitor("qtd_material") End If adescricao(c) = vleitor("descricao_produto") If IsDBNull(vleitor("cam_foto")) Then acamfoto(c) = "" Else acamfoto(c) = vleitor("cam_foto") End If If IsDBNull(vleitor("cam_foto")) Then aimg(c) = "" Else aimg(c) = vleitor("cam_foto") End If If IsDBNull(vleitor("qtd_minimo")) Then aqtdMinimo(c) = 0 Else aqtdMinimo(c) = vleitor("qtd_minimo") End If If cbmTipoPesq.Text = "Nome" Then If anome(c).ToUpper.Contains(txtPesquisa.Text.ToUpper) Then dgvEstoque.Rows.Add(anome(c), acardex(c), amaquina(c), alocal(c)) End If End If If cbmTipoPesq.Text = "Maquina" Then If amaquina(c).ToUpper.Contains(txtPesquisa.Text.ToUpper) Then dgvEstoque.Rows.Add(anome(c), alocal(c), acardex(c), amaquina(c)) End If End If If cbmTipoPesq.Text = "Cardex" Then If acardex(c).ToUpper.Contains(txtPesquisa.Text.ToUpper) Then dgvEstoque.Rows.Add(anome(c), alocal(c), acardex(c), amaquina(c)) End If End If Loop conect.Close() End Sub Private Sub carrega_campos() Dim ind As Integer = dgvEstoque.CurrentRow.Index + 1 txtNome.Text = anome(ind) txtCodFabricante.Text = acod_fabricante(ind) txtCardex.Text = acardex(ind) txtMaquina.Text = amaquina(ind) txtLocal.Text = alocal(ind) txtAtual.Text = aqtdAtual(ind) txtDescricao.Text = adescricao(ind) If aimg(ind) = "" Then PictureBox1.Image = Nothing Else PictureBox1.Image = Image.FromFile(aimg(ind)) End If txtMinimo.Text = aqtdMinimo(ind) txtCardexUsado.Text = acardex(ind) txtDescProduto.Text = anome(ind) End Sub Private Sub dgvEstoque_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgvEstoque.SelectionChanged carrega_campos() desab_campos() End Sub Private Sub txtPesquisa_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtPesquisa.TextChanged carrega_usuarios() End Sub


    quinta-feira, 26 de julho de 2012 12:36