Solved

Query that shows all differences between two tables.

Posted on 2014-11-25
9
169 Views
Last Modified: 2014-11-26
After I import my new bill of material part list into access.  I need a query that compare that entire table with the entire existing table and create a table with the differences.   Some parts could have been deleted, some added, and some the quantities could have changed, different rev levels, weight change, etc., then I need it to create a table with the differences.   I've managed to create two queries to create two separate tables, a parts added and a parts deleted table.  This, however, isn't exactly what i need.

 Also, after all of that happens, I need to update the existing table with all of the changes.   Can anyone suggest the easiest way to accomplish this?
0
Comment
Question by:Smilesxl
  • 4
  • 4
9 Comments
 
LVL 34

Expert Comment

by:PatHartman
Comment Utility
If you are going to replace the existing table with the new import, then all this matching is just extra work and isn't necessary.  Just delete the table and replace it.

To actually do the compares, you will need three different queries.
A left join to find adds
A Right join to find deletes
An Inner Join where you compare column by column to identify field differences.
0
 
LVL 2

Author Comment

by:Smilesxl
Comment Utility
Actually there is additional columns on the the table that are used for data entry, however I suppose I could separate that data out onto a separate table and link the part number.  Not an issue, however, I was hoping to not have to write 20 queries to compare the other 20 or so columns of actual data, there has to be an easier way.
0
 
LVL 34

Expert Comment

by:PatHartman
Comment Utility
You don't need 20 queries but you do need the three I described.

I would separate out the data you maintain from the data you import.  It is much cleaner to simply replace the table.  I would only do the matching logic if I actually needed to know what changed.
0
 
LVL 2

Author Comment

by:Smilesxl
Comment Utility
I need to know what changed.
0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 2

Author Comment

by:Smilesxl
Comment Utility
I guess I'm not understanding the inner join.
0
 
LVL 34

Accepted Solution

by:
PatHartman earned 500 total points
Comment Utility
Here is an example from one of my apps.  It only selects rows where there is one or more differences.  It is used to compare several critical fields in two client tables from different applications.  We are getting rid of one of the apps but until the conversion is complete, data entry is done in both systems and this helps us to keep it consistent.  This query references another query that joins the two tables so it is based on only a single table.  In your case, you would join the two tables in the compare query.

SELECT t.pid, t.FPEMS, t.ems, t.FPName, t.FirstName, t.LastName, t.FPClientStatus, t.ClientStatus, t.FPCareMgr, t.FPCMName, t.CareMgr, t.CMName, t.FPRace, t.Race, Date() AS CreateDT
FROM t
WHERE ((t.FPEMS <>[ems] And t.FPEMS <>"000000000") OR t.FPClientStatus <>[ClientStatus] OR t.FPCareMgr <>[CareMgr] OR [t].[FPRace] & ""<>[Race] & "" OR t.FPCMName <>[CMName])
AND (t.FPClientStatus = "Open" OR t.ClientStatus = "Open");
0
 
LVL 18

Expert Comment

by:bonjour-aut
Comment Utility
hi,

if you want to have a singular process, showing all changes, you should do this by VBA generating a change report table, where all changes are a single records like eg:

part 4711 new record
part 4712 field 3 changed - old value: ..... - new value: .....
part 4712 field 7 changed - old value: ..... - new value: .....
part 4712 field 23 changed - old value: ..... - new value: .....
part 4713 missing record
...
...
...

is that, what you want to achieve ?
0
 
LVL 34

Expert Comment

by:PatHartman
Comment Utility
Here's a picture of the form used to display the differences.  In our case, we have to fix them manually since someone has to research them to determine which is correct.  I hid most of the names.  But you can see a spot of blue text.  Clicking on that will bring the user to the standard maintenance form where he can change the data as needed.  The report is similar.
To get the green highlight, you need to use conditional formatting for each field.  So, to be consistent, I always highlight the Access side of the compare when it is different from FoxPro.
Differences
0
 
LVL 2

Author Closing Comment

by:Smilesxl
Comment Utility
Thanks.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Companies keep a much closer eye on costs today, so changing to new Technology – Microsoft Office 365 is the smartest move to take.
Describes a method of obtaining an object variable to an already running instance of Microsoft Access so that it can be controlled via automation.
In Microsoft Access, learn the trick to repeating sub-report headings at the top of each page. The problem with sub-reports and headings: Add a dummy group to the sub report using the expression =1: Set the “Repeat Section” property of the dummy…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now