ante todo gracias por su tiempo.
La duda con la que me presento debe ser realmente sencilla y yo no soy capaz de verla porque me he debido ofuscar...
Para ilustrar mi problema les muestro la pequeña parte de una bd en access 2007 que nos concierne:
En este esquema, hay un formulario (PoliticasComerciales) que a su vez contiene un subformulario (TarifasPoliticaComercial) que a su vez, entre otros, tiene otros dos subformularios (TarifasPrecio y TarifasPoliticaComercialDetalles).
Para rematar este último subformulario (TarifasPoliticaComercialDetalles) tiene un subformulario llamado TarifasPrecioDetalles.
Bien, dicho ésto, les expongo el problema que tengo:
Estoy tratando de crear un botón en el primer formulario para duplicar el registro activo y a su vez tantos subformularios como cuelgan de él. A la hora de crear el duplicado del primero y del subyacente todo funciona bien, pero a la hora de continuar hacia abajo, me encuentro que no tengo forma de recuperar los nuevos códigos asignados a través de los insert para asignarlos en los siguientes registros a crear en las tablas.
Les dejo aquí también un trozo del código que se guía por el orden del autonumérico para asociar correctamente a cada registro los códigos que deberiere tener:
Código vb:
Ver original
Private Sub DuplicarPolitica_Click() On Error GoTo Err_DuplicarPolitica_Click DoCmd.SetWarnings False Dim strNombreOriginal As String strNombreOriginal = Me.Nombre Dim strNombre As String strNombre = InputBox("Por favor, introduzca el nombre de la NUEVA política comercial", "Introducir nuevo nombre", strNombreOriginal) Dim SQLText As String Dim bExiste As Boolean bExiste = ExisteTexto("Nombre", "PoliticasComerciales", strNombre) If strNombre = "" Then Exit Sub End If Dim CodigoPoliticaComercial As Integer CodigoPoliticaComercial = Me.CodigoPoliticaComercial DoCmd.RunCommand acCmdSelectRecord If bExiste = False Then DoCmd.RunCommand acCmdCopy DoCmd.GoToRecord , , acNewRec DoCmd.RunCommand acCmdPaste Me.Nombre = strNombre 'Guardamos el registro DoCmd.RunCommand acCmdSaveRecord 'Copiamos TarifasPoliticaComercial DoCmd.RunSQL "INSERT INTO TarifasPoliticaComercial (CodigoPoliticaComercial, CodigoTipoPoliticaComercial, Nombre, FechaInicio,FechaFin, EsActivo, InactivoDesde, UltimaModificacion) " _ & " SELECT " & Me.CodigoPoliticaComercial & ", CodigoTipoPoliticaComercial, Nombre, FechaInicio, FechaFin, EsActivo, InactivoDesde, UltimaModificacion FROM TarifasPoliticaComercial " _ & " WHERE CodigoPoliticaComercial = " & CodigoPoliticaComercial & " ORDER BY CodigoTarifaPoliticaComercial " Dim db As Database Dim rstNTarifa As DAO.Recordset 'TarifasPoliticaComercial Nuevas Dim rstTarifa As DAO.Recordset 'TarifasPoliticaComercial Copiadas Dim rstNDetalles As DAO.Recordset 'TarifasPoliticaComercialDetalles Nuevas Dim rstDetalles As DAO.Recordset 'TarifasPoliticaComercialDetalles Copiadas Dim rstNPrecio As DAO.Recordset 'TarifasPrecio Nuevas Dim rstPrecio As DAO.Recordset 'TarifasPrecio Copiadas Dim nCodigoPoliticaComercial As Integer nCodigoPoliticaComercial = Me.CodigoPoliticaComercial Set db = CurrentDb() Set rstNTarifa = db.OpenRecordset(" SELECT CodigoTarifaPoliticaComercial FROM TarifasPoliticaComercial WHERE CodigoPoliticaComercial = " & nCodigoPoliticaComercial & " ORDER BY CodigoTarifaPoliticaComercial ") Set rstTarifa = db.OpenRecordset(" SELECT CodigoTarifaPoliticaComercial FROM TarifasPoliticaComercial WHERE CodigoPoliticaComercial = " & CodigoPoliticaComercial & " ORDER BY CodigoTarifaPoliticaComercial ") rstNTarifa.MoveFirst rstTarifa.MoveFirst If Not (rstTarifa.BOF And rstTarifa.EOF) Then If Not (rstNTarifa.BOF And rstNTarifa.EOF) Then Dim nCodigoTarifaPoliticaComercial As Long Dim CodigoTarifaPoliticaComercial As Long Do While Not rstTarifa.EOF nCodigoTarifaPoliticaComercial = rstNTarifa![CodigoTarifaPoliticaComercial] CodigoTarifaPoliticaComercial = rstTarifa![CodigoTarifaPoliticaComercial] 'Copiamos TarifasPoliticaComercialDetalles DoCmd.RunSQL "INSERT INTO TarifasPoliticaComercialDetalles (CodigoTarifaPoliticaComercial, CodigoBloque, CodigoPrograma, DiaDesde, DiaHasta, QHDesde, QHHasta, Notas, EsActivo, InactivoDesde, UltimaModificacion) " _ & " SELECT " & nCodigoTarifaPoliticaComercial & ", CodigoBloque, CodigoPrograma, DiaDesde, DiaHasta, QHDesde, QHHasta, Notas, EsActivo, InactivoDesde, UltimaModificacion " _ & " FROM TarifasPoliticaComercialDetalles " _ & " WHERE CodigoTarifaPoliticaComercial = " & CodigoTarifaPoliticaComercial & " " 'Copiamos TarifasPrecio DoCmd.RunSQL "INSERT INTO TarifasPrecio (CodigoTarifaPoliticaComercial, CodigoFormato, CodigoAccion, CodigoBloquePosicion, Nombre, FechaInicio, FechaFin, EsActivo, InactivoDesde, UltimaModificacion) " _ & " SELECT " & nCodigoTarifaPoliticaComercial & ", CodigoFormato, CodigoAccion, CodigoBloquePosicion, Nombre, FechaInicio, FechaFin, EsActivo, InactivoDesde, UltimaModificacion " _ & " FROM TarifasPrecio " _ & " WHERE CodigoTarifaPoliticaComercial = " & CodigoTarifaPoliticaComercial & " " Set rstNDetalles = db.OpenRecordset(" SELECT CodigoTarifaPoliticaComercialDetalles FROM TarifasPoliticaComercialDetalles WHERE CodigoTarifaPoliticaComercial = " & nCodigoTarifaPoliticaComercial & " ORDER BY CodigoTarifaPoliticaComercialDetalles ") Set rstDetalles = db.OpenRecordset(" SELECT CodigoTarifaPoliticaComercialDetalles FROM TarifasPoliticaComercialDetalles WHERE CodigoTarifaPoliticaComercial = " & CodigoTarifaPoliticaComercial & " ORDER BY CodigoTarifaPoliticaComercialDetalles ") If Not (rstDetalles.BOF And rstDetalles.EOF) Then If Not (rstNDetalles.BOF And rstNDetalles.EOF) Then Dim nCodigoTarifaPoliticaComercialDetalles As Long Dim CodigoTarifaPoliticaComercialDetalles As Long Dim nCodigoTarifaPrecio As Long Dim CodigoTarifaPrecio As Long Set rstNDetalles = db.OpenRecordset(" SELECT CodigoTarifaPoliticaComercialDetalles FROM TarifasPoliticaComercialDetalles WHERE CodigoTarifaPoliticaComercial = " & nCodigoTarifaPoliticaComercial & " ORDER BY CodigoTarifaPoliticaComercialDetalles ") Set rstDetalles = db.OpenRecordset(" SELECT CodigoTarifaPoliticaComercialDetalles FROM TarifasPoliticaComercialDetalles WHERE CodigoTarifaPoliticaComercial = " & CodigoTarifaPoliticaComercial & " ORDER BY CodigoTarifaPoliticaComercialDetalles ") Do While Not rstDetalles.EOF nCodigoTarifaPoliticaComercialDetalles = rstNDetalles![CodigoTarifaPoliticaComercialDetalles] CodigoTarifaPoliticaComercialDetalles = rstDetalles![CodigoTarifaPoliticaComercialDetalles] Set rstNPrecio = db.OpenRecordset(" SELECT CodigoTarifaPrecio FROM TarifasPrecio WHERE CodigoTarifaPoliticaComercial = " & nCodigoTarifaPoliticaComercial & " ORDER BY CodigoTarifaPrecio ") Set rstPrecio = db.OpenRecordset(" SELECT CodigoTarifaPrecio FROM TarifasPrecio WHERE CodigoTarifaPoliticaComercial = " & CodigoTarifaPoliticaComercial & " ORDER BY CodigoTarifaPrecio ") If Not (rstPrecio.BOF And rstPrecio.EOF) Then If Not (rstNPrecio.BOF And rstNPrecio.EOF) Then Do While Not rstPrecio.EOF nCodigoTarifaPrecio = rstNPrecio![CodigoTarifaPrecio] CodigoTarifaPrecio = rstPrecio![CodigoTarifaPrecio] 'Copiamos TarifasPrecioDetalles DoCmd.RunSQL "INSERT INTO TarifasPrecioDetalles (CodigoTarifaPoliticaComercialDetalles, CodigoTarifaPrecio, CodigoDuracion, CodigoTipoPrecio, CodigoTipoValor, Valor, NumeroSpots, Periodo, EsActivo, InactivoDesde, UltimaModificacion) " _ & " SELECT " & nCodigoTarifaPoliticaComercialDetalles & ", " & nCodigoTarifaPrecio & ", CodigoDuracion, CodigoTipoPrecio, CodigoTipoValor, Valor, NumeroSpots, Periodo, EsActivo, InactivoDesde, UltimaModificacion " _ & " FROM TarifasPrecioDetalles " _ & " WHERE CodigoTarifaPoliticaComercialDetalles = " & CodigoTarifaPoliticaComercialDetalles & " " _ & " AND CodigoTarifaPrecio = " & CodigoTarifaPrecio & " " rstNPrecio.MoveNext rstPrecio.MoveNext Loop End If End If rstNDetalles.MoveNext rstDetalles.MoveNext Loop
Falla en algunas ocasiones...
¡IMPORTANTE!: No me es posible cambiar el esquema de las tablas (ojalá pudiera, pero es del cliente y es intocable...) y también quisiera evitar crear una tabla temporal, si fuere posible