Comparar dos tablas y buscar registros no coincidentes Access

CONSULTA:No coincidentes

El Asistente búsqueda de no coincidentes permite buscar los registros de una tabla o de una consulta que no tienen ninguna relación con los de otra tabla o consulta.

 En la pestaña CREAR, haga clic en el botón Asistente para consultas del grupo Consultas.

 Seleccione la opción Asistente búsqueda de no coincidentes y, a continuación, haga clic en el botón Aceptar.

 Active una de las opciones de la sección Ver en función de los objetos que desee mostrar en la lista: Tablas, Consultas o Ambas.

 En la lista, seleccione el nombre de la tabla o de la consulta que contenga los registros que desee mostrar en la consulta de búsqueda de no coincidentes y, a continuación, haga clic en el botón Siguiente.

 Active una de las opciones de la sección Ver en función de los objetos (tablas y/o consultas) que desee mostrar en la lista.

 Seleccione el nombre de la tabla o de la consulta que contenga los registros relacionados con la tabla o la consulta seleccionada en el paso anterior y, a continuación, haga clic en el botón Siguiente.

 Si el campo seleccionado en cada lista no es el campo común a las dos tablas (o consultas), seleccione los campos correspondientes en las listas y, a continuación, haga clic en el botón...

En ilimitado con la suscripción ENI

En la tienda oficial de ENI

Anterior

Crear una consulta de tabla de referencias cruzadas

Siguiente

Crear una consulta para buscar duplicados

Tengo una base de datos con tres tablas con datos de clientes y quería comparar la primera tabla con dos más, y que me mostrara los datos que coinciden con la primera tabla y los muestre e indique en que tabla es coincidente por ejemplo:

* Tabla Clientes

- DNI

-Nombre

*Tabla Pedidos

-DNI

-NOMBRE

* Tabla Presupuestos

-DNI

-NOMBRE

Lo que pretendo es comparar la tabla Cliente con las otras dos y que de como resultado los dni que se son coincidentes en PEDIDOS y PRESUPUESTO y que me diga en que tabla hay coincidencia.

Haz clic para o


'borramos los datos de las tablas destino


Dim campo As Object

' creamos el objeto recorset con los datos de la tabla tabla1

Dim rsttabla2 As DAO.Recordset

' creamos el objeto recorset con los datos de la tabla tabla3

Dim rsttabla4 As DAO.Recordset

' creamos el objeto recorset con los datos de la tabla tabla1

Dim rsttabla2filtrado As DAO.Recordset

' creamos el objeto recorset con los datos de la tabla tabla3

Dim rsttabla4filtrado As DAO.Recordset

' creamos el objeto recorset con los datos de la tabla tabla1

Dim rsttabla1 As DAO.Recordset

' creamos el objeto recorset con los datos de la tabla tabla3

Dim rsttabla3 As DAO.Recordset

' consulta SQL

Dim strSQLtabla2 As String

' consulta SQL

Dim strSQLtabla4 As String

' consulta SQL

Dim strSQLtabla2filtrado As String

' consulta SQL

Dim strSQLtabla4filtrado As String

' consulta SQL

Dim strSQLtabla1 As String

' consulta SQL

Dim strSQLtabla3 As String

' valores nombre del campo y valor del campo

Dim nombrecampo As String

Dim valorcampo As String

' creamos la consulta de los datos que queremos recuperar

strSQLtabla2 = "SELECT [Identificador], [Estado], [Número de serie], [Uso], [USO nominal], [Última configuración] FROM TABLA2"

' creamos la consulta de los datos que queremos recuperar

strSQLtabla4 = "SELECT [Identificador], [Estado], [Número de serie], [Uso], [USO nominal],[Última configuración] FROM TWP WHERE Estado = " & " '" & "En servicio" & "' "

'"SELECT * FROM ALTASBAJAS  WHERE Identificador = " & " '" & datos & "'" & " And id_alta = " & datos1 & ";"

' creamos la consulta de los datos que queremos recuperar

strSQLtabla3 = "SELECT * FROM TABLA3"

' creamos la consulta de los datos que queremos recuperar

strSQLtabla1 = "SELECT * FROM TABLA1"

' rellenamos el recorset con la consulta de sql de la tabla tabla2

Set rsttabla2 = CurrentDb.OpenRecordset(strSQLtabla2)

' rellenamos el recorset con la consulta de sql de la tabla tabla4

Set rsttabla4 = CurrentDb.OpenRecordset(strSQLtabla4)

' rellenamos el recorset con la consulta de sql de la tabla tabla3

Set rsttabla3 = CurrentDb.OpenRecordset(strSQLtabla3)

' rellenamos el recorset con la consulta de sql de la tabla tabla3

Set rsttabla1 = CurrentDb.OpenRecordset(strSQLtabla1)

' borramos los registros antiguos de la tabla tabla1

Do Until rsttabla2.EOF

' creamos la consulta de los datos que queremos recuperar

strSQLtabla4filtrado = "SELECT [Identificador], [Estado], [Número de serie], [Uso], [USO nominal],[Última configuración] FROM TWP WHERE Identificador = " & " '" & rsttabla2(0) & "'"

Set rsttabla4filtrado = CurrentDb.OpenRecordset(strSQLtabla4filtrado)

If rsttabla4filtrado.EOF = True Then

''''''''''''''''''''''''''''''''''''''''''''''

'''' copiar a tabla1'''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''

