Comprobar si una tabla vinculada tiene conexión y si la tiene ejecutar un procedimiento

Dudas sobre código
vferrer
Nivel 1
Mensajes: 5
Registrado: Mar May 17, 2022 11:20 pm

Comprobar si una tabla vinculada tiene conexión y si la tiene ejecutar un procedimiento

Mensajepor vferrer » Mié May 18, 2022 12:08 am

Hola!
Estoy dando vueltas a como poder solucionar lo siguiente. No controlo demasiado de vba y ya se me está haciendo tedioso, así que os agradeceré mucho cualquier ayuda.

Tengo un formulario frontend para el registro de tiempos por tarea. El caso es que 'al salir' del campo claveFibras quiero comprobar si la clave introducida existe en una tabla vinculada (Registro_Fibras) para que, si en ese momento tiene conexión, ejecute unas instrucciones y si no tiene conexión que ejecute otras ya que de lo contrario me da error de ejecución cuando realizo la búsqueda.
NO tengo experiencia con las funciones, las llamadas y los argumentos así que entiendo que la cosa irá por ahí.

Esta es la función que he encontrado por internet para analizar si la tabla existe y si hay conexión:


Function Istable(stblName As String)
'does table exists and work ?
'note: finding the name in the TableDefs collection is not enough,
' since the backend might be invalid or missing

On Error GoTo hell
Dim x
x = DCount("*", stblName)
Istable = True
Exit Function
hell:
Debug.Print Now, stblName, Err.Number, Err.Description
Istable = False

End Function

Y este el procedimiento donde me gustaría evaluar si hay conexión para ejecutar un código o por el contrario si no hay conexión para ejecutar otro:

Private Sub claveFibras_Exit(Cancel As Integer)

' Aquí lo que trato es de traer el resultado de la función para la tabla vinculada Resultados_Fibras (si tiene conexión en este momento o no)
Dim stblName As String
stblName = Resultados_Fibras
Call Istable (True)

' Y aquí evaluar si hay conexión o no (como argumento de Istable he puesto true porque es obligatorio pero realmente no sé que debe ir)
If Istable(True) = True Then

If IsNull(claveFibras) Then
'si al salir el campo es nulo no hacemos nada

Else

'si al salir hay clave realizo una búsqueda en la tabla vinculada
Fibra_Final_Tabla = DLookup("Fibra_Final", "Resultados_Fibras", "Clave_Fibras_SinE = '" & claveFibras.Value & "'")

If isnull (Fibra_Final_Tabla)
MsgBox "No encontramos la clave, estás seguro de que es correcta?", vbOKOnly
Fibra_FInal_Tabla.Requery
Else
Fibra_Final_Tabla.Requery

End If

Else
' si no no hay conexión a la tabla enviamos un mensaje de aviso
MsgBox "Ojo! no hay conexión a la tabla vinculada. Revisa la conexión cuando sea posible y asegúrate de que la clave es correcta!!", vbOKOnly

End If

End Sub


Como alternativa estaba valorando intentar controlar el error para que no me de error de ejecución el formulario en caso de que al realizar la búsqueda no haya conexión a la tabla vinculada pero tampoco acaba de funcionar:

Private Sub claveFibras_Exit(Cancel As Integer)
On Error GoTo ErrorTablavinculada

If IsNull(claveFibras) Then

Else

Fibra_Final_Tabla = DLookup("Fibra_FInal", "Resultados_Fibras", "Clave_Fibras_SinE = '" & claveFibras.Value & "'")

If IsNull(Fibra_Final_Tabla) Then
MsgBox "No encontramos la clave, estás seguro de que es correcta?", vbOKOnly
Fibra_Final_Tabla.Requery
Else
Fibra_Final_Tabla.Requery

End If

End If

Exit Sub

ErrorTablavinculada:

MsgBox "Ojo! no hay conexión a la tabla vinculada. Revisa la conexión cuando sea posible y asegúrate de que la clave es correcta!!", vbOKOnly

Resume Next

End Sub

No sé que solución veis mejor para solventar el problema.

Muchas gracias de antemano!
Saludos

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1390
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Comprobar si una tabla vinculada tiene conexión y si la tiene ejecutar un procedimiento

Mensajepor Sveinbjorn » Mié May 18, 2022 9:20 am

Hola, has copiado una función, pero no has entendido cómo funciona... :roll:

Verás, la función Istable está definida (y no del todo correctamente, según mi opinión, pues debería declarar expresamente el tipo de valor devuelto) como:

Código: Seleccionar todo

Function Istable(stblName As String)

lo que indica que se trata de una función (Function), de nombre Istable, y que requiere de un argumento para funcionar de tipo texto (As String) llamado stblName, que ya te indica, según el sistema de notación más habitual que es una variable de texto (stblName) para indicar el nombre de la tabla que quieres comprobar (stblName -> tbl=tabla, Name=Nombre)

Por tanto cuando tu pones "alegremente" If Istable(True) = True Then, le estás pidiendo que haga algo si encuentra una tabla que se llama "True", y que casi seguro que no existe :lol: :lol: :lol:

Por tanto, en tu código deberás poner:
If Istable("Registro_Fibras")=True Then
y puedes borrar la línea
Call Istable(...)
que no aporta nada.

Así te debería funcionar, al menos esa parte, el resto del código no lo he revisado...

Un saludo
Sveinbjorn El Rojo

vferrer
Nivel 1
Mensajes: 5
Registrado: Mar May 17, 2022 11:20 pm

Re: Comprobar si una tabla vinculada tiene conexión y si la tiene ejecutar un procedimiento

Mensajepor vferrer » Jue May 26, 2022 2:38 pm

Aclarado, muchas gracias!

Ya había probado así pero omití las comillas par ala tabla, creo que ese era el problema.

If Istable("Registro_Fibras")=True Then

Muchas gracias!


Volver a “Código VBA”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 18 invitados