none
no encuentro el fallo "No coinciden los tipos de datos en la expresión de criterios" RRS feed

  • Pregunta

  •  

    Hola chicos.

     

    Vereis resulta que tengo una base de datos creada con access y el programa que estoy desarrollando ha de permitir añadir hojas de trabajo (cada una tiene 58 campos). bueno hasta aqui todo va bien el programa guarda las hojas nuevas sin ningun problema.

     

    El problema se me presenta cuando quiero modificar alguna hoja ya existente, devolviendo este error : No coinciden los tipos de datos en la expresión de criterios.

     

    Llevo varios dias rebuscando por internet a ver si encuentro en algun foro ayuda sobre este tema. A todos los que les ha pasado este error es devido a que los tipos de datos que intentas meter en la BD no coinciden es decir pasa por meter un string donde deveria ir un Integer. (Si esto equivocado  por favor que alguien me corrija).

     

    Bien pues he revisado los tipos que mando a la BD y no encuentro ningun fallo.

     

    alguna alma caritativa puede echarme un cable en este tema...

     

     

    PD: uso VS2008 y el campo clave de la DB es hojatrabajo

     

    aqui os dejo el codigo fuente:

     

    Mil gracias por todo

     

    LA CONEXION A LA BASE DE DATOS 

     

    Public Sub Carga_Hojas()

    Dim Conexion_Hojas As String

    Dim Sentencia As String = "SELECT * FROM Hojas order by fecha"

     

    Conexion_Hojas = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & System.Windows.Forms.Application.StartupPath.ToString() & "\Hojas.mdb"

    AdaptadorHojas = New OleDbDataAdapter(Sentencia, Conexion_Hojas)

     

    TablaHojas = New DataTable

    Dim CommanBuilder As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(AdaptadorHojas)

     

    AdaptadorHojas.UpdateCommand = CommanBuilder.GetUpdateCommand

    AdaptadorHojas.MissingSchemaAction = MissingSchemaAction.AddWithKey

    AdaptadorHojas.Fill(TablaHojas)

    Me.DataGridView3.DataSource = TablaHojas

    End Sub

     

     

     

    AQUI EL CODIGO DE MODIFICACION

     

    Dim Lugar_Reparacion As Integer 'puede tener 4 valores :    1 Domicilio     2 taller     3 garantia    4 otros

    Dim Tipo_Iva As Boolean 'Para saber si se aplica iva o no

    Dim Telefono As Long 'para almacenar el nº telefono

    Dim localizado As Integer 'para saber la posicion del reg que modificamos

     

    ' Lo primero localizamos el Reg que se ha cargado en la pantalla

    For Aux = 0 To Form1.TablaHojas.Rows.Count - 1

    If CInt(NumericUpDown1.Value) = CInt(Form1.TablaHojas.Rows(Aux).Item(2)) Then

    localizado = Aux ' LOCALIZADO

    End If

    Next

     

    Form1.TablaHojas.Rows(localizado).BeginEdit()

    If CheckBox1.Checked = True Then Lugar_Reparacion = 1

    If CheckBox2.Checked = True Then Lugar_Reparacion = 2

    If CheckBox3.Checked = True Then Lugar_Reparacion = 3

    If CheckBox4.Checked = True Then Lugar_Reparacion = 4

     

    If CheckBox5.Checked = True Then Tipo_Iva = True

    If CheckBox6.Checked = True Then Tipo_Iva = False

     

    ' Usar los datos que hay en los textbox

    Form1.TablaHojas.Rows(localizado)("Cod") = CInt(Label37.Text)

    Form1.TablaHojas.Rows(localizado)("Fecha") = CDate(Format(DateTimePicker1.Value, "d/MM/yyyy"))

    Form1.TablaHojas.Rows(localizado)("HojaTrabajo") = CInt(NumericUpDown1.Value)

    Form1.TablaHojas.Rows(localizado)("Mecanico") = CStr(ComboBox10.Text)

    If TextBox50.Text > 0 Then Form1.TablaHojas.Rows(localizado)("Importe") = CDec(TextBox50.Text) Else Form1.TablaHojas.Rows(localizado)("Importe") = 0

    If Tipo_Iva = True Then Form1.TablaHojas.Rows(localizado)("Tipo") = True Else Form1.TablaHojas.Rows(localizado)("Tipo") = False

    Form1.TablaHojas.Rows(localizado)("Nombre") = CStr(Label10.Text)

    Form1.TablaHojas.Rows(localizado)("Apellidos") = CStr(Label11.Text)

    Form1.TablaHojas.Rows(localizado)("Poblacion") = CStr(Label12.Text)

    If Telefono > 0 Then Form1.TablaHojas.Rows(localizado)("Telefono") = CDbl(Telefono) Else Form1.TablaHojas.Rows(localizado)("Telefono") = 0

    '*******************************************************************************************

    Form1.TablaHojas.Rows(localizado)("Descripcion") = CStr(TextBox1.Text)

    Form1.TablaHojas.Rows(localizado)("Aparato") = CStr(ComboBox1.Text)

    Form1.TablaHojas.Rows(localizado)("Marca") = CStr(ComboBox2.Text)

    Form1.TablaHojas.Rows(localizado)("Modelo") = CStr(ComboBox3.Text)

    If TextBox47.Text <> "" Then Form1.TablaHojas.Rows(localizado)("KM") = CDec(TextBox47.Text) Else Form1.TablaHojas.Rows(localizado)("KM") = 0 'Kilometraje

    If TextBox2.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Horas") = CDec(TextBox2.Text) Else Form1.TablaHojas.Rows(localizado)("Horas") = 0 'Horas realizadas

    If TextBox46.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Desplazamiento") = CDec(TextBox46.Text) Else Form1.TablaHojas.Rows(localizado)("Desplazamiento") = 0 'Desplazamiento

    Form1.TablaHojas.Rows(localizado)("Reparacion") = CInt(Lugar_Reparacion)

    Form1.TablaHojas.Rows(localizado)("Materiales1") = CStr(ComboBox4.Text)

    Form1.TablaHojas.Rows(localizado)("Materiales2") = CStr(ComboBox5.Text)

    Form1.TablaHojas.Rows(localizado)("Materiales3") = CStr(ComboBox6.Text)

    Form1.TablaHojas.Rows(localizado)("Materiales4") = CStr(ComboBox7.Text)

    Form1.TablaHojas.Rows(localizado)("Materiales6") = CStr(ComboBox9.Text)

    '*******************************************************************************************

     

    If TextBox8.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Cantidad1") = CDec(TextBox8.Text) Else Form1.TablaHojas.Rows(localizado)("Cantidad1") = 0

    If TextBox9.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Cantidad2") = CDec(TextBox9.Text) Else Form1.TablaHojas.Rows(localizado)("Cantidad2") = 0

    If TextBox10.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Cantidad3") = CDec(TextBox10.Text) Else Form1.TablaHojas.Rows(localizado)("Cantidad3") = 0

    If TextBox11.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Cantidad4") = CDec(TextBox11.Text) Else Form1.TablaHojas.Rows(localizado)("Cantidad4") = 0

    If TextBox12.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Cantidad5") = CDec(TextBox12.Text) Else Form1.TablaHojas.Rows(localizado)("Cantidad5") = 0

    If TextBox13.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Cantidad6") = CDec(TextBox13.Text) Else Form1.TablaHojas.Rows(localizado)("Cantidad6") = 0

     

    If TextBox14.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Precio1") = CDec(TextBox14.Text) Else Form1.TablaHojas.Rows(localizado)("Precio1") = 0

    If TextBox15.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Precio2") = CDec(TextBox15.Text) Else Form1.TablaHojas.Rows(localizado)("Precio2") = 0

    If TextBox16.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Precio3") = CDec(TextBox16.Text) Else Form1.TablaHojas.Rows(localizado)("Precio3") = 0

    If TextBox17.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Precio4") = CDec(TextBox17.Text) Else Form1.TablaHojas.Rows(localizado)("Precio4") = 0

    If TextBox18.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Precio5") = CDec(TextBox18.Text) Else Form1.TablaHojas.Rows(localizado)("Precio5") = 0

    If TextBox19.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Precio6") = CDec(TextBox19.Text) Else Form1.TablaHojas.Rows(localizado)("Precio6") = 0

     

    Form1.TablaHojas.Rows(localizado)("H_Fecha1") = CDate(Format(DateTimePicker2.Value, "d/MM/yyyy"))

    Form1.TablaHojas.Rows(localizado)("H_Fecha2") = CDate(Format(DateTimePicker3.Value, "d/MM/yyyy"))

    Form1.TablaHojas.Rows(localizado)("H_Fecha3") = CDate(Format(DateTimePicker4.Value, "d/MM/yyyy"))

    Form1.TablaHojas.Rows(localizado)("H_Fecha4") = CDate(Format(DateTimePicker5.Value, "d/MM/yyyy"))

    Form1.TablaHojas.Rows(localizado)("H_Tecnico1") = CStr(ComboBox11.Text)

    Form1.TablaHojas.Rows(localizado)("H_Tecnico2") = CStr(ComboBox12.Text)

    Form1.TablaHojas.Rows(localizado)("H_Tecnico3") = CStr(ComboBox13.Text)

    Form1.TablaHojas.Rows(localizado)("H_Tecnico4") = CStr(ComboBox14.Text)

    If TextBox34.Text <> "" Then Form1.TablaHojas.Rows(localizado)("H_Horas1") = CDec(TextBox34.Text) Else Form1.TablaHojas.Rows(localizado)("H_Horas1") = 0

    If TextBox35.Text <> "" Then Form1.TablaHojas.Rows(localizado)("H_Horas2") = CDec(TextBox35.Text) Else Form1.TablaHojas.Rows(localizado)("H_Horas2") = 0

    If TextBox36.Text <> "" Then Form1.TablaHojas.Rows(localizado)("H_Horas3") = CDec(TextBox36.Text) Else Form1.TablaHojas.Rows(localizado)("H_Horas3") = 0

    If TextBox37.Text <> "" Then Form1.TablaHojas.Rows(localizado)("H_Horas4") = CDec(TextBox37.Text) Else Form1.TablaHojas.Rows(localizado)("H_Horas4") = 0

    If TextBox38.Text <> "" Then Form1.TablaHojas.Rows(localizado)("H_Precio1") = CDec(TextBox38.Text) Else Form1.TablaHojas.Rows(localizado)("H_Precio1") = 0

    If TextBox39.Text <> "" Then Form1.TablaHojas.Rows(localizado)("H_Precio2") = CDec(TextBox39.Text) Else Form1.TablaHojas.Rows(localizado)("H_Precio2") = 0

    If TextBox40.Text <> "" Then Form1.TablaHojas.Rows(localizado)("H_Precio3") = CDec(TextBox40.Text) Else Form1.TablaHojas.Rows(localizado)("H_Precio3") = 0

    If TextBox41.Text <> "" Then Form1.TablaHojas.Rows(localizado)("H_Precio4") = CDec(TextBox41.Text) Else Form1.TablaHojas.Rows(localizado)("H_Precio4") = 0

    If TextBox5.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Dto1") = CDec(TextBox5.Text) Else Form1.TablaHojas.Rows(localizado)("Dto1") = 0

    If TextBox6.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Dto2") = CDec(TextBox6.Text) Else Form1.TablaHojas.Rows(localizado)("Dto2") = 0

    If TextBox7.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Dto3") = CDec(TextBox7.Text) Else Form1.TablaHojas.Rows(localizado)("Dto3") = 0

    If TextBox26.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Dto4") = CDec(TextBox26.Text) Else Form1.TablaHojas.Rows(localizado)("Dto4") = 0

    If TextBox27.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Dto5") = CDec(TextBox27.Text) Else Form1.TablaHojas.Rows(localizado)("Dto5") = 0

    If TextBox28.Text <> "" Then Form1.TablaHojas.Rows(localizado)("Dto6") = CDec(TextBox28.Text) Else Form1.TablaHojas.Rows(localizado)("Dto6") = 0

    Form1.TablaHojas.Rows(localizado)("IVA") = CDec(Form1.TantoPorciento_Iva)

     

     

    Form1.TablaHojas.Rows(localizado).EndEdit()

    Form1.AdaptadorHojas.Update(Form1.TablaHojas)

    Form1.TablaHojas.AcceptChanges()

     

    miércoles, 17 de diciembre de 2008 21:14

Todas las respuestas

  • Hola,

    Ok... pero... cual es la consulta de actualización... ¿la has generado con el asistente?... tal vez sea ahi donde resida el fallo.

    Mirate esto:

    http://www.moreplus.es/index.aspx?accion=articulo&id=108

    Un saludo.

    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.

    Javier Conesa

    MCP - Senior Analist

    Web: http://www.moreplus.es/index.aspx


    jueves, 18 de diciembre de 2008 6:44
    Moderador
  • Hola Javier Conesa.


    pues la verdad es que no he usado el asistente para nada. Lo he creado todo via codigo.


    El caso es que desesperado he creado la base de datos desde cero con access y nada sigue dando el mismo fallo en el mismo sitio.


    El caso es que he estado trasteando con el programa y fijate lo que me sucede.

    1.- Creo una hoja de trabajo nueva. (Lo hace correctamente)
    2.- Paso a modificar es misma hoja (y tambien lo hace bien o eso parece no de el fallo y me devuelve a la pantalla principal)
    3.- Vuelvo a entrar en la pantalla de modificacion para comprobar si la actualizacion se ha realizado( y efectivamente, se ha realizado correctamente los cambios hechos en el paso 2 esta hechos)

    4.- Cierro el programa y lo vuelvo a arrancar (Volvemos a partir de cero)
    5.- vuelvo a modificar la hoja que hemos estado usando en los pasos anteriores y resulta que no ha hecho los cambios del paso 2.
    6.- intento modificar la hoja y al guardar cambios me salta el error "No coinciden los tipos de datos el la expresion de criterios"


    Conclusion que saco : es como si mientras tienes cargada la tabla en memoria todo funciona, cambios y demas pero cuando terminas el programa y lo cargas de nuevo leyendo datos de la base de datos da el error.

    ademas de no grabar datos fisicamente en el disco solo en memoria.


    Me falta algo...

    Por cierto para modificar el registro uso:

                 Form1.TablaHojas.Rows(localizado).BeginEdit()
               ' aqui modifico los registros:
              
                Form1.TablaHojas.Rows(localizado)("Cod") = CInt(Label37.Text)
                  ...
                  ...
                  ...
                Form1.TablaHojas.Rows(localizado).EndEdit()
                Form1.AdaptadorHojas.Update(Form1.TablaHojas)
                Form1.TablaHojas.AcceptChanges()


    Gracias


    jueves, 18 de diciembre de 2008 17:38
  • hola amigo creo que tu problema es por que en la base de datos tienes un campo (o unos campos) de tipo numero y el VB pone problema,  ensaya cambiando estos datos numericos a texto o viceversa, a ver que pasa.

     

    eso era el problema por el cual me ponia problema a mi.

     

    espero te sirva

    jueves, 31 de marzo de 2011 17:19
  • yo tenia la misma clase de error y al cambiar en la base de datos el tipo de dato de texto a numero me funciono correctamente la consulta.

    pero me abarca una duda como hago para que sea texto?

    por q en algunas ocasiones necesitare de utilizar una llave de tipo texto como "A123"

    como debo realizar la consulta?

    esta es la que estoy haciendo:

                       

     Private Sub txt_cod_producto_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt_cod_producto.Leave

            cmd.Connection = conn
            cmd.CommandType = CommandType.Text

            Dim cod_producto As String = ""

            If (txt_nom_producto.Text = "") And (txt_cod_producto.Text <> "") Then

                cod_producto = CStr(txt_cod_producto.Text)
                sql = "select nombre, presentacion, precio, cantidad from producto where idproducto=" + cod_producto

                cmd.CommandText = sql

                Try
                    dr = cmd.ExecuteReader()

                    If dr.HasRows() Then
                        prod_global = txt_cod_producto.Text
                        dr.Read()
                        txt_nom_producto.Text = dr(0).ToString
                        txt_pres_prod.Text = dr(1).ToString
                        txt_cant_actual.Text = dr(3).ToString
                    Else
                        MsgBox("no existen productos con ese codigo")
                    End If
                    dr.Close()
                Catch ex As Exception
                    MsgBox(ex.ToString)
                    dr.Close()
                End Try

            End If
        End Sub
    End Class

    ____________________________________

    gracias por su colaboración.

    lunes, 7 de octubre de 2013 2:07