none
No coinciden los tipos de datos en la exprecion de criterios RRS feed

  • Pregunta

  • buenas noches este es mi problema.

    estoy haciendo un proyecto escolar, donde se supone que llevo un sistema que le muestra a los maestros de la sep su estado en dicha organizacion, por la parte de mostrar datos esta bien, pero en la parte de administrador tengo que hacer actualizaciones y me esta costando un poco de trabajo, la base de datos es en access 2010 y trabajo con vb 2010 en el formulario que presentare abajo intento actualizar los datos de un registro de la bd pero cuando intento darle al boton de guardar me aparece el error de "No coinciden los tipos de datos en la exprecion de criterios" alguien me podria ayudar gracias.

    Imports Access = Microsoft.Office.Interop.Access
    Imports System.Data
    Imports System.Data.OleDb
    Public Class Form9


        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Me.Hide()
            Form8.Show()

        End Sub

        Private Sub Form9_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
            dataFile = "C:\sep\INDEX\INDEX\EMS.accdb"
            connString = provider & dataFile
            myConnection.ConnectionString = connString
            myConnection.Open()
            Dim dt As New DataTable
            Dim ds As New DataSet
            Dim NOMBRE, NOMBRE2, APPAT, APMAT As String
            ds.Tables.Add(dt)

            Dim da As New OleDbDataAdapter("select * from DATOS_GENERALES", myConnection)
            da.Fill(dt)
            For Each datarow In dt.Rows
                If TXTUSUARIO.Text = datarow.ITEM("ID_DATOS_GENERALES") Then
                    NOMBRE = datarow.item("NOM1")
                    NOMBRE2 = datarow.item("NOM2")
                    APPAT = datarow.item("AP_PAT")
                    APMAT = datarow.item("AP_MAT")

                    TXTTITULO.Text = UCase("DATOS DE: " & " " & NOMBRE & "  " & NOMBRE2 & "  " & APPAT & "  " & APMAT)
                End If
            Next

            'AQUI SE CARGAN LOS DATOS GENERALES Y DE CONMENTARIOS
            Dim dt1 As New DataTable
            Dim ds1 As New DataSet
            ds1.Tables.Add(dt1)

            Dim da1 As New OleDbDataAdapter("select * from DATOS_GENERALES", myConnection)
            da1.Fill(dt1)
            For Each DataRow In dt1.Rows
                If id_usuario = DataRow.ITEM("ID_DATOS_GENERALES") Then
                    TXTSTATUS.Text = (DataRow.item("ESTATUS")).ToString
                    TXTCURP.Text = (DataRow("CURP")).ToString
                    TXTRFC.Text = (DataRow("RFC")).ToString
                    TXTAPPAT.Text = (DataRow("AP_PAT")).ToString
                    TXTAPMAT.Text = (DataRow("AP_MAT")).ToString
                    TXTNOM1.Text = (DataRow("NOM1")).ToString
                    TXTNOM2.Text = (DataRow("NOM2")).ToString
                    TXTFECHNAC.Text = (DataRow("FECHA_NACIMIENTO")).ToString
                    TXTNACION.Text = (DataRow("NACIONALIDAD")).ToString
                    TXTSEX.Text = (DataRow("SEXO")).ToString
                    TXTESTCIV.Text = (DataRow("EDO_CIVIL")).ToString
                    TXTESTNAC.Text = (DataRow("EDO_NACIMIENTO")).ToString
                    TXTESTADO.Text = (DataRow("ESTADO_RESISDENCIA")).ToString
                    TXTMUNI.Text = (DataRow("MUNICIPIO_RESIDENCIA")).ToString
                    TXTCOL.Text = (DataRow("LOCALIDAD_RESIDENCIA")).ToString
                    TXTCALLE.Text = (DataRow("CALLE")).ToString
                    TXTNUMEXT.Text = (DataRow("NUM_EXT")).ToString
                    TXTNUMINT.Text = (DataRow("NUM_INT")).ToString
                    TXTCP.Text = (DataRow("CP")).ToString
                    TXTMAIL.Text = (DataRow("E_MAIL")).ToString
                    TXTTELFLOC.Text = (DataRow("TELEFONO_LOCAL")).ToString
                    TXTTELFCEL.Text = (DataRow("TELEFONO_LOCAL")).ToString
                    TXTPC.Text = (DataRow("TIENE_COMPUTADORA")).ToString
                    TXTINTER.Text = (DataRow("TIENE_INTERNET")).ToString
                    TXTCOMENT.Text = (DataRow("COMENTARIO_DOMICILIO")).ToString
                   
                End If
            Next

        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim str As String

            str = "update [DATOS_GENERALES] set [ESTATUS] = '" & TXTSTATUS.Text & "' , [AP_PAT] = '" & TXTAPPAT.Text & "', [AP_MAT] = '" & TXTAPMAT.Text & "', [NOM1] = '" & TXTNOM1.Text & "',[NOM2] = '" & TXTNOM2.Text & "',[SEXO] = '" & TXTSEX.Text & "',[FECHA_NACIMIENTO] = '" & TXTFECHNAC.Text & "',[CURP] = '" & TXTCURP.Text & "',[RFC] = '" & TXTRFC.Text & "',[TELEFONO_LOCAL] = '" & TXTTELFLOC.Text & "',[TELEFONO_CEL] = '" & TXTTELFCEL.Text & "',[EDO_NACIMIENTO] = '" & TXTESTNAC.Text & "',[E_MAIL] = '" & TXTMAIL.Text & "',[NACIONALIDAD] = '" & TXTNACION.Text & "',[EDO_CIVIL] = '" & TXTESTCIV.Text & "',[TIENE_COMPUTADORA] = '" & TXTPC.Text & "',[TIENE_INTERNET] = '" & TXTINTER.Text & "',[CALLE] = '" & TXTCALLE.Text & "',[NUM_EXT] = '" & TXTNUMEXT.Text & "',[NUM_INT] = '" & TXTNUMINT.Text & "',[LOCALIDAD_RESIDENCIA] = '" & TXTCOL.Text & "',[CP] = '" & TXTCP.Text & "',[MUNICIPIO_RESIDENCIA] = '" & TXTMUNI.Text & "',[ESTADO_RESISDENCIA] = '" & TXTESTADO.Text & "',[COMENTARIO_DOMICILIO] = '" & TXTCOMENT.Text & "' Where [ID_DATOS_GENERALES] = '" & TXTUSUARIO.Text & "'"
            Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
            Try
                cmd.ExecuteNonQuery()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            myConnection.Close()
        End Sub

     se supone que le puse los datos al administrador para que pudiera ver los datos que estan erroneos(para eso es la "actualizacion") y despues cuando le diera al boton de guardar se tendria que guardar con los datos nuevos ......

    si me podrian ayudar o darme mejores soluciones, yo programaba en vb6 y se me esta dificultando el 2010 gracias 

    sábado, 26 de mayo de 2012 2:27

Respuestas

  • hola

    el problema que tienes es que no usas parametros, el concatenar los valores en un string no esta anda bien

    str = "update [DATOS_GENERALES] set [ESTATUS] = @estatus , [AP_PAT] = @path, ..."
    
    Dim cmd As New OleDbCommand (str, myConnection)
    
    cmd.Parameters.AddWithValue("@estatus", TXTSTATUS.Text)
    cmd.Parameters.AddWithValue("@path", TXTAPPAT.Text)
    
    cmd.ExecuteNonQuery()

    no puse todos los parametros porque son muchos, pero es como en el ejemplo que defino como asignas los valores y no concatenando en el string

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Luis el mimo domingo, 27 de mayo de 2012 20:27
    sábado, 26 de mayo de 2012 22:48
  • la parte del where seria

    " Where [ID_DATOS_GENERALES] = @id"

    y para asignar el valor

    cmd.Parameters.AddWithValue("@id", Convert.Toint32(TXTUSUARIO.Text))


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Luis el mimo domingo, 27 de mayo de 2012 20:27
    domingo, 27 de mayo de 2012 5:48

Todas las respuestas

  • "No coinciden los tipos de datos en la exprecion de criterios"
    [...]
    str = "update ... Where [ID_DATOS_GENERALES] = '" & TXTUSUARIO.Text & "'" 


    Con el mensaje de error que te está saliendo, casi seguro que el problema está en que el campo ID_DATOS_GENERALES es de tipo numérico, pero en el WHERE lo estás comparando con un dato de tipo cadena (porque lo has encerrado entre comillas simples).
    sábado, 26 de mayo de 2012 17:06
  • entonces quito las comillas simples?
    sábado, 26 de mayo de 2012 21:55
  • hola

    el problema que tienes es que no usas parametros, el concatenar los valores en un string no esta anda bien

    str = "update [DATOS_GENERALES] set [ESTATUS] = @estatus , [AP_PAT] = @path, ..."
    
    Dim cmd As New OleDbCommand (str, myConnection)
    
    cmd.Parameters.AddWithValue("@estatus", TXTSTATUS.Text)
    cmd.Parameters.AddWithValue("@path", TXTAPPAT.Text)
    
    cmd.ExecuteNonQuery()

    no puse todos los parametros porque son muchos, pero es como en el ejemplo que defino como asignas los valores y no concatenando en el string

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Luis el mimo domingo, 27 de mayo de 2012 20:27
    sábado, 26 de mayo de 2012 22:48
  • ok ¿pero el where como deberia quedar si se esta comparando con un dato numerico? disculpa no estoy muy adentrado en vb 2010

    sábado, 26 de mayo de 2012 23:04
  • la parte del where seria

    " Where [ID_DATOS_GENERALES] = @id"

    y para asignar el valor

    cmd.Parameters.AddWithValue("@id", Convert.Toint32(TXTUSUARIO.Text))


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Luis el mimo domingo, 27 de mayo de 2012 20:27
    domingo, 27 de mayo de 2012 5:48