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
Comprobar si una tabla vinculada tiene conexión y si la tiene ejecutar un procedimiento
- Sveinbjorn
- 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
Hola, has copiado una función, pero no has entendido cómo funciona...
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:
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

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

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



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
Re: Comprobar si una tabla vinculada tiene conexión y si la tiene ejecutar un procedimiento
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!
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!
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados