Temas activadosTemas activados  Lista de Usuarios del ForoLista de Usuarios  CalendarioCalendario  Búsqueda en el ForoBúsqueda  AyudaAyuda
  RegistrarRegistrar  ConectarConectar
Página anterior             ** NORMAS DEL FORO **            Página siguiente
Access y VBA
 Foro de Access y VBA > Access y VBA > Access y VBA
Icono de mensaje Tema: Valor numérico predeterminado Enviar mensaje Enviar mensaje
Página  de 2 Siguiente >>
Autor Mensaje
Antonalo
Asiduo
Asiduo
Avatar

Agregado: 06/Noviembre/2009
Lugar: España
Estado: Desconectado
Mensajes: 311
 Responderbullet 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







IP IP conectada
Mihura
Administrador
Administrador
Avatar

Agregado: 06/Mayo/2005
Lugar: En la dehesa
Estado: Desconectado
Mensajes: 9724
 Responderbullet 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
IP IP conectada
Kublai
Habitual
Habitual


Agregado: 11/Julio/2020
Lugar: Murcia
Estado: Desconectado
Mensajes: 85
 Responderbullet Enviado: 25/Julio/2023 a las 10:16
Muchas gracias. Solucionado. Por favor, se puede cerrar el hilo

IP IP conectada
Mihura
Administrador
Administrador
Avatar

Agregado: 06/Mayo/2005
Lugar: En la dehesa
Estado: Desconectado
Mensajes: 9724
 Responderbullet Enviado: 25/Julio/2023 a las 10:28
Kublai,

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

Access Aplicaciones
Tecsys.es
IP IP conectada
Kublai
Habitual
Habitual


Agregado: 11/Julio/2020
Lugar: Murcia
Estado: Desconectado
Mensajes: 85
 Responderbullet Enviado: 25/Julio/2023 a las 10:30
No.
Me llamo Juan
IP IP conectada
Kublai
Habitual
Habitual


Agregado: 11/Julio/2020
Lugar: Murcia
Estado: Desconectado
Mensajes: 85
 Responderbullet Enviado: 25/Julio/2023 a las 10:32
Perdón, me he metido sin querer en el hilo de otro. Lo siento mucho!!!
IP IP conectada
Antonalo
Asiduo
Asiduo
Avatar

Agregado: 06/Noviembre/2009
Lugar: España
Estado: Desconectado
Mensajes: 311
 Responderbullet 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






IP IP conectada
Mihura
Administrador
Administrador
Avatar

Agregado: 06/Mayo/2005
Lugar: En la dehesa
Estado: Desconectado
Mensajes: 9724
 Responderbullet 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
IP IP conectada
Antonalo
Asiduo
Asiduo
Avatar

Agregado: 06/Noviembre/2009
Lugar: España
Estado: Desconectado
Mensajes: 311
 Responderbullet 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


IP IP conectada
Mihura
Administrador
Administrador
Avatar

Agregado: 06/Mayo/2005
Lugar: En la dehesa
Estado: Desconectado
Mensajes: 9724
 Responderbullet 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
IP IP conectada
Foro de Access y VBA > Access y VBA > Access y VBA
Página  de 2 Siguiente >>
Enviar mensaje
Versión para imprimir Versión para imprimir

Seleccione Foro
no puedes enviar nuevos Temas al Foro
no puedes responder a los Temas de este Foro
no puedes borrar los mensajes en este Foro
no puedes editar los mensajes de este Foro
no puedes crear encuesta en este Foro
no puedes votar en encuesta en este Foro

Bulletin Board Software by Web Wiz Forums version 8.06
Copyright ©2001-2006 Web Wiz Guide
NORMAS DEL FORO