Copiar registros de una tabla de una db a otra tabla de otra db

Tengo dos bases de datos (1), (2), ambas tienen las mismas tablas, cuando quiero comprobar los registros de una tabla (a), estaba usando lo siguiente para copiar desde la base de datos (1) aquellos registros de la tabla (a) de la base de datos (2) que tienen en el campo nif un valor determinado en la variable V_NIF, copiándolos a una tabla soporte de la base de datos (1) y ya hay hago las comparaciones.

Este es el código que uso:

Set dbOrigen = OpenDatabase(RUTA_ORIGEN)
Set rsOrigen = dbOrigen.OpenRecordset(NOM_TABLA, dbOpenDynaset)

Do Until rsOrigen.EOF
If rsOrigen!NIF = V_NIF Then

Sql = "INSERT INTO " & BBDD & " ........

...

Me preguntaba si sería posible poner un select de forma que en el momento de ejecutar o abrir la tabla en la bd (2) ya tenga filtrados los registros por el campo NIF por el valor de la variable V_ NIF, evitando de esta forma tener que leer toda la tabla secuencialmente.

2 Respuestas

Respuesta
1

No veo el problema.

El origen de datos de un recordset puede ser una tabla o una consulta (y una consulta es una SQL)

Algo como esto podría servir de guía:

Set rsOrigen = dbOrigen.OpenRecordset("Select * from NOM_TABLA Where NIF = '" & V_NIF & "  order by  NIF'" , dbOpenDynaset)

Muchísimas Gracias!!!

Lo he probado y va genial,

La verdad es que me quitas un peso bastante gordo, las bases de datos cada vez tienen más registros por lo cual este proceso ralentizaba el procedimiento.. 

Saludos!!!

Respuesta
1

No necesita recorrer un recordset lo puede hacer directamente mediante SQL. Le preparé este ejemplo:

"Copiar los NIF='2222222' de la tabla tblnif de  base de datos en uso,  db_base1  en la tabla tbnif de la base de datos alojada en " D:\TodoExpertos\db_base2.accdb"

BASE DE DATOS db_bas1

TABLA tblnif

FORMULARIO PARA ELEGIR EL NIF

Hago clic en Copiar:

RESULTADO EN LA BASE DE DATOS db_bas2

TABLA

Observe que me ha copiado los nif con idmvto 2 y 4.

CÓDIGO DEL BOTÓN COPIAR

Private Sub btnCopiar_Click()
  On Error GoTo hay_error
   Dim strNIF As String
   Dim strSQL As String
   If Me.V_NIF = "" Then
     MsgBox "Debe elegir un NIF", vbInformation, "Cuidado.."
     Exit Sub
   End If
   strNIF = Me.V_NIF
   strSQL = "INSERT INTO tblnif (idmvto, nif, algo, fecha_reg ) IN 'D:\TodoExpertos\db_base2.accdb'" & vbCrLf
   strSQL = strSQL & "SELECT tblnif.idmvto, tblnif.nif, tblnif.algo, tblnif.fecha_reg" & vbCrLf
   strSQL = strSQL & " FROM tblnif WHERE tblnif.nif='" & strNIF & "'"
   CurrentDb.Execute strSQL
   If Err.Number = 0 Then
     MsgBox "Datos copiados satisfactoriamente", vbInformation, "Copiando..."
   End If
hay_error_exit:
  Exit Sub
hay_error:
   MsgBox "Ocurrió el error " & Err.Number & vbCrLf & Err.Description, vbCritical, "Error.."
   Resume hay_error_exit
End Sub

Lo anterior es válido cuando las tablas tienen la misma estructura. Si quiere el ejemplo lo puede solicitar a [email protected] favor en asunto anotar su consulta.

Gracias por la ayuda pero me va mejor lo expuesto por Enrique, es un procedimiento que depende de los nif de otra otra tabla, por lo cual es interno, no puedo generar el campo nif como me has indicado.. 

Saludos...

Me alegro lo haya solucionado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas