Access - Funcion que funciona en un BD y en otra no

 
Vista:
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Funcion que funciona en un BD y en otra no

Publicado por Pablo (328 intervenciones) el 10/01/2022 19:08:45
Hola a todos:
Pues eso, declaré una función en una BD, como no me funcionaba y ya no sabía que hacer, la declaré en otra BD y ahí si funciona. En la primera, en la ventana inmediato, me responde con: no se ha definido sub o function.
Me temo que sea alguna propiedad de la base de datos pero, no tengo ni idea, alguien podría echarme una mano.
Gracias

Pablo
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
Imágen de perfil de Vba Access
Val: 485
Plata
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Funcion que funciona en un BD y en otra no

Publicado por Vba Access (26 intervenciones) el 12/01/2022 00:15:23
Hola, tienes alguna imagen de la funcion.

Eso lo suele marcar por que lo la estas llamando con Call
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

Funcion que funciona en un BD y en otra no

Publicado por Anonimo (3371 intervenciones) el 12/01/2022 09:28:19
Tomo esta línea como referencia para mi análisis:
... En la primera, en la ventana inmediato, me responde con: no se ha definido sub o function. ....

Si la función se ha declarado en el modulo de un formulario u informe o se ha declarado como privada (en cualquiera otra ubicación), en la ventana de inmediato solo estará 'disponible' si ese objeto esta activo en ese momento (un punto de interrupción o un STOP que pause la ejecución).

Si se ha declarado como publica en un objeto que esta cerrado (generalmente un formulario/informe) solo será 'visible' si el objeto esta abierto.

Para que una función 'funcione en cualquier parte' ha de ser declarada como publica en un modulo independiente de acceso publico.
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
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Funcion que funciona en un BD y en otra no

Publicado por Pablo (328 intervenciones) el 12/01/2022 19:22:29
Hola:
La función está en un módulo que se llama funciones y es:
Public Function esta_abierto_form(ByVal nom_form As String) As Boolean
esta_abierto_form = False
Const vistadiseño = 0
Const objetocerrado = 0
If SysCmd(acSysCmdGetObjectState, acForm, nom_form) <> objetocerrado Then
If Forms(nom_form).CurrentView <> vistadiseño Then
esta_abierto_form = True
End If
End If

Cuando hago referencia a esta función no hace falta poner: funciones.esta_abierto_form, basta con poner el nombre de la función. Es así?, lo pregunto porque al hacer referencia a una variable definida en un módulo sí hay que poner el nombre del módulo. + variable, no?
Gracias
Pablo
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

Funcion que funciona en un BD y en otra no

Publicado por Anonimo (3371 intervenciones) el 13/01/2022 00:13:47
En Access y al respecto de las funciones, solo se necesitara esa sintaxis si hay concurrencias en el mismo entorno (para poder definir con precisión la que se desea).

Por defecto suele utilizar la mas próxima en el entorno, lo ideal es que no existan 'sosias'.

Alguna nota:
Cuando se declaran variables, por defecto estas toman el valor adecuado a su tipo
Las booleanas 'nacen' a false, las numéricas a cero y las de cadena a una cadena vacía.

Con las funciones ocurre igual por lo que no es necesario asignarles un valor, en este caso el 'False' (también vale un cero, para Access cero = False y diferente de cero (cualquier valor) = True

Considerando que si esta cerrado (valor devuelto = 0) no tiene sentido continuar las evaluaciones yo lo escribiría así:

1
2
3
4
5
......
......
IF SysCmd(acSysCmdGetObjectState, acForm, nom_form) = 0  Then Exit Function
'  si llega aquí es que esta abierto, se procesa otra condicion .... etc
.....

Pero no es mas que otra forma de programar (se cumple el dicho de 'cada maestrillo tiene su librillo')
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
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Funcion que funciona en un BD y en otra no

Publicado por Pablo (328 intervenciones) el 13/01/2022 19:12:27
Hola Anónimo:
Esa función está sacada de un libro. tengo otra más que es

Public Function suma2enteros(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
suma2enteros = num1 + num2
MsgBox "Suma=" & suma2enteros
End Function

Creé un formulario que llamé "prueba_funcion", con 2 cuadros de texto que en su evento click tienen:
Texto0=esta_abierto_form("prueba_funcion"), debería poner Verdadero o True, no?
Texto2=suma2enteros(3,8), debería poner 11
en ambos casos me responde: error de compilacion. No se ha definido Sub o Function
Si voy a compilar me señala esta... y responde lo mismo

Alguna idea?

Gracias
Pablo
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
Imágen de perfil de Vba Access
Val: 485
Plata
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Funcion que funciona en un BD y en otra no

Publicado por Vba Access (26 intervenciones) el 14/01/2022 19:33:58
¿Tienes declaras todas las variables?

Por que en los ejemplos de libros no declaran variables.

Si no estas declarando alguna variable por eso te sale ese error.

SI no quieres declarar variables quita option explicit, en las declacion de tu modulo, aun que no es recomendable hacerlo.
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

Funcion que funciona en un BD y en otra no

Publicado por Anonimo (3371 intervenciones) el 15/01/2022 15:59:51
Si donde se ha verificado (o intentado verificar) es en la ubicación que dio lugar a este hilo, es normal (y el causante de este hilo).

¿Se intento donde si funcionaba?

Una de las acciones de la ventana de VBA, es la 'compilación' , no repara nada pero detecta errores que si no se reparan pueden bloquear el correcto funcionamiento, al compilar no deberá detectar ningún error, en ocasiones, restos de anteriores experimentos pueden interferir.

Respecto a la pregunta del valor obtenido.
Se visualizara la respuesta) en el formato que tenga asignado el objeto que la mostrara en este caso: Texto0

No importa desde donde ni cuantas veces se utilice ..... si no funciona.

Hay una lección gratuita e invisible que se aprende de la lectura de libros de programación: hacer copias de seguridad (nunca se sabe donde comienza el punto de no retorno).
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
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Funcion que funciona en un BD y en otra no

Publicado por Pablo (328 intervenciones) el 15/01/2022 17:50:15
Hola
Acabo de leer la última respuesta:...hacer copias de seguridad... Ayer abrí la BD y..., access me dijo que había algo mal y creó una nueva BD con el mismo nombre y otra backup, a la normal le faltaban un par de formularios que sí estaban en la backup
Aclaro que este ordenador no está en perfectas condiciones, ya está viejo y, supongo que lo más importante, cuando me hice con el tenía word, excel y access 2010 pero, en los tres me da error de activación de productos cuando los abro
Como es eso, en casa del pobre todo son pulgas, o algo así

Compile todo el código del formulario que nos ocupa y no encontré problema

Ayer decía que había creado un formulario prueba_funcion, hoy no me deja añadirle un cuadro de texto : al abrilo me dice archivo no encontrado , acepto, lo paso a diseño, intento añadir un cuadro de texto y dice MSAccess no puede agragar, eliminar...

Esto pasa en la BDaccdb en la backup no lo se, prefiero no probar

Pablo
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
Imágen de perfil de Eduardo

Funcion que funciona en un BD y en otra no

Publicado por Eduardo (336 intervenciones) el 15/01/2022 20:46:39
Si llama la función desde la ventana de inmediato debe hacerlo así:

?esta_abierto_form("formulario")

Si formulario esta cargado retorna Verdadero. formulario es el nombre del formulario el cual quiere saber si esta cargado o abierto.

Si la llama desde un procedimiento de hacerlo así:

IF esta_abierto_form("formulario") THEN
'hacer algo
ENDIF

La función se encuentra en el libro "Programación avanzada con Microsoft Access 2000" de F. Scott Barker.

La función esta bien ya la revise con la del libro, además la utilizo bastante.
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
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Funcion que funciona en un BD y en otra no

Publicado por Pablo (328 intervenciones) el 17/01/2022 18:32:10
Yo la saqué del libro Programación con MS Access 2000 y VBA de Evan Callahan, este libro fue con el que metió en el VBA
Pablo
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