Realizar consultas de agregar en cadena

Tengo tres tablas relacionadas entre si (tb_org_01, tb_org_02 y tb_org_03) que tengo que migrarlas a tres tabla de otra BD (tb_bas_01, tb_bas_02 y tb_bas_03), las tablas de las dos BD tienen casi la misma estructura, la tb_bas_01 tiene un campo autonumerico (id_01) que se copia una o varias veces a un campo numerico (id_01) de tb_bas_02 , por estos se relacionan y la tb_bas_02 tiene un campo autonumerico (id_02) que se copia una o varias veces a un campo numerico (id_02) de tb_bas_03, por estos se relacionan; de igual manera estan el tb_org_01, tb_org_02 y tb_org_03.
Para agregar los datos en tb_bas_01 no hay problema, pero al agregar los datos en tb_bas_02, debo tener en cuenta el id_01 de tb_bas_01 y para agregar en tb_bas_03, debo tener en cuenta  el id_02 de tb_bas_02. Lo hago por DAO. Recorset, pero sinceramente cuando son muchos registro se demora muchísimo tiempo.
Me podes ayudar con mi problema.

1 Respuesta

Respuesta
1
Yo lo haría con una consulta de datos anexados o de creación de tabla. Puedes tener las tablas de la BD de origen vinculadas para facilitar el cambio. Si insertas 1 a 1 los registros, el Access 'se cansa' y el proceso te tardará mucho.
Gracias, pero no se puede hacer con una consulta de datos anexados o no se como se haría.
Las tablas tiene estas estructuras:
tb_bas_01 (Campos Tabla): | id_01 | Clave | Movil | TipoDoc | .....
tb_bas_02 (Campos Tabla): | id_01 | id_02 | Codigo | Cant | Valor | .....
tb_bas_03 (Campos Tabla): | id_02 | id_03 | Trabajo | Material | .....
y estas son las relaciones: tb_bas_01 / id_01 con tb_bas_02 / id_01 y tabla tb_bas_02 / id_02 con tb_bas_03 / id_02.
El problema radica en que los datos en su origen en los campos autonuméricos tienen diferente serie a los que se están migrando, entonces al ingresar un registro en la tabla tb_bas_01 se genera un autonumérico (id_01) y este debe hace parte de los datos se van a ingresar en la tabla tb_bas_02; y al ingresar un registro en la tabla tb_bas_02 se genera un autonumérico (id_02) y este debe hace parte de los datos se van a ingresar en la tabla tb_bas_03. Adicional a esto de un tb_bas_01 / id_01 se puede repetir varias veces en tb_bas_02 / id_01 y tambien un tb_bas_02 / id_02 se puede repetir varias veces en tb_bas_03 / id_03, es decir una Clave puede tener varios Codigos y un Codigo puede tener varios Trabajos.
Espero ser claro y que me entiendas cual es el problema que tengo.
Os agradezco de antemano tu ayuda.
Alkejoda
Si quieres migrar tablas de una BD a otra hay una consulta 'de creación de tabla' que creará las tablas nuevas con la misma estructura. No es difícil de usar.
Os entiendo, pero esto debo hacerlo todos los días y cada día debe almacerse en las mismas tablas (tb_bas_01, tb_bas_02 y tb_bas_03) sin borrar el día anterior.
Lo que yo te digo es copiar las tablas enteras, no los registros, ¿o es que empiezas cada día de 0?.
No voy a migrar las tabla sino lo que esta dentro.
Este es el código que utilizo:
Function Fase1()
Dim rsMO As DAO.Recordset, SQLMO As String, rsMO_c As DAO.Recordset, SQLMO_c As String
Dim IdAsig As Long, IdMO As Long
SQLMO = "SELECT * FROM ManoDeObra WHERE (ManoDeObra.verificado = True) and (ManoDeObra.enviado = false)"
SQLMO_c = "SELECT * FROM ManoDeObra_Smap"
Set rsMO = CurrentDb.OpenRecordset(SQLMO)
Set rsMO_c = CurrentDb.OpenRecordset(SQLMO_c)
If rsMO.RecordCount = 0 Then
MsgBox "No existen ordenes para cargar al Smap", vbInformation, "Cargue de ordenes"
Exit Function
Else
rsMO.MoveFirst
Do Until rsMO.EOF
IdMO = rsMO("IdM/O")
rsMO_c.AddNew
rsMO_c("Clave") = rsMO("Clave")
IdAsig = rsMO_c("IdM/O") // Es Autonumerico
rsMO_c("Movil") = rsMO("Movil")
rsMO_c("FechaAsignado") = rsMO("FechaAsignado")
rsMO_c("HoraAsignado") = rsMO("HoraAsignado")
rsMO_c("TipoDeOrden") = rsMO("TipoDeOrden")
rsMO_c("Visitada") = "-1"
rsMO_c("Placas") = rsMO("Placas")
rsMO_c.Update
CurrentDb. Execute "INSERT INTO PersonalMantenimiento_Smap ( NAsignado, [WAPIdM/O], [IdM/O] ) SELECT PersonalMantenimiento.NAsignado, PersonalMantenimiento.[WAPIdM/O], " & IdAsig & " AS Id " _
& "FROM PersonalMantenimiento WHERE (PersonalMantenimiento.[IdM/O])=" & IdMO
CargueAmaps IdAsig, IdMO
CurrentDb.Execute "UPDATE ManoDeObra SET ManoDeObra.enviado = True WHERE (ManoDeObra.[IdM/O])=" & IdMO
rsMO.MoveNext
Loop
End If
rsMO.Close
rsMO_c.Close
End Function
Function CargueAmaps(IdAsignacion As Long, IdMO As Long)
Dim rsAMP As DAO.Recordset, SQLAMP As String, rsAMP_c As DAO.Recordset, SQLAMP_c As String
Dim idAmap As Long, idAMP As Long, SQLText As String
SQLAMP = "SELECT AmapMaterialPrincipal.* FROM AmapMaterialPrincipal WHERE (AmapMaterialPrincipal.IdAmapMaterial)=" & IdMO
SQLAMP_c = "SELECT * FROM AmapMaterialPrincipal_Smap"
Set rsAMP = CurrentDb.OpenRecordset(SQLAMP)
Set rsAMP_c = CurrentDb.OpenRecordset(SQLAMP_c)
Do Until rsAMP.EOF
idAmap = rsAMP("AutoNAmap")
rsAMP_c.AddNew
rsAMP_c("IdAmapMaterial") = IdAsignacion
rsAMP_c("CodigoAmap") = rsAMP("CodigoAmap")
rsAMP_c("Sector") = rsAMP("Sector")
rsAMP_c("CentroDeCostos") = rsAMP("CentroDeCostos")
rsAMP_c("ValorUnit") = rsAMP("ValorUnit")
rsAMP_c("CantidadAmap") = rsAMP("CantidadAmap")
rsAMP_c("Cargado") = rsAMP("Cargado")
rsAMP_c("InicioDesplazamiento") = rsAMP("InicioDesplazamiento")
rsAMP_c("InicioLabor") = rsAMP("InicioLabor")
rsAMP_c("FinLabor") = rsAMP("FinLabor")
rsAMP_c("CircuitoMT") = rsAMP("CircuitoMT")
rsAMP_c("CentroDistribucion") = rsAMP("CentroDistribucion")
rsAMP_c("CodBarrio") = rsAMP("CodBarrio")
idAMP = rsAMP_c("AutoNAmap")  //EsAutonumerico
rsAMP_c.Update
SQLText = "INSERT INTO AmapMaterialSecundario_Smap ( AutoNAmap, Trabajo, CodigoMaterial, Cantidad, Direccion, Observaciones, CodigoDeFalla, Digitador, FechaDigitacion, IdInventario, ValorUnitario, Validado, WAPAutoNAmap, CodigoAP, CodigoAPRetirado ) " _
& "SELECT " & idAMP & " AS id, AmapMaterialSecundario.Trabajo, AmapMaterialSecundario.CodigoMaterial, AmapMaterialSecundario.Cantidad, AmapMaterialSecundario.Direccion, AmapMaterialSecundario.Observaciones, AmapMaterialSecundario.CodigoDeFalla, " & Chr(34) & "PDA" & Chr(34) & ", #" & Now & "#, AmapMaterialSecundario.IdInventario, AmapMaterialSecundario.ValorUnitario, AmapMaterialSecundario.Validado, AmapMaterialSecundario.WAPAutoNAmap, AmapMaterialSecundario.CodigoAP, AmapMaterialSecundario.CodigoAPRetirado " _
& "FROM AmapMaterialSecundario WHERE (AmapMaterialSecundario.AutoNAmap)=" & idAmap
CurrentDb.Execute SQLText
rsAMP.MoveNext
Loop
rsAMP.Close
rsAMP_c.Close
End Function
Los Autonumericos no los puede copiar porque tienen series diferentes.
Ayudame a que este proceso sea más rapido.
Gracias
Alkejoda
¿Y por que estas emperrado en migrar 'lo que está dentro' si te da problemas? ¿No puedes exportar la tabla entera? Evitarás problemas y es mucho más rápido.
Estoy confundido, por favor me puedes explicar, se me ocurre con un ejemplo.
Mi correo es [email protected]
Garcías
Alkejoda
No doy mi correo lo siento, pero no cual es tu problema, si eres capaz de escribir todo ese código. Hay un tipo de consulta que es de 'creación de tabla' y lo que hace es crearte una tabla 'entera y verdadera' a partir de otra tabla o consulta ¿lo has probado?, me dices algo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas