Error al usar DoCmd.SearchForRecord

He creado un formulario con un ControlTab de 3 páginas. En la 3ª página he creado un botón que al pulsarlo toma en la variable Id_Ingresos el valor un campo y luego da el foco a la página 2 para buscar el correspondiente registro para ese valor de la variable.
El código que he insertado es el siguiente:
Dim Id_Ingreso As Long (El campo Referencia del Ingresos esta definido en la tabla como entero largo)
Private Sub Ira_Click()
Id_Ingreso = Forms![Formulario Ventas-Ingresos]![Informe Ingresos].Form![Referencia Ingreso]
Forms![Formulario Ventas-Ingresos]![Ventas1].SetFocus
DoCmd.SearchForRecord acDataForm, Forms![Formulario Ventas-Ingresos]![Ventas1].Form, acFirst, "Referencia del Ingreso" = Id_Ingreso
End Sub
Me produce un error: "error 13, no coinciden los tipos
Estoy bloqueado, ¿podéis ayudarme?
GRACIAS

 

+0

1 respuesta

Respuesta
1

Jon: Mira el tipo de Datos que tienes en [Referencia Ingreso] y asegurate que tenga Formato Numérico.

Mis saludos >> Jacinto

Jon: Al repasar un poco más veo que citas en una línea [Referencia Ingreso] y en otra [Referencia de Ingreso].

Además donde pones >> ....acFirst, "Referencia del Ingreso" = Id_Ingreso

Si es que son campos numéricos los dos es adecuado poner:

....acFirst, "[Referencia del Ingreso]  = " &  Id_Ingreso

Saludos >> Jacinto

En la hoja 3 del controlTab el campo del que tomo el valor de la variable se llama "Referencia Ingreso", pero en la hoja 1, el campo en que debo buscar este valor es "Referencia del Ingreso". Esa parte creo que es correcta.

He corregido lo que me comentas poniéndolo de la siguiente forma:

Id_Ingreso = Forms![Formulario Ventas-Ingresos]![Informe Ingresos].Form![Referencia Ingreso]

Forms![Formulario Ventas-Ingresos]![Ventas1].SetFocus
DoCmd.SearchForRecord acDataForm, "Forms![Formulario Ventas-Ingresos]![Ventas1].Form", acFirst, "[Referencia del Ingreso]=&" = Id_Ingreso

End Sub

Me marca error 13, No coinciden los tipos

Se me ha ocurrido definir la variable como string, y el error es otro:

"Se producido el error 2489 en tiempo de ejecución: El objeto 'Forms![Formulario Ventas-Ingresos]![Ventas1].Form' no está abierto

Sin embargo si que está abierto y además ya le he dado el foco.

Estoy muy perdido...

Jon: Prueba primero poniendo lo que te comentaba.

Si es que lo tienes como lo has escrito no es raro que te devuelva un error 13.

Tienes >>..., acFirst, "[Referencia del Ingreso]=&" = Id_Ingreso

Te había sugerido >>..... , acFirst, "[Referencia del Ingreso]= " & Id_Ingreso

Ya me comentarás. Saludos >> Jacinto

Dim Id_Ingreso As Long

Private Sub Ira_Click()

Id_Ingreso = Forms![Formulario Ventas-Ingresos]![Informe Ingresos].Form![Referencia Ingreso]

DoCmd.OpenForm "Formulario Ventas-Ingresos"
Forms![Formulario Ventas-Ingresos]![Ventas1].SetFocus
DoCmd.SearchForRecord acDataForm, "Forms![Formulario Ventas-Ingresos]![Ventas1].Form", acFirst, "[Referencia del Ingreso]=" & Id_Ingreso

End Sub

Pufff... Esto no funciona, he corregido lo que me comentas, pero no va, me sale "Error 2489..., el objeto 'Forms![Formulario Ventas-Ingresos]![Ventas1].Form' no está abierto

He comprobado y el formulario esta abierto y además ha cambiado de la página 3 a la página 1, como yo quería, que es donde está el formulario Ventas1.

Jon A vecs las cuestiones se atascan pero al menos hemos alido del error de tipos.

Quizá es que la estructura que tienes no es la que haces servir en la llamada.

Posiblemente es que Ventas1 no es un Formulario sino una Pestaña.

Lueo mirando un poco más, veo que abres un Formulario.

Si lo que quieres es referirte a el, la forma correcta sería.

..., "Forms![Formulario Ventas-Ingresos].Form" sin el Ventas1, pero es difícil acertar si no se conoce la Ubicación de cada uno de los Objetos. Mis saludos >> Jacinto

El comando para abrir el formulario lo puse porque me indicaba que el formulario no estaba abierto, pero la verdad es que no creo que sirve de nada porque el error sigue, y si quito esa línea sigue todo igual.

Te explico un poco como tengo el formulario:

El formulario se llama Formulario Ventas-Ingresos y no tiene ningún origen (es independiente). En el he puesto un controltab que se llama Tabctl0 con 3 paginas. La primera se denomina Ventas. Tiene un subformulario llamado Ventas1, donde voy introduciendo ventas con fecha, Referencia de venta, nombre de cliente, importe... Dentro de este formulario hay otro subformulario con el detalle de productos vendidos.

En la página 2 denominada Ingresos recojo los ingresos. Las ventas quedan reflejadas como ingreso (pero sin detalles de productos...), además puede haber otro tipo de ingresos, por Bonus, varios...

En la tercera página he hecho un listado de todos los ingresos, a modo de resumen ordenados por fechas. Sólo es un listado para poder comprobar las ventas e ingresos introducidos a través de la página 1 y 2.

Mi intención es que si detecto en este listado un error, poder pulsar un botón y me lleve al detalle introducido en la página 1 o 2 para poder corregirlo.

Jon: Mañana le echo una ojeada y te comento. Saludos >> Jacinto

¡Gracias por todo¿, un saludo

Jon: Antes de seguir haciendo otras pruebas y para asegurar que el Formulario Ventas1 responde al código, cuando puedas haces ésta prueba y me comentas.

En El Form_Load del Principal, o sea en Formulario Ventas-Ingresos

Le pones

Me.Ventas1.Visible = False

Esto debe esconderte el Formulario Ventas1, y si no es así, algo raro hay. Mis saludos >> Jacinto

Jon: Mirando el código del que estamos hablando, no me digas por qué, pero veo algo raro en él.

Como en definitiva lo que buscas es que te coloque el Formulario Ventas1 en un Registro que elijes en un Control >> [Referencia Ingreso] de una Ubicación que llamaremos Me...

Te propongo uses el Recordset Clone del Formulario Ventas1 del Siguiente modo>>

Private Sub IrA_Click()
Dim Frm As Form
Dim Rst As DAO.Recordset
Dim CtrlTab As TabControl
'Primero activo la pestaña Pag00
Set CtrlTab = Forms![Formulario Ventas-Ingresos]!TabCtL0
CtrlTab = 0
Set Frm = Forms![Formulario Ventas-Ingresos]!Ventas1.Form
Set Rst = Frm.RecordsetClone
Rst.FindFirst "[Referencia del Ingreso] = " & Me.[Referencia Ingreso]
If Rst.NoMatch Then
        MsgBox "Registro no encontrado", vbCritical, "MENSAJE DE SEGUIMIENTO"
Else       
        Frm.Bookmark = Rst.Bookmark
End If
Rst.Close
Set Rst = Nothing
Set CtrlTab = Nothing
Set Frm = Nothing
End Sub

Nota: El control de fichas no veo bien si es Tabct”ele”0 o Tabct”Uno”0. Lo he puesto como TabctL0.

No lo he probado, pero creo que no debes tener dificultades. Mis saludos >> Jacinto

¡Gracias! Perfecto, va como un tiro.

Gracias de verdad

Buenos días Jacinto, siguiendo con este código que me propusiste y funciona bien, estoy intentando hacer otro, con la diferencia de que debe buscarse por tres criterios (Año, Serie_Albaran, Id_Albaran). He puesto el siguiente código:

Dim Var_Año_Albaran As String
Dim Var_Serie_Albaran As String
Dim Var_Id_Albaran As Long
Dim Frm As Form
Dim Rst As DAO.Recordset
Dim CtrlTab As TabControl
Var_Año_Albaran = Forms![Formulario Ventas-Ingresos]![Formulario Registro Facturas].Form![Subformulario Albaranes por Factura].Form![Año]
Var_Serie_Albaran = Forms![Formulario Ventas-Ingresos]![Formulario Registro Facturas].Form![Subformulario Albaranes por Factura].Form![Serie_Albaran]
Var_Id_Albaran = Forms![Formulario Ventas-Ingresos]![Formulario Registro Facturas].Form![Subformulario Albaranes por Factura].Form![Id_Albaran]
If Var_Id_Albaran <> 0 Then
    'Primero activo la pestaña Pag00
    Set CtrlTab = Forms![Formulario Ventas-Ingresos]!TabCtl0
    CtrlTab = 0
    Set Frm = Forms![Formulario Ventas-Ingresos]![Subformulario Albaranes].Form
    Set Rst = Frm.RecordsetClone
    Rst.FindFirst "[Id_Albaran] = " & Var_Id_Albaran And "[Serie_Albaran] = " & Var_Serie_Albaran And "[Año] = " & Var_Año_Albaran
    If Rst.NoMatch Then
        MsgBox "Registro no encontrado", vbCritical, "MENSAJE DE SEGUIMIENTO"
    Else
        Frm.Bookmark = Rst.Bookmark
    End If

Si busco sólo por un criterio funciona, pero al intentar añdir los otros dos criterios me da error: "Error 13, no coinciden los tipos"

El campo Año y el campo Serie_Albaran son campos texto y el campo Id_Albaran es numeríco

¿Puedes echarme una mano?, gracias

Jon: La línea

Rst.FindFirst "[Id_Albaran] = " & Var_Id_Albaran And "[Serie_Albaran] = " & Var_Serie_Albaran And "[Año] = " & Var_Año_Albaran

La sustituyes por ésta otra:

Rst.FindFirst "[Id_Albaran] = " & Var_Id_Albaran  & “ And “ & "[Serie_Albaran] = ‘" & Var_Serie_Albaran  & “’” & “ And “ &  "[Año] = ‘" & Var_Año_Albaran & “’”

Solo he mirado esa parte y espero no haberme saltado comas o comillas. Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas