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.
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.