rsttabla1.AddNew

For Each campo In rsttabla2.Fields

' cambiamos los valores de un recorset a otro

nombrecampo = campo.Name

rsttabla1(nombrecampo).Value = rsttabla2(nombrecampo).Value

Next

rsttabla1.Update

''''''''''''''''''''''''''''''''''''''''''''''

'''''''' fin copiar tabla1'''''''

''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''

'''' editar tabla3'''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''

rsttabla3.AddNew

rsttabla3("Identificador") = rsttabla2(0)

rsttabla3("Estado") = "0"

rsttabla3("Número de serie") = "0"

rsttabla3("Uso") = "0"

rsttabla3("USO nominal") = "0"

rsttabla3("Última configuración") = "01/01/1999"

rsttabla3.Update

''''''''''''''''''''''''''''''''''''''''''''''

'''''''' fin editar tabla3'''''''

''''''''''''''''''''''''''''''''''''''''''''''

Else

    If rsttabla4filtrado(1) = rsttabla2(1) And rsttabla4filtrado(2) = rsttabla2(2) And rsttabla4filtrado(3) = rsttabla2(3) And rsttabla4filtrado(4) = rsttabla2(4) And rsttabla4filtrado(5) = rsttabla2(5) Then

    ' no hacer nada

    'MsgBox ("ok")

    ElseIf rsttabla4filtrado(1) <> rsttabla2(1) Or rsttabla4filtrado(2) <> rsttabla2(2) Or rsttabla4filtrado(3) <> rsttabla2(3) Or rsttabla4filtrado(4) <> rsttabla2(4) Or rsttabla4filtrado(5) <> rsttabla2(5) Then

    ''''''''''''''''''''''''''''''''''''''''''''''

    '''' copiar a tabla1'''''''''''''

    ''''''''''''''''''''''''''''''''''''''''''''''

    rsttabla1.AddNew

    For Each campo In rsttabla2.Fields

    ' cambiamos los valores de un recorset a otro

    nombrecampo = campo.Name

    rsttabla1(nombrecampo).Value = rsttabla2(nombrecampo).Value

    Next

    rsttabla1.Update

    ''''''''''''''''''''''''''''''''''''''''''''''

    '''''''' fin copiar tabla1'''''''

    ''''''''''''''''''''''''''''''''''''''''''''''

    ''''''''''''''''''''''''''''''''''''''''''''''

    '''' copiar tabla3'''''''''''''

    ''''''''''''''''''''''''''''''''''''''''''''''

    rsttabla3.AddNew

    For Each campo In rsttabla4filtrado.Fields

    ' cambiamos los valores de un recorset a otro

     nombrecampo = campo.Name

     rsttabla3(nombrecampo).Value = rsttabla4filtrado(nombrecampo).Value

    Next

    rsttabla3.Update

    ''''''''''''''''''''''''''''''''''''''''''''''

    '''''''' fin copiar tabla3'''''''

    ''''''''''''''''''''''''''''''''''''''''''''''

    End If

End If

rsttabla4filtrado.Close

Set rsttabla4filtrado = Nothing

rsttabla2.MoveNext

Loop

Do Until rsttabla4.EOF

' creamos la consulta de los datos que queremos recuperar

strSQLtabla2filtrado = "SELECT Identificador, Estado, [Número de serie], Uso, [USO nominal],[Última configuración] FROM TABLA2 WHERE Identificador = " & " '" & rsttabla4(0) & "'"

Set rsttabla2filtrado = CurrentDb.OpenRecordset(strSQLtabla2filtrado)

If rsttabla2filtrado.EOF = True Then

''''''''''''''''''''''''''''''''''''''''''''''

'''' copiar a tabla3'''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''

rsttabla3.AddNew

For Each campo In rsttabla4.Fields

' cambiamos los valores de un recorset a otro

nombrecampo = campo.Name

valorcampo = campo.Value

rsttabla3(nombrecampo) = valorcampo

Next

rsttabla3.Update

''''''''''''''''''''''''''''''''''''''''''''''

'''''''' fin copiar tabla3'''''''

''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''

'''' editar tabla1'''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''

rsttabla1.AddNew

rsttabla1("Identificador") = rsttabla4(0)

rsttabla1("Estado") = "0"

rsttabla1("Número de serie") = "0"

rsttabla1("Uso") = "0"

rsttabla1("USO nominal") = "0"

rsttabla1("Última configuración") = "01/01/1999"

rsttabla1.Update

''''''''''''''''''''''''''''''''''''''''''''''

'''''''' fin editar tabla1'''''''

''''''''''''''''''''''''''''''''''''''''''''''

End If

rsttabla2filtrado.Close

Set rsttabla2filtrado = Nothing

rsttabla4.MoveNext

Loop

rsttabla2.Close

Set rsttabla2 = Nothing

rsttabla4.Close

Set rsttabla4 = Nothing

rsttabla1.Close

Set rsttabla1 = Nothing

rsttabla3.Close

Set rsttabla3 = Nothing

Subformulario_TABLA3.Requery

Subformulario_TABLA1.Requery


En mi base de datos Access funciona ... de código no me preguntéis que no se!!

En teoría coge las dos tablas a comparar e inserta los cambios en otras dos tablas solo con los resultados que no coinciden...

Editado por javifergavilan - 01/Abril/2020 a las 17:59

Última postagem

Tag