No se actualiza el recordset de un subformulario

7 envíos / 0 nuevos
Último envío
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
No se actualiza el recordset de un subformulario

Hola

 

Tengo un formulario. Dentro hay un subformulario. Cada uno está ligado a su propio recordset, que son tablas existentes.

Pongamos, por ejemplo, que el formulario tiene dos registros (y uno oculto): Nombre y apellidos (y un Id autonumérico)

Pongamos que el subformulario tiene dos registros: uno que hace referencia al Id de la otra tabla y un número de teléfono.

 

Como una persona puede tener muchos números de teléfono, entonces puede haber muchos registros del subformulario que hacen referencia a la misma Id.

 

Mi problema es que al crear un nuevo registro en el formulario principal, lo hago mediante SQL porque todo lo demás no me ha funcionado:

 

  Me.Nombre.SetFocus

  nom = Me.Nombre.Text

  Me.TextBoxApellidos.SetFocus

  apell = Me.TextBoxApellidos.Text

  Me.Recordset.Update

  Me.Recordset.FindFirst "Nombre = '" & nom & "' AND Apellidos = '" & apell & "'"
  Lugar = Me.Recordset.Fields("Id").Value
 
Al crear un registro en la tabla 1 tengo que crear un registro en blanco en la tabla 2 (no he contado que en esta tabla 2 también pongo un campo oculto con la fecha del día en que se abre)
 
Set dbs = CurrentDb
strSQL = "INSERT INTO [Tabla2] ([Id Persona], [Fecha Inicio], [Teléfono]) VALUES (" _
      & Lugar & ", format('" & Date & "','dd/mm/yyyy'), " & [Form_Subf].Cuadro_combinado15.Value & ")"
dbs.Execute strSQL
 
Posteriormente, cuando consulto la tabla a mano, puedo comprobar que el registro se ha guardado correctamente.
 
Sin embargo, justo detrás de esto tengo el siguiente código:
 
  [Form_Subf].RecordSource = "SELECT * FROM [Tabla2] WHERE [Id Persona] = " & Lugar
   Set rs = [Form_Subformulario Historia Clientes].Recordset
   rs.Requery
   If Not (rs.EOF) Then rs.MoveLast                <--------------------------------Con la ejecución detenida en este punto...
 
 
...genero una inspección para ver las propiedades de rs
Y la propiedad recordcount es 0
 
 
Qué hago mal? Por qué no puedo hacer referencia al recordset del subformulario?
 
 
Muchas gracias. Saludos
 
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Re: No se actualiza el recordset de un subformulario

No puedo editar. Para acortar, recorté los nombres.

 

Donde dice 

 

Set rs = [Form_Subformulario Historia Clientes].Recordset

 

Debe decir, por coherencia

 

Set rs = [Form_Subf].Recordset

 

Saludos

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 hora 54 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: No se actualiza el recordset de un subformulario

el control  [Form_Subf] es un control de subformulario, es un control, como es un botón o un cuadro de texto.

El control no tiene Recordset asociado, lo que tiene recordset es el subformulario, al que se accede a través de la propiedad Form del control subformulario.

Prueba con 

[Form_Subf].Form.Recordset

 

de todas maneras, si tienes el subformulario y el formulario principal con los campos principal y secundario definidos, esto lo debería hacer sólo ¿no?, bastaría con que actualizaras el subformulario.

[Form_Subf].Requery

 

------
Ya sé Excel, pero necesito más.

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Re: No se actualiza el recordset de un subformulario

Muchas gracias, mañana lo pruebo.

 

Es que como hay tantísimas maneras de referirse a lo mismo... Y en unos casos valen y en otros no... ¡¡CON LO FÁCIL QUE ES EL EXCEL!!!

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Re: No se actualiza el recordset de un subformulario

Pues no soy capaz.

 

Hago un 

Set rs = [Form_Subf].Form.Recordset

Y luego miro rs.recordcount y me sale 0. Debería haber unos 400 registros.

 

:(

 

 

Un saludo

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Re: No se actualiza el recordset de un subformulario

Por cierto, tengo hecha la vinculación de campos principal y secundario (el principal el del formulario y el secundario es el correspondiente del subformulario)

 

Para consulta me funciona perfectamente.

 

El problema es que mi formulario + subformulario son para añadir datos.

En este punto, cuando quiero añadir datos desde el subformulario a un registro que ya existe de la tabla del formulario, la cosa también me funciona correctamente.

 

Pero si creo una persona nueva (en la tabla del formulario), entonces creo por código un registro en la tabla del subformulario. Esto también lo hace bien.

Pero una vez creo esto, quiero posicionarme ahí, y eso es lo que me falla.

 

Un saludo

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Re: No se actualiza el recordset de un subformulario

Creo que queda resuelto.

 

La solución es la siguiente:

 

  Me.Nombre.SetFocus

  nom = Me.Nombre.Text

  Me.TextBoxApellidos.SetFocus

  apell = Me.TextBoxApellidos.Text

  Me.Recordset.Update           <--------------------------Mueve el registro al primero de la tabla

  Me.Recordset.FindFirst "Nombre = '" & nom & "' AND Apellidos = '" & apell & "'"            <-------------Vuelvo a colocarme en mi sitio (el nuevo registro). Mo me funcionaba correctamente un movelast ni un lastmodified ni ninguna virguería de esas.
    
  Lugar = Me.Recordset.Fields("Id").Value                     <------------------ El valor del registro compartido. Esto es porque al hacer el Update, me cancela una inserción y me genera otra: los Id no son correlativos, sino alternos. Mala estructura o mala gestión por mi parte, pero como no encuentro el fallo, así funciona.
  
  Set dbs = CurrentDb
  strSQL = "INSERT INTO [Historial] ([Id Persona], [Fecha Inicio], [Id]) VALUES (" _
      & Lugar & ", format('" & Date & "','dd/mm/yyyy'), " & Me.OpenArgs & ")"
  dbs.Execute strSQL                             <---------------- No encontré otra manera de introducir el registro.
 
 
  Me.Subf.SetFocus
  DoCmd.GoToRecord , , acLast                 <----------------- Me pongo en el último registro, que es el que he introducido en la expresión SQL anterior
  
  [Form_Subf].Puesto.SetFocus              <----------- Me pongo en el siguiente control que el usuario debe modificar
 
 
 
 
Por alguna razón, esto funciona. Y ya sabemos que "si funciona...."
 
 
Saludos
 
 
P.D. "...no lo toques"