Comparar campos de dos tablas iguales |
Responder |
Autor | |||||||||||||||||
javifergavilan
Nuevo Unido: 25/Marzo/2020 Localización: España- Madrid Estado: Sin conexión Puntos: 49 |
Tema: Comparar campos de dos tablas iguales Enviado: 01/Abril/2020 a las 17:58 |
||||||||||||||||
Buenas Tardes:
He puesto esto: '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... un saludo. Editado por javifergavilan - 01/Abril/2020 a las 17:59 |
|||||||||||||||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Enviado: 27/Marzo/2020 a las 20:49 | ||||||||||||||||
¿Y cómo lo has hecho?
|
|||||||||||||||||
javifergavilan
Nuevo Unido: 25/Marzo/2020 Localización: España- Madrid Estado: Sin conexión Puntos: 49 |
Enviado: 27/Marzo/2020 a las 20:41 | ||||||||||||||||
BUENAS NOCHES:
Muchas gracias , Ya esta solucionado... Un saludo.
|
|||||||||||||||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Enviado: 25/Marzo/2020 a las 18:55 | ||||||||||||||||
Como decía mi primer jefe: "En informática siempre hay otro camino"
La SQL sería:
En modo diseño de consultas el primer campo sería:
y el resultado:
Eso sí, como tengas unos cuantos campos la cosa va a ser costosa ... Editado por Mihura - 25/Marzo/2020 a las 18:55 |
|||||||||||||||||
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14720 |
Enviado: 25/Marzo/2020 a las 17:22 | ||||||||||||||||
Las consultas de no coincidentes son adecuadas para encontrar "viudas" y "huérfanos". Por ejemplo: clientes sin facturas. Pero no son adecuadas para localizar "diferencias" entre registros.
Como decía, creo que no es posible hacerlo sin VBA. Un saludo
|
|||||||||||||||||
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
Enviado: 25/Marzo/2020 a las 17:19 | ||||||||||||||||
Un Saludo.
|
|||||||||||||||||
javifergavilan
Nuevo Unido: 25/Marzo/2020 Localización: España- Madrid Estado: Sin conexión Puntos: 49 |
Enviado: 25/Marzo/2020 a las 17:01 | ||||||||||||||||
Buenos días:
Lo he intentado pero no me sale para todos los campos de una tabla... Gracias...
|
|||||||||||||||||
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
Enviado: 25/Marzo/2020 a las 14:55 | ||||||||||||||||
Hola!
Y umna consulta de búsqueda de no coincidentes no te valdría? |
|||||||||||||||||
Un Saludo.
|
|||||||||||||||||
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14720 |
Enviado: 25/Marzo/2020 a las 14:50 | ||||||||||||||||
Lo siento. Yo no se ninguna forma de hacerlo.
|
|||||||||||||||||
javifergavilan
Nuevo Unido: 25/Marzo/2020 Localización: España- Madrid Estado: Sin conexión Puntos: 49 |
Enviado: 25/Marzo/2020 a las 14:44 | ||||||||||||||||
Buenos días :
Gracias por la Respuesta pero no se programar código...¿ Se puede hacer desde access sin codigo? Muchas Gracias.
|
|||||||||||||||||
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14720 |
Enviado: 25/Marzo/2020 a las 13:42 | ||||||||||||||||
Hola javifergavilan y bienvenido al foro,
Se supone que ambas tablas tienen la misma cantidad de registros (si no fuera así sería necesario ampliar) - Abres dos recordsets, uno por cada tabla >> Set rst = CurrentDb.OpenRecordset(.... - Recorres la primera tabla y, en cada iteración, buscas el Id en el segundo recordset >>Un bucle Do.. Loop >>Utilizar FindFirst para localizar en el segundo recordset >>Utilizar NoMatch para controlar si existe o no - Una vez localizado, recorres todos los campos (se supone que son los mismos nombres) >>Bucle For Each - Comparas los valores y muestras las diferencias. Por ejemplo en la ventana de inmediato >>Debug.Print ... Así es como yo lo enfocaría. Un saludo |
|||||||||||||||||
javifergavilan
Nuevo Unido: 25/Marzo/2020 Localización: España- Madrid Estado: Sin conexión Puntos: 49 |
Enviado: 25/Marzo/2020 a las 12:32 | ||||||||||||||||
Buenos días :
Tengo dos tablas de access y quiero comparar sus datos para que me diga cuales son los que varian... Ejemplo: Tabla 1 ID uso Nserie fecha 1 act 1234 03/05/2020 2 des 1235 04/05/2020 Tabla 2 ID uso Nserie fecha 1 des 1234 03/05/2020 2 des 1235 04/05/2020 Quiero que access me diga el Campo Uso de la Tabla 2 con el valor DES es diferente al de la tabla 1. Creo que me explicado... un saludo y gracias
|
|||||||||||||||||
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |