none
No coinciden los tipos de datos en la expresión de criterios VIsualBasic y Access RRS feed

  • Pregunta

  • Hola, Espero me puedan ayudar, ya busqué en el foro y ya entendí que me sucede pero no puedo corregirlo.

    Tengo esta consulta:

    Dim SQL As String = "UPDATE Pacientes SET [Nombre]='" & Me.txtNombre.Text & "' ,
                    [Apellido]='" & txtApellidos.Text & "' , [Edad]='" & txtEdad.Text & "' ,
                    [Domicilio] ='" & txtDomicilio.Text & "' , [Telefono]='" & txtTel.Text & "' , 
                    [Tratamiento] ='" & cmbTratamiento.Text & "' , [Costo_Trata]='" & txtCostoTratamiento.Text & "' , 
                    [Fecha] =#" & txtFecha.Text & "# , [Abono] = '" & txtAbono.Text & "' , [Saldo]='" & txtSaldo.Text & "'
                    WHERE [Cuenta]='" & txtCuenta.Text & "'"

    Y también lo intenté así:

    Dim SQL As String = "UPDATE Pacientes SET [Nombre]='" & Me.txtNombre.Text & "' ,
                    [Apellido]='" & txtApellidos.Text & "' , [Edad]='" & txtEdad.Text & "' ,
                    [Domicilio] ='" & txtDomicilio.Text & "' , [Telefono]='" & txtTel.Text & "' , 
                    [Tratamiento] ='" & cmbTratamiento.Text & "' , [Costo_Trata]=" & costo & " , 
                    [Fecha] =#" & txtFecha.Text & "# , [Abono] = " & abono & " , [Saldo]=" & saldo & "
                    WHERE [Cuenta]='" & txtCuenta.Text & "'"
    Y ahí me marca el error de no coinciden los datos, estoy utilizando en los textbox:
    txtAbono.Text = FormatCurrency(txtAbono.Text)
    txtCosto_Tratamiento.Text = FormatCurrency(txtCosto_Tratamiento.Text)
    txtSaldo.Text = FormatCurrency(txtSaldo.Text)

    Al guardar los Datos los guardo con las variables costo,abono,saldo as integer. cuando los inserto los datos.

    Este es mi formulario:


    Les agradecería mucho si me ayudaran. No se como parametrizar, por eso lo hago de esa forma.


    viernes, 2 de octubre de 2020 20:16

Respuestas

  • Lo de "no coinciden los datos en la expresión de criterios" significa que detrás del WHERE viene un dato que no coincide con su tipo, por ejemplo, un campo que en la tabla es numérico y lo comparas con un string, o un dato que es de tipo cadena y lo comparas con un número.

    En tu caso tienes únicamente esto:

    WHERE [Cuenta]='" & txtCuenta.Text & "'"

    Es decir, comparas el campo Cuenta con una cadena de texto. Lo de que "es una cadena" viene dado por el hecho de que lo encierras entre comillas simples. No importa que dentro del textbox solo se hayan tecleado números; es el hecho de poner comillas simples en la sentencia SQL lo que le dice que debe interpretarlo como cadena en lugar de como número.

    Así pues, esa expresión de criterios dará un error en caso de que el campo [Cuenta] sea numérico en la tabla. Si es así, la solución es quitar las comillas:

    WHERE [Cuenta]=" & txtCuenta.Text

    Aunque mucho mejor que eso sería que prescindieses de toda la concatenación de valores y en su lugar parametrizases la sentencia. En ese caso, no te tienes que preocupar de las comillas en ningún campo. Se ponen todos los parámetros sin encerrarlos entre comillas.

    • Marcado como respuesta Alfredo Arenas sábado, 3 de octubre de 2020 1:45
    viernes, 2 de octubre de 2020 20:56

Todas las respuestas

  • Lo de "no coinciden los datos en la expresión de criterios" significa que detrás del WHERE viene un dato que no coincide con su tipo, por ejemplo, un campo que en la tabla es numérico y lo comparas con un string, o un dato que es de tipo cadena y lo comparas con un número.

    En tu caso tienes únicamente esto:

    WHERE [Cuenta]='" & txtCuenta.Text & "'"

    Es decir, comparas el campo Cuenta con una cadena de texto. Lo de que "es una cadena" viene dado por el hecho de que lo encierras entre comillas simples. No importa que dentro del textbox solo se hayan tecleado números; es el hecho de poner comillas simples en la sentencia SQL lo que le dice que debe interpretarlo como cadena en lugar de como número.

    Así pues, esa expresión de criterios dará un error en caso de que el campo [Cuenta] sea numérico en la tabla. Si es así, la solución es quitar las comillas:

    WHERE [Cuenta]=" & txtCuenta.Text

    Aunque mucho mejor que eso sería que prescindieses de toda la concatenación de valores y en su lugar parametrizases la sentencia. En ese caso, no te tienes que preocupar de las comillas en ningún campo. Se ponen todos los parámetros sin encerrarlos entre comillas.

    • Marcado como respuesta Alfredo Arenas sábado, 3 de octubre de 2020 1:45
    viernes, 2 de octubre de 2020 20:56
  • Muchas gracias por responder, me dio dolor de cabeza y tu respuesta fue lo mejor después de tanto leer. se corrigió quitando las comillas simples ' es decir los apóstrofos.

    Agradezco el tiempo que te tomaste en responder.


    • Editado Alfredo Arenas sábado, 3 de octubre de 2020 2:02 Corregí todo
    sábado, 3 de octubre de 2020 1:48
  • Hola, 

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

     

    Eric Ruiz

    ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    sábado, 3 de octubre de 2020 2:10
    Moderador