** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Tus Funciones Favoritas & Aportaciones & Artí­culos
  Mensajes nuevos Mensajes nuevos RSS - TABLAS: ¿Dos tablas iguales?
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoTABLAS: ¿Dos tablas iguales?

 Responder Responder
Autor
Mensaje
buho Ver desplegable
Administrador
Administrador
Avatar
Abuelo FELIZ, nieto desesperado

Unido: 10/Abril/2004
Localización: Valladolid
Estado: Sin conexión
Puntos: 11321
Enlace directo a este mensaje Tema: TABLAS: ¿Dos tablas iguales?
    Enviado: 10/Agosto/2013 a las 08:10
Algunas veces necesitamos saber si dos tablas tienen identica estructura o no.
Va codigo:

Function TablasIdenticas(ByVal Tabla1 As String, ByVal Tabla2 As String) As Boolean
'Esta tiene truco. Comparamos si dos tablas son iguales o no, intentando un
'INsert Into de una a otra. Para que el Insert Into se produzca,sin error, las
'tablas tienen que ser identicas.
'Tiene truco, ya que para que no se produzca un Insert Into real, meto
'una clausula Where, con un campo ID autonumerico (Es un mero ejemplo)
'puesto a un valor «impososible»
'Es decir, este metodo *no* es de proposito general,pues dependerá de cada caso
'que tenga que meter el nombre de un campo u otro.
'Es que si no hago el where, se puede producir el Insert Into real de una
'tabla a otra y eso no interesa, pues se trata simplemente de comparar
'las tablas, no de insertar registros.
'En fin, por si vale a alguien como idea....

    On Error GoTo Errnoiguales
    Dim SQL As String
    SQL = "INSERT INTO " & Tabla2 & " SELECT * FROM " & Tabla1 & " Where ID=-1;"
    CurrentDb.Execute SQL
    TablasIdenticas = True
Errnoiguales:
End Function
Function ComparaTablas(ByVal NombreTabla1 As String, ByVal NombreTabla2 As String) As Boolean
    Dim EstaBase As DAO.Database
    Dim Objetotabla1 As DAO.TableDef
    Dim Objetotabla2 As DAO.TableDef
    Dim Campo1 As DAO.Field
    Dim Campo2 As DAO.Field
    Dim Devuelve As Boolean
    'esta solo compara que los nombres sean identicos
    'por lo tanto está sesgada e incompleta, tal y como te decia en las news
    Set EstaBase = CurrentDb
    Set Objetotabla1 = EstaBase.TableDefs(NombreTabla1)
    Set Objetotabla2 = EstaBase.TableDefs(NombreTabla2)
    'aqui, ya directamente, si el numero de campos
    'de ambas tablas no coincide, directamente pasamos ya
    'de recorrer sus nombres, pues evidentemente las
    'tablas ya no son iguales.
    If Objetotabla1.Fields.Count <> Objetotabla2.Fields.Count Then
        ComparaTablas = False
        Exit Function
    End If
    For Each Campo1 In Objetotabla1.Fields
        For Each Campo2 In Objetotabla2.Fields
            If Campo1.Name = Campo2.Name Then
                Devuelve = True
                'los dos campos coincidenen en el nombre
                'pasamos a testear otro campo
                Exit For
            Else
                Devuelve = False
            End If
        Next Campo2
        If Devuelve = False Then
            'en el anterior For hay un campo
            'de Tabla1 que no se corresponde con
            'Tabla2...salimos...pues las tablas
            'ya no son iguales
            ComparaTablas = False
            Exit Function
        End If
    Next Campo1
    ComparaTablas = True
    EstaBase.Close
    Set EstaBase = Nothing
    Set Objetotabla1 = Nothing
    Set Objetotabla1 = Nothing
End Function
Por fin he hecho algo bueno, ser abuelo ¡y porque no lo he hecho yo!
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable