Ir para conteúdo
Fórum Script Brasil
  • 0

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


humberto_dimarchi

Pergunta

Olá, eu estou fazendo um programa para manipular banco de dados em VB Net e quando vou executá-lo recebo o erro:" Tipo de dados incompatível na expressão de critério." Eu já conferi o formato dos campos no banco de dados e se os campos textos possuiam aspas simples no código, mas nada resolveu. Alguém pode me ajudar?

Esse é o código:


Dim comando = "INSERT INTO tab_contatos_g(nome_contatos,telefone_contatos,endereco_contatos,email_contatos) values ('" + txtNome.Text + "'," + txtTelefone.Text + ",'" + txtEndereco.Text + "','" + txtEmail.Text + "')"
Dim olecon As New OleDb.OleDbConnection(conexao_geral)

olecon.Open()

Dim novo As New OleDb.OleDbCommand(comando, olecon)

novo.ExecuteNonQuery()

If olecon.State = ConnectionState.Open Then
olecon.Close()
End If
[/codebox]

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Olá Humberto !

Seja bem vindo ao Fórum Script Brasil!

Só para alertar...esta parte do forum é para Visual Basic 6 (VB-6) e Visual Basic for Applications (VBA),

então provavelmente irão mover seu tópico para a área correta ;) que é ".NET"...

Agora tentando te ajudar, eu não sei muito de VB.NET, até porque parei de estudá-lo <_< mas tem uma parte em

seu script que você deixou de concatenar...e por padrão pessoal (não que você tenha feito errado), eu uso

sempre o "'E' comercial (&)" e não o sinal (+)...então, entre a parte dos campos da tabela e os "Values", está

faltando a concatenação:

Eu faria assim:

Dim comando As String = "INSERT INTO tab_contatos(nome_contatos,telefone_contatos,endereco_contatos,email_contatos)" & "Values('" & txtNome.Text & "'," & txtTelefone.Text & ",'" & txtEndereco.Text & "','" & txtEmail.Text & "')"

Dim olecon As New OleDb.OleDbConnection(conexao_geral)

        olecon.Open()

        Dim novo As New OleDb.OleDbCommand(comando, olecon)

        novo.ExecuteNonQuery()

        If olecon.State = ConnectionState.Open Then
            olecon.Close()
        End If

Quero lhe alertar também para o campo que você "setou" como "número" (txtTelefone), ele deve ser preenchido apenas com números, então se você colocar: "(11)1234-5678" vai dá erro :mellow: ...

Já passei por isso :D e sempre deixo campos que irão receber valores tipo Telefone,CEP... configurado como "Texto" mesmo...lembre-se de se for alterar o tipo do campo em sua Tabela para texto, colocar os apóstrofos no script também ;)

VALEU !

:rolleyes: :rolleyes:

Link para o comentário
Compartilhar em outros sites

  • 0
Olá Humberto !

Seja bem vindo ao Fórum Script Brasil!

Só para alertar...esta parte do forum é para Visual Basic 6 (VB-6) e Visual Basic for Applications (VBA),

então provavelmente irão mover seu tópico para a área correta ;) que é ".NET"...

Agora tentando te ajudar, eu não sei muito de VB.NET, até porque parei de estudá-lo <_< mas tem uma parte em

seu script que você deixou de concatenar...e por padrão pessoal (não que você tenha feito errado), eu uso

sempre o "'E' comercial (&)" e não o sinal (+)...então, entre a parte dos campos da tabela e os "Values", está

faltando a concatenação:

Eu faria assim:

Dim comando As String = "INSERT INTO tab_contatos(nome_contatos,telefone_contatos,endereco_contatos,email_contatos)" & "Values('" & txtNome.Text & "'," & txtTelefone.Text & ",'" & txtEndereco.Text & "','" & txtEmail.Text & "')"

Dim olecon As New OleDb.OleDbConnection(conexao_geral)

        olecon.Open()

        Dim novo As New OleDb.OleDbCommand(comando, olecon)

        novo.ExecuteNonQuery()

        If olecon.State = ConnectionState.Open Then
            olecon.Close()
        End If
Quero lhe alertar também para o campo que você "setou" como "número" (txtTelefone), ele deve ser preenchido apenas com números, então se você colocar: "(11)1234-5678" vai dá erro :mellow: ... Já passei por isso :D e sempre deixo campos que irão receber valores tipo Telefone,CEP... configurado como "Texto" mesmo...lembre-se de se for alterar o tipo do campo em sua Tabela para texto, colocar os apóstrofos no script também ;) VALEU ! :rolleyes: :rolleyes:
danleohart, vlw por avisar o negócio do tópico, sou novo no fórum e não havia reparado nisso... Agora sobre o código, aqui não funcionou adicionar essa concatenação, o mesmo erro continua ocorrendo. Eu até estranhei porque eu possuo outros programas que não tem esse concatenar no values e funcionam normalmente, como o desse código:
Dim comando = "INSERT INTO tab(cod,nome,valor) Values(" + txtCod.Text + ",'" + txtNome.Text + "'," + txtValor.Text.Replace(",", ".") + ")"

Não sei se pode ser isso mas, a txtTelefone é uma maskedBox, eu já alterei a propriedade "textMaskFormat" para "ExcludePromptAndLiterals" para a saída não possuir os símbolos da máscara, e confirmei que isso, de fato, retirou os símbolos da máscara, exibindo o valor da txtTelefone numa MessageBox.

Link para o comentário
Compartilhar em outros sites

  • 0

Dim comando = "INSERT INTO tab_contatos_g(nome_contatos,telefone_contatos,endereco_contatos,email_contatos)

values ('" + txtNome.Text + "','" + txtTelefone.Text + "','" + txtEndereco.Text + "','" + txtEmail.Text + "')"

Dim olecon As New OleDb.OleDbConnection(conexao_geral)

olecon.Open()

Dim novo As New OleDb.OleDbCommand(comando, olecon)

novo.ExecuteNonQuery()

Seu campo txt.Telefone.Text com certeza deve ser do tipo String, então vai aspas simples.

então use: ' " + txtTelefone.Text + " ',

Abs.

Editado por Ricardo T. do Prado
Link para o comentário
Compartilhar em outros sites

  • 0
Dim comando = "INSERT INTO tab_contatos_g(nome_contatos,telefone_contatos,endereco_contatos,email_contatos)

values ('" + txtNome.Text + "','" + txtTelefone.Text + "','" + txtEndereco.Text + "','" + txtEmail.Text + "')"

Dim olecon As New OleDb.OleDbConnection(conexao_geral)

olecon.Open()

Dim novo As New OleDb.OleDbCommand(comando, olecon)

novo.ExecuteNonQuery()

Seu campo txt.Telefone.Text com certeza deve ser do tipo String, então vai aspas simples.

então use: ' " + txtTelefone.Text + " ',

Abs.

o campo txtTelefone é o campo do formulário, no banco de dados ele é do tipo número, no entanto, por via de dúvida, eu testei colocar a aspas simples e obti o erro "Sobrecarga".

Link para o comentário
Compartilhar em outros sites

  • 0

acho q o mais certo seria setar o campo como texto mesmo, normalmente a gente usa o tipo numero pra guardar valores. já o telefone seria uma string numerica e não um valor numerico.

tb bem q gravar como numerico ocupa menos espaco. mas agora, a gente não faz calculo com telefone. o q mtas vezes precisamos fazer é procurar valores no meio da string (exemplo, selecionar todos os telefones com ddd 11), o q consumiria muito mais tempo, se for precisar ficar fazendo conversoes de numero pra texto.

de qualquer modo, qtos digitos tem o telefone q você quer gravar?? se você tiver deixado como tipo inteiro longo, o campo não vai poder passar de 2 bilhoes e qualquer coisa. ou seja, se o seu numero tiver mais de 10 digitos, não vai dar pra gravar mesmo.

se você quiser mudar pra tipo Single (no access em portugues, deve ser tipo "Simples"), ele deve aceitar valores maiores. mas Single é um tipo de dados de ponto flutuante, ou seja, a perda de tempo deve ser ainda maior, melhor mudar pra texto de uma vez.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...