Depuración control de errores a dos niveles |
Responder
|
| Autor | |
MUTENROY
Nuevo
Unido: 22/Enero/2024 Localización: Granada Estado: Sin conexión Puntos: 15 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Tema: Depuración control de errores a dos nivelesEnviado: 22/Enero/2024 a las 17:35 |
|
Hola a tod@s, últimamente estoy teniendo errores con el fichero lccdb que un usuario y desde un pc lo ha puesto en estado que no puede ser modificado, error 3075. Tengo mi BBDD compartida en la red y varios usuarios la usan, lo he probado casi todo y no consigo saber por lo que es. Al menos cuando ocurra y les aparezca este error los expulse y vuelvan a conectarse. El tema está, que cuando hago esto dentro de mi código de tratamiento de errores, me aparece otro que no sé como gestionarlo. Mi pregunta es, como sería un ejemplo o sobre mi código para que si ocurre un error dentro del tratamiento de errores continue la ejecución del programa. Os expongo mi ejemplo:
Al cargar el usuario su BBDD si encuentra un error, registro en la tabla ErroresLog cuando accedió el usuario, la fecha, hora , etc.. pues justo al insertar los datos en dicha tabla me aparece un error (el usuario de Admin de la máquina X ha situado la base datos...etc) Quisiera que si aparece no muestre el mensaje o que cierre la BBDD automáticamente. A ver si podeis echarme una mano , este es mi código: (mil gracias) TratamientoErrores: If Err.Number <> 0 Then numerror = Err.Number descriperror = Err.Description vl = DLookup("ver", "Version local") Forms![Menu BTNprincipal].txtnum = numerror Forms![Menu BTNprincipal].txtdes = descriperror If DLookup("activalogpartidas", "Activacionlog") = True Then CurrentDb.Execute "Insert into ErroresLog(num,descri,Pc,versionlocal) values ('" & numerror & "','" & descriperror & "','" & DameNombrePc() & "', '" & vl & "' )" End If 'MsgBox " Se ha producido un error: Tipo de error =" & numerror & ". Descripcion:" & descriperror, vbCritical, "Error" EscribeDatosTxt ("Error cargando programa: " & Day(Date) & "/" & Month(Date) & "/" & Year(Date) & " , Hora " & Time) EscribeDatosTxt ("Error: " & numerror & ". Descripcion:" & descriperror) DoCmd.OpenForm "MensajeErrorCargar", windowMode:=acDialog End If |
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 23/Enero/2024 a las 15:57 |
|
Hola. Bienvenido al foro.
Se supone que el error se obtiene en la línea del CurrentDb.Executo por lo que yo, en este escenario concreto, simplemente optaria por tener el Log de errores en otra base de datos o en un fichero de texto puro. Lo que no me queda claro es si tienes compartido el BackEnd (que sería lo que yo haría) o el FrontEnd (que nunca lo haría). Porque entiendo que hablamos de una base de datos dividida, ¿no? Un saludo
|
|
![]() |
|
MUTENROY
Nuevo
Unido: 22/Enero/2024 Localización: Granada Estado: Sin conexión Puntos: 15 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 23/Enero/2024 a las 16:58 |
|
Hola Xavi, efectivamente el log de errores lo tengo en otra tabla, es una base de datos dividida. Lo que pretendo ya que no soy capaz de determinar porque llevo 2 meses con el dichoso error 3734, es que si al cargar el usuario su bbdd le aparezca el error u otro lo expulso para vuelva a conectarse. Pues bien, cuando ejecuto la sentencia "CurrentDb.Execute "Insert into ErroresLog(num,descri,Pc,versionlocal) values ('" & numerror & "','" & descriperror & "','" & DameNombrePc() & "', '" & vl & "' )" , puede que de error porque el campo vl de la tabla "partidas" está bloqueada por otro usuario y entonces me da error que no quiero que el usuario lo vea en pantalla, no quiero que salte el depurador. Por eso, se me ocurre que si en esta parte de mi código me da error se vaya a otra parte de mi código donde lo expulso, pero no se como hacerlo...
|
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 23/Enero/2024 a las 18:23 |
|
Aunque los cánones marquen que lo mejor es atacar (y solucionar) el problema en lugar de rodearlo, yo optaría por cambiar la tabla de errores por un fichero txt externo. De esa forma tu aplicación no se encuentra con el error del bloqueo y puedes lanzar el siguiente código.
Una vez funcione eso ya le dedicas el tiempo necesario a intentar controlar un doble error (si es que es necesario)
|
|
![]() |
|
MUTENROY
Nuevo
Unido: 22/Enero/2024 Localización: Granada Estado: Sin conexión Puntos: 15 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 06/Febrero/2024 a las 13:05 |
|
Buenas de nuevo, creo que el problema me viene porque hago demasiado uso en el formulario de inicio varias comprobaciones de permisos según el usuario. Es decir, tengo otra base de datos con varias tablas con los nombre de los pc,s, de tal modo que voy comprobando al cargar el formulario de inicio si el pc tiene acceso a otros formularios. Estoy usando la función Dcount, no se como puedo hacer estas comprobaciones de otra forma, por los que os pediría vuestra ayuda y experiencia.Os paso lo que tengo al cargar en el formulario de inicio, que creo que de tanto abrir y cerrar las tablas se queda bloqueada.
'accesos a control calidad If (DLookup("[acceso calidad]", "Version local") = True) Then ' ' 'Me.btnordencarga.Visible = True Me.b8.Enabled = True 'boton orden carga ' Me.btnmercancia.Visible = True Me.b6.Enabled = True 'boton muestreo ' Me.btnaverias.Visible = False ' Me.btnprecios.Visible = True Else ' Me.btnordencarga.Visible = False Me.b8.Enabled = False 'boton orden carga ' Me.btnmercancia.Visible = False Me.b6.Enabled = False 'boton muestreo ' Me.btnaverias.Visible = True ' Me.btnprecios.Visible = False End If 'fin accesos control calidad If DCount("*", "Comprueba si es equipo accesos") = 0 Then Me.b11.Enabled = False 'boton control accesos End If If DCount("*", "Comprueba si es equipo envases") = 0 Then Me.b12.Enabled = False 'boton retira envases End If If DCount("*", "Comprueba si es equipo peritos") = 0 Then Me.b13.Enabled = False 'boton control peritos End If If DCount("*", "Comprueba si es equipo socios") = 0 Then Me.b14.Enabled = False 'boton socios End If If DCount("*", "Comprueba si equipo envia muestreos") > 0 Then ' compruebo si equipo envia muestreos al Erp DoCmd.OpenQuery "Actualiza equipo local envia muestreos", acViewNormal End If If verlocal <> verserver Then '* no dejo entrar a la gente hasta que no actualice MsgBox "Existe una nueva versión del programa. A continuación se descargarán los paquetes y se actualizará, despues vuelva a abrir el programa.", vbInformation, "Aviso" CurrentDb.Execute "Insert into [Update] (fecha,pc,version,programa) values ('" & Date & "','" & pcmaquina & "','" & verserver & "','Partidas')" Shell "C:\Control partidas\Actualiza mdb.cmd", vbNormalFocus Application.SetOption "Auto Compact", True DoCmd.Quit End If If DLookup("erp", "accesoerp") = False Then Me.b7.Enabled = False 'boton pedidos Me.b8.Enabled = False 'boton orden carga Me.b3.Enabled = False 'boton previsiones Me.b4.Enabled = False 'boton sin confeccionar Me.b6.Enabled = False 'boton muestreo Me.b10.Enabled = False 'calibradora Me.b11.Enabled = False 'control accesos Me.b12.Enabled = False 'envases Me.b13.Enabled = False 'tecnicos End If If DCount("*", "Comprueba si es equipo salidas") > 0 Then 'compruebo si es equipo de salidas Me.b8.Enabled = True 'boton orden carga Me.b10.Enabled = False 'boton calibradora End If If DCount("*", "Comprueba existe usuariolocal") = 0 Then If DCount("*", "Comprueba si antes estaba registrado") > 0 Then DoCmd.OpenQuery "Recupero usuario local", acViewNormal DoCmd.OpenQuery "Descargar mensajes para mi", acViewNormal Me.btnsms.Visible = True 'MsgBox "La máquina ya estaba registrada anteriormente, se ha recuperado la información del registro local. NombrePC: " & atCNames(2), vbInformation, "Información" Else Me.btnsms.Visible = False Exit Sub End If End If DoCmd.OpenQuery "Descargar mensajes para mi", acViewNormal If DCount("*", "Compruebo si tengo nuevos mensajes urgentes") > 0 And DCount("*", "compruebo si tengo nuevos mensajes") > 0 Then Me.btnsmsurgente.Visible = True Me.btnsms.Visible = False Me.btnsmsnuevo.Visible = False End If If DCount("*", "Compruebo si tengo nuevos mensajes urgentes") = 0 And DCount("*", "compruebo si tengo nuevos mensajes") > 0 Then Me.btnsmsurgente.Visible = False Me.btnsms.Visible = False Me.btnsmsnuevo.Visible = True End If If DCount("*", "Compruebo si tengo nuevos mensajes urgentes") = 0 And DCount("*", "compruebo si tengo nuevos mensajes") = 0 And DCount("*", "Comprueba existe usuariolocal") > 0 Then Me.btnsmsurgente.Visible = False Me.btnsmsnuevo.Visible = False Me.btnsms.Visible = True End If If DCount("*", "Compruebo si tengo nuevos mensajes urgentes") = 0 And DCount("*", "compruebo si tengo nuevos mensajes") > 0 And DCount("*", "Comprueba existe usuariolocal") > 0 Then Me.btnsmsurgente.Visible = False Me.btnsmsnuevo.Visible = True Me.btnsms.Visible = False End If |
|
![]() |
|
Sheerkhan
Asiduo
Unido: 01/Octubre/2011 Estado: Sin conexión Puntos: 284 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 06/Febrero/2024 a las 18:34 |
|
Hola. En mi humilde opinión, si crees que el problema te viene por acceder demasiadas veces a las tablas... ¿no te serviría cargar un recordset? De ese modo solo accederías una vez, no cada vez que quieres consultar algo. Otra sugerencia, si es posible, cambiar todos esos "If DCount("*"" por algun tipo de "Select case", de ser necesario con un "for each", creo que con eso podrías evitar algunas llamadas If. ¡Ojalá te sirva alguna de mis sugerencias! Saludos Sheerkan |
|
![]() |
|
Responder
|
|
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |