RE:Metodo Close muy lento
En total crea 39 tablas y sincroniza 11 tablas con unos 60000 registros en total. He probado con pocas tablas y pocos registros y se cierra rápido, asi que el problema supongo que es el número de registros. ¿Qué puedo hacer?. El código que utilizo es el siguiente:
Private Sub Form_Unload(Cancel As Integer)
BDD_LOCAL.Close
Set BDD_LOCAL = Nothing
BDD_Origen.Close
Set BDD_Origen = Nothing
BDD_Destino.Close
Set BDD_Destino = Nothing
Unload Me
End Sub
Private Sub Sincroniza_Tablas_Entre_DBs(BDOrigen As DAO.Database, BDDestino As DAO.Database, nombre_tabla As String, sql As String, Crear_Tablas As Boolean)
Dim Correcto As Boolean
Dim xx As String
Dim rsOrigen As DAO.Recordset
Dim rsDestino As DAO.Recordset
Dim Campo As Variant
Dim Fecha As String
Dim Tabla_Orig As DAO.TableDef
Dim Tabla_Dest As DAO.TableDef
Dim Campo_Orig As DAO.Field
Dim Campo_Dest As DAO.Field
Dim IdOrigen As Index
Dim IdDestino As Index
Dim prOrigen As Property
Dim prDestino As Properties
On Error Resume Next
Correcto = False
If BDOrigen Is Nothing Or BDDestino Is Nothing Then GoTo FIN
If Crear_Tablas Then
Set Tabla_Orig = BDOrigen.TableDefs(nombre_tabla)
If Tabla_Orig Is Nothing Then GoTo FIN
Err.Clear
Set Tabla_Dest = Nothing
Set Tabla_Dest = BDDestino.CreateTableDef(Tabla_Orig.Name, Tabla_Orig.Attributes, Tabla_Orig.SourceTableName, Tabla_Orig.Connect)
If Tabla_Dest Is Nothing Then GoTo FIN
For Each Campo_Orig In Tabla_Orig.Fields
Set Campo_Dest = Tabla_Dest.CreateField(Campo_Orig.Name, Campo_Orig.Type, Campo_Orig.Size)
For Each prOrigen In Campo_Orig.Properties
Err.Clear
Campo_Dest.Properties(prOrigen.Name).Value = Campo_Orig.Properties(prOrigen.Name).Value
Next
Err.Clear
Tabla_Dest.Fields.Append Campo_Dest
Next
For Each IdOrigen In Tabla_Orig.Indexes
Set IdDestino = Tabla_Dest.CreateIndex(IdOrigen.Name)
For Each Campo_Orig In IdOrigen.Fields
Set Campo_Dest = IdDestino.CreateField(Campo_Orig.Name)
IdDestino.Fields.Append Campo_Dest
Next
For Each prOrigen In IdDestino.Properties
Err.Clear
IdDestino.Properties(prOrigen.Name) = IdOrigen.Properties(prOrigen.Name)
Next
Err.Clear
Tabla_Dest.Indexes.Append IdDestino
Next
Err.Clear
BDDestino.TableDefs.Append Tabla_Dest
If Err <> 0 Then GoTo FIN
End If
If sql = "" Or nombre_tabla = "" Then GoTo FIN
Set rsOrigen = BDOrigen.OpenRecordset(sql)
If rsOrigen Is Nothing Then GoTo FIN
xx = "select * from " & nombre_tabla
Set rsDestino = BDDestino.OpenRecordset(xx)
If rsDestino Is Nothing Then GoTo FIN
If Not rsOrigen.EOF Then Muestra_Mensaje ("Sincronizando la tabla... " & nombre_tabla)
Do While Not rsOrigen.EOF
rsOrigen.Edit
rsOrigen("Sincronizado").Value = True
Fecha = Format(Date, "dd/mm/yyyy") & " " & Format(Time, "Hh:Nn:Ss")
rsOrigen("Fecha_Sincronizacion").Value = Fecha
Err.Clear
rsOrigen.Update
Correcto = (Err = 0)
If Not Correcto Then Muestra_Mensaje ("Error al actualizar la Fecha de Sincronizacion en la BD Origen.")
rsDestino.AddNew
For Each Campo In rsOrigen.Fields
rsDestino(Campo.Name).Value = rsOrigen(Campo.Name).Value
Next
Err.Clear
rsDestino.Update
Correcto = (Err = 0)
If Not Correcto Then Muestra_Mensaje ("Error al actualizar los datos en la BD Destino.")
If Not rsOrigen.EOF Then rsOrigen.MoveNext
Loop
Correcto = True
FIN:
Set Tabla_Orig = Nothing: Set Tabla_Dest = Nothing
Set Campo_Orig = Nothing: Set Campo_Dest = Nothing
Set IdOrigen = Nothing: Set IdDestino = Nothing
Set prOrigen = Nothing: Set prDestino = Nothing
rsOrigen.Close
Set rsOrigen = Nothing
rsDestino.Close
Set rsDestino = Nothing
End Sub