** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Valor numérico predeterminado
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Valor numérico predeterminado

 Responder Responder
Autor
Mensaje
Antonalo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 06/Noviembre/2009
Localización: España
Estado: Sin conexión
Puntos: 478
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Antonalo Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Valor numérico predeterminado
    Enviado: 24/Julio/2023 a las 11:53
Tengo una base para controlar todas las canciones que tengo en mis cds etc...

tengo una tabla, Albumes con campos IdAlbum, Album....

y otra tabla Grabaciones:Orden, IdTema, IdAlbum, IdInterprete....

Tengo un formulario principal basado en la tabla albumes
y un formulario secundario basado en Grabaciones y esté enlazado al principal mediante IdAlbum=IdAlbum

Lo que quiero:

Que en el subformulario Grabaciones, el campo orden tenga el valor predeterminado de Nº de registros +1 (para ese idalbum).

Lo he intentado en el panel de propiedades del campo(valor predeterminado) pero no lo sé hacer.

Y mediante VBA:

Private Sub Orden_DblClick(Cancel As Integer)

   If Me.NewRecord Then

     Me.Orden = DMax("Orden", "Grabaciones", "IdAlbum =" & Me.Parent.IdAlbum) + 1

    End If
   
End Sub

Y así me funciona, pero en un primer código, intenté:
 en vez de Me.Parent.IdAlbum, puse me.IdAlbum

y no funcionaba porque al ser un nuevo registro, IdAlbum o es nulo y en el origen de registros está Grabaciones*, pero no hay ningún control que se llame IdAlbum, no lo necesito porque el campo con el enlace ya se rellena él solo.

El caso es que lo actual funciona porque existe el formulario padre pero ¿y si no existiera?

El evento lo he probado con el doble clic pero mi idea seria ponerlo al activar, O en propiedades, sin VBA







Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Julio/2023 a las 10:14
Puedes controlar si está cargado 'el principal' con el nombre del formulario activo:

Screen.ActiveForm.Name
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Kublai Ver desplegable
Habitual
Habitual


Unido: 11/Julio/2020
Localización: Murcia
Estado: Sin conexión
Puntos: 162
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Kublai Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Julio/2023 a las 10:16
Muchas gracias. Solucionado. Por favor, se puede cerrar el hilo

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Julio/2023 a las 10:28
Kublai,

¿tú eres Antonalo?
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Kublai Ver desplegable
Habitual
Habitual


Unido: 11/Julio/2020
Localización: Murcia
Estado: Sin conexión
Puntos: 162
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Kublai Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Julio/2023 a las 10:30
No.
Me llamo Juan
Arriba
Kublai Ver desplegable
Habitual
Habitual


Unido: 11/Julio/2020
Localización: Murcia
Estado: Sin conexión
Puntos: 162
Opciones de entrada Opciones de entrada   Gracias (2) Gracias(2)   Cita Kublai Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Julio/2023 a las 10:32
Perdón, me he metido sin querer en el hilo de otro. Lo siento mucho!!!
Arriba
Antonalo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 06/Noviembre/2009
Localización: España
Estado: Sin conexión
Puntos: 478
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Antonalo Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Julio/2023 a las 10:43
Hola Mihura. Ese no es el problema, el formulario principal está cargado porque estoy delante de él, metiendo datos en el subformulario Grabaciones.

Creo que me he dado cuenta de mi error. En un nuevo registro de un subformulario, no puede existir el valor del  campo común hasta que no se introduce algún dato, y es entonces cuando el campo del subformulario toma el valor de form. principal. Y por tanto:

Me.Orden = DMax("Orden", "Grabaciones", "IdAlbum =" & Me.IdAlbum) + 1 
no puede funcionar, no existe Me.IdAlbum, pero sí  Me.Parent.IdAlbum

Lo que voy a hacer es que este código se ejecute después de actualizar el siguiente cuadro de texto, por ejemplo el tema, (el título de la canción) y ya le ponga el orden, claro que tendré que ir introduciendo las canciones en su orden dentro del CD.

No obstante, me queda la duda de si no habría alguna fórmula para introducir dentro del panel de propiedades del cuadro de texto "Orden" en la pestaña Datos , en el apartado "valor predeterminado", y no recurrir a VBA.

¿Sería esto posible?
muchas gracias Mihura






Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Julio/2023 a las 10:58
¿ has probado en el evento justo antes de guardar si ya hay valores 'reales' ?

Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Antonalo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 06/Noviembre/2009
Localización: España
Estado: Sin conexión
Puntos: 478
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Antonalo Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Julio/2023 a las 11:44
Si hubiera valores reales en un nuevo registro, no sería un nuevo registro, digo yo.
La cuestión es que yo le estaba pidiendo a un nuevo registro de un subformulario, antes de introducir nada, que introduzca el valor del campo común, y , según he comprobado, el campo común del subformulario solo toma el valor del formulario principal después de introducir algún dato en el nuevo registro del subformulario. Es decir, que estaba pidiendo algo imposible, preguntando un valor que todavía no existe. 

Así que ahora lo que hago es introducir en primer lugar el título de la canción y después de actualizar:

Private Sub IdTema_AfterUpdate()
    If Me.NewRecord Then    
       Me.Orden = DMax("Orden", "Grabaciones", "IdAlbum =" & Me.IdAlbum) + 1
    End If
End Sub

y aquí no necesito Me.Parent.IdAlbum, porque después de actualizar, ya existe IdAbum


Ahora me surge la duda de si no habría alguna manera de extender este código a cualquier campo del nuevo registro, es decir, que tanto si meto primero el título, como el interprete o los demás campos, el campo Orden se rellene solo?  ¿Quizás en los eventos afterInsert, o BeforeInsert?

Lo que más me gustaría sería, como antes he comentado, en las propiedades del cuadro de texto, en valor predeterminado


Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Julio/2023 a las 11:48
Créate una función y asígnala a los campos que quieras (podría ser en después de cambiar).
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Antonalo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 06/Noviembre/2009
Localización: España
Estado: Sin conexión
Puntos: 478
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Antonalo Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Julio/2023 a las 12:14
He puesto este código, es más corto que hacer una función y asignarla a todos los controles:

Private Sub Form_AfterInsert()
  Me.Orden = DMax("Orden", "Grabaciones", "IdAlbum =" & Me.IdAlbum) + 1  
End Sub

Esto funciona sea cual sea el campo por donde empiece, y me puedo olvidar de poner el numerito en Orden.


Muchas gracias Mihura,. podéis cerrar el hilo

Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable