Access - Controlar errores

   
Vista:

Controlar errores

Publicado por CyRuS (127 intervenciones) el 04/09/2007 16:09:28
Hola gente. Haber si alguien me puede iluminar, que estoy atascado. En un cuadro de texto guardo el nº de hojas que tiene un informe de esta forma:

On Error GoTo tratamientoError
Me.A = 0 'cuadro de texto en cero

‘INFORME A
DoCmd.OpenReport "A", acViewPreview, , acHidden
Me.PagA = Reports!A.Pages
DoCmd.Close acReport, "A", acSaveNo

Ahora en vez de hacerlo para 1 informe quiero hacerlo para 3. Y pongo lo mismo.

Me.B = 0: Me.C = 0
'INFORME B
DoCmd.OpenReport "B", acViewPreview, , acHidden
Me.PagB = Reports!B.Pages
DoCmd.Close acReport, "B", acSaveNo
'INFORME C
DoCmd.OpenReport "C", acViewPreview, , acHidden
Me.PagC = Reports!C.Pages
DoCmd.Close acReport, "C", acSaveNo

El problema es que a veces el informe B no tiene datos y debería escribirme PagB = 0 y continuar con el informe C. Pero, NUNCA me sigue al informe C. Se me para la función.

Tengo puesto esto pero no hay manera.

tratamientoError:

If Err.Number = 2501 Then
Resume Next
End If

También he probado con GoTo, pero se me queda bloqueado. ¿Cómo puedo pasar al tercer informe para que me mire cuantas hojas tiene?

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Controlar errores

Publicado por Jordi (226 intervenciones) el 04/09/2007 16:52:59
Prueba esto:

DoCmd.OpenReport "B", acViewPreview, , acHidden
if (Reports!B.Pages=0) then
Me.PagB = 0
else
Me.PagB=Reports!B.Pages
End if
DoCmd.Close acReport, "B", acSaveNo
Suerte!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Controlar errores

Publicado por CyRuS (127 intervenciones) el 05/09/2007 16:18:06
Jordi:

ya lo he probado, pero si el informe no tiene hojas, se me para en la
primera línea (en la de abrir el informe) y no llega hasta el If . Como no
se me ocurre nada, he probado abrir un único informe para intentar
simplificar la cosa. Este informe lo abro para todos los valores de un
combo llamado Fproceso. Entonces hago lo siguiente:

For i = 0 To Me.Fproceso.ListCount - 1 ' -1 pq el primer proceso es
el 0
If cont < Me.Fproceso.ListCount Then
Me.Fproceso = Me.Fproceso.ItemData(cont) ' me pasa al
siguiente valor
DoCmd.OpenReport "A", acViewPreview, , acHidden
Me.A = Reports!A.Pages ' escribo el nº de hojas en un txt
DoCmd.Close acReport, "A", acSaveNo
DoCmd.OpenQuery "copiar" 'copio el nº de hojas a una tabla
cont = cont + 1
End If
Next i

tratamientoError:
If Err.Number = 2501 Then
Resume Next
End if

El problema es que Resume Next sólo "mueve" una línea más y se me para.
En vez de Resume Next he puesto GoTo Seguir estando Seguir encima de
cont = cont + 1 . Mi idea es que pase al siguiente valor del combo. Y lo
hace. PERO, si para ese siguiente valor, tampoco tiene hojas el informe,
entonces se me para en la línea de abrir el informe dándome el error 2501.

Ya no sé que hacer aparte de lo que me ha respondido "mi menda" que lo probaré mñn haber si da resultado. ¿ alguna idea para cualquiera de las formas? os lo
agradeceré eternamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Controlar errores

Publicado por mi menda (1111 intervenciones) el 06/09/2007 06:04:11
Mira.. sí lo que quieres es saltarte los errores, solo tienes que poner en la primera línea del código:

On Error Resume Next

Con esto ya puedes quitar todas las etiquetas de errores, pero no es una buena practica sí se puede evitar.

Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Controlar errores

Publicado por mi menda (1111 intervenciones) el 05/09/2007 02:14:04
Creo que lo planteas mal. Puedes al cargar el formulario; cargar todos los informes en un cuadro de Lista (en tipo de origen de la fila, lo pones en "Lista de valores").
Bueno... esta función esta adaptada de una que ví de Emilio Sancha para listar todos los objetos de una base de datos (la original esta en Tus funciones favoritas y aportaciones del foro del Búho)

Private Sub Form_Load()
Dim dbs As Object, _
Objeto As AccessObject, _
i As Integer

On Error GoTo ListaObjetos_TratamientoErrores
i = 0
Set dbs = Application.CurrentProject
' Informes
For Each Objeto In dbs.AllReports
Lista0.AddItem Objeto.Name, i
i = i + 1
Next Objeto

Set dbs = Nothing

ListaObjetos_Salir:
On Error GoTo 0
Exit Sub

ListaObjetos_TratamientoErrores:

MsgBox "Error " & Err.Number & " " & Err.Description
Resume ListaObjetos_Salir
End Sub
-------------------------------------Fin-------------------------------------------

Ahora en un botón de comando

Private Sub cmdTotalPag_Click()
On Error GoTo trato_error_TotalPag

If IsNull(Lista0) Then Exit Sub
DoCmd.OpenReport Lista0.Value, acViewPreview, , , acHidden
Me.txtTotalPag = Reports(Lista0).Pages
DoCmd.Close acReport, Lista0.Value

Salir_error:
Exit Sub
trato_error_TotalPag:
MsgBox Err.Description,,"Error Nº: " & Err.Number
Resume Salir_error
End Sub

----------------------------------Fín------------------------------------------------

Lo del tratamiento de error te lo pongo por si acaso te comes la cabeza con eso.

Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Controlar errores

Publicado por mi menda (1111 intervenciones) el 05/09/2007 03:43:09
Se me olvidaba lo de las páginas a 0 sí no hay datos. ´Sí no hay datos siempre te pondrá 1(Tendras algún titulo en el informe por lo menos). Para que te salga un 0 en el evento del informe "al no haber datos" puedes poner :

Cancel = True

Ahora el código del botón te quedaria:

Private Sub cmdTotalPag_Click()
On Error GoTo trato_error_cmd

DoCmd.OpenReport Lista0.Value, acViewPreview, , , acHidden
Me.txtTotalPag = Reports(Lista0).Pages
DoCmd.Close acReport, Lista0.Value

salir_error:
Exit Sub
trato_error_cmd:
If Err.Number = 2501 Then
Me.txtTotalPag = 0
Resume salir_error
Else
MsgBox Err.Description,,"Error Nº: " & Err.Number
Resume salir_error
End If
End Sub

Como ves solo cambia el tratamiento de errores.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Controlar errores

Publicado por CyRuS (127 intervenciones) el 06/09/2007 16:21:18
Gracias por responder. La verdad es que le he echado un vistazo y me
resultaba complicado, por lo que he probado a crear una función de apertura
para cada informe. Y dentro de cada función , le he puesto que si me da
error, me escriba 0 en el cuadro de texto, y salga de la función.
y por fin, me ha funcionado.

Gracias por tu tiempo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar