Tables :: Most Efficient Way To Store Historical Data
Mar 11, 2013
I'm thinking of 2 different ways, but not sure how Access will handle them.
1) A table that maintains the start and stop date of the relationship (i.e. employee has a job title from a start date to an end date).
This is the ideal, but I'm concerned about the number of records. The database will store 3,000 employees and I'd estimate around 2000 changes a month can occur to the employee data (transfers, hires, promotions, terminations and all cascading changes on dependent information).
2) A different database for each month/year. (i.e. Employees_March2013, Employees_April2013)
I don't have concerns about the number of records, but I'm not sure how the front-end will work with multiple back-end databases. Is there an easy way to setup a form to choose which "effective date" of employee information you'd like to choose and have it link to the correct back-end at that point before running a query/report?
View Replies
ADVERTISEMENT
Jun 1, 2005
Hope the thread title wasn't too confusing.
I have a database that tracks emissions from painting. Bear with me since this is going to be a long post.
:o
Some background info.
- a paint can consists of many parts mixed in a specific ratio.
- a part cosists of many chemicals
- a part may be used is many different paints
Here is how I have the existing database structured now. I’ve simplified it somewhat.
tblPaint
PaintID (PK)
PaintName - String
PaintDensity - Double
PaintVOCContent - Double
tblPart
PartID (PK)
PartName - String
PartDensity - Double
PartVOCContent - Double
tblRatio
RatioID (PK)
PaintID (FK)
PartID (FK)
Ratio - Integer
tblChemicalWt
ChemicalWtID (PK)
PartID (FK)
ChemicalID (FK)
WeightPercent - Double (Percent)
tblChemical
ChemicalID (PK)
strChemicalNumber - Long
strChemicalName - String
tblUsage
UsageID (PK)
PaintID (FK)
UsageDate - Date
UsageAmount - Double
PK = Primary Key (Autonumber)
FK = Foreign Key (Autonumber)
The Density or VOC Content (VOC = Volatile Organic Compound) for a paint can either be given OR it can be calculated by the mix ratio of parts and their respective Density or VOC Content values. One or the other must be complete.
What I did not account for was that there may be changes due to the paint manufacturer revising their paint composition, such as;
the parts that make up a paint may change
chemical make-up of a part changes (can be a change in Weight Percentages or the addition or deletion of a chemical).
ratio in which parts are mixed for a paint changes
Density/VOC Content values may change for a Paint or Part
The problem is that I cannot simply change the existing records as the emissions are calculated using all the data from each table and emissions need to be calculated using the paint/part/ratio/chemical weight percent info that was valid at the time of usage.
Another thing is that the Paint Name will not change, it’ll always be something like “BrandX Acrylic Blue”.
The person entering usage data only knows how much of what paint was used for a given day.
The person who enters paint usage has nothing to with entering the chemical make-up for parts and information for the paints and vice versa.
At any rate, my new draft table design is as follows. Two of the tables (tblChemical & tblUsage) will remain the same.
tblPaint
PaintID (PK)
PaintName - String
tblPaintVersion
PaintVersionID (PK)
PaintID (FK)
PaintDensity - Double
PaintVOCContent - Double
PaintVersionDateIN - Date
PaintVersionDateOUT - Date
tblPart
PartID (PK)
PartName - String
tblPartVersion
PartVersionID (PK)
PartID (FK)
PartDensity - Double
PartVOCContent - Double
PartVersionDateIN - Date
PartVersionDateOUT - Date
tblChemicalWt
ChemicalWtID (PK)
PartVersionID (FK)
ChemicalID (FK)
WeightPercent - Double (Percent)
I might be able to do away with tblRatioVersion and just have one table to store the mix ratios. It should be the case that a change in mix ratios (either a change in mix ratios and/or what parts make up a paint) means a change in the Paint Density & VOC Content. But I am presenting both versions of the Ratio tables here for completeness.
Version 1
tblRatioVersion
RatioVersionID (PK)
PaintVersionID (FK)
RatioVersionDateIN - Date
RatioVersionDateOUT - Date
tblRatio
RatioID (PK)
RatioVersionID (FK)
PartVersionID (FK)
Ratio - Integer
Version 2
tblRatio
RatioID (PK)
PaintVersionID (FK)
PartVersionID (FK)
RatioVersionDateIN - Date
RatioVersionDateOUT - Date
Ratio - Integer
I plan on having the DateOUT fields be populated automatically to match the DateIN for the new version. That way I can use “BETWEEN DateIN and DateOUT” to select the appropriate info for calculating emissions. The idea came from an old thread I started (http://www.access-programmers.co.uk/forums/showthread.php?t=31677&highlight=historical+data). I think this is the way to go, but with all the relationships going on, I'm having a hard time wrapping my head around it all. Am hoping someone here can help me with this.
Anyone see any problems with the new table design?
Anyone know a better way?
:confused:
Some potential issues that I see
If only the Density/VOC Content changes for a Paint, then the old set of records in tblRatio must be duplicated.
If only the Density/VOC Content changes for a Part, then the old set of records in tblRatio & tblChemicalWt must be duplicated.
Thanks for reading this post all the way to the end!
:D
EDIT: Thought about it some more.
A new version of a Part, should trigger a new version of Mix Ratios which in turn should trigger a new version of a paint.
Part --> Ratio --> Paint
Ratio --> Paint
Also, a change in a Part must trigger a New Paint version for ALL Paints that currently use it!
:eek:
View 3 Replies
View Related
Oct 7, 2013
I am wondering if there is an efficient way to compare two fields from one table to another two fields from another table. So basically
Code:
If targetTable.Field1.Value = sourceTable.Field1.Value And targetTable.Field2.Value = sourceTable.Field2.Value Then
targetTable.Field3.Value = sourceTable.Field3.Value
The problem is that I need to run this for all entries in targetTable. The only I could think of was to use 2 nested for loops (one for target table and one for source table) as outlined in the following (my data is currently in Excel, but I want to import it to Access)
Code:
For i = 2 To 5754
For j = 2 To 3500
If targetSheet.Range("I" & i).Value = sourceSheet.Range("AR" & j).Value And targetSheet.Range("K" & i).Value = sourceSheet.Range("AS" & j).Value Then
targetSheet.Range("I" & i).Value = sourceSheet.Range("AT" & j).Value
The above code works but it is really slow (takes about 12 mins on a high-end CPU).
View 4 Replies
View Related
Oct 7, 2014
Is it possible to create a field in a table that stores only two possible data choices: a check or null value ?
View 6 Replies
View Related
Oct 1, 2012
I have a table of Dealers. Each dealer has a REP. I want to CHANGE the rep of the Dealer going forward but RETAIN the historical.
View 4 Replies
View Related
Mar 6, 2007
Could someone point me in the right direction on how to statically store current pricing for a product in an invoice database, whereby future price changes would not change pricing on past/previously created invoices...?
View 6 Replies
View Related
Nov 2, 2014
I have the following tables
1. t_Employee. It consists of the following fields:
EmployeeID
Name
Job Title
Contract Start Date
Contract End Date
2. t_Login. It has the ff fields:
UserID
UserName
Password
3. t_AuditTrail w/ the ff fields (this will used for historical data for Job title, Contract Start Date, Contract End Date, etc.):
AuditTrailID
TableID (in this case t_Employee)
FieldName (JobTitle)
RecordID (EmployeeID)
OldValue
NewValue
ChangeDate (date edited)
ChangeBy (UserName)
I've already set up t_AuditTrail by putting several (& separate) After Update Data Macros.
Now, I have a form for t_Employee. It has a button that would open a report. This report contains the Job Title history of an employee.
The report is based on a query w/ the ff SQL:
Code:
SELECT t_AuditTrail.atTableID, t_AuditTrail.atFieldName, t_AuditTrail.atRecordID, t_AuditTrail.atOldValue, t_AuditTrail.atNewValue
FROM t_AuditTrail
WHERE (((t_AuditTrail.atTableID)="t_Employee") AND ((t_AuditTrail.atFieldName)="eJobTitleID"));
So the report only shows historical data for Job Title. Which means that Job Title from t_AuditTrail is not related to Contract Start Date or Contract End Date.
Problem(s)/Question(s):I want my report to show the Job Title History and the corresponding contract start date and contract end date (not the date a record was edited). When an employee changes a job title, his/her contract dates change.However, when i start to make a report based on quesries q_AuditTrail_JobTitle and q_AuditTrail_ContractStartDate and q_AuditTrail_ContractEndDate, Access tells me that they are not connected so it cannot make a report. How do I go about this? How do I let user see the Job Title relative to its contract start and end dates?
View 1 Replies
View Related
Feb 26, 2014
I have a database with student information that contains tables about their dissertation and graduation information. There is a field "academic year" noting their graduation year. I have a form for data entry that my data entry person likes to use in datasheet view. The form is based on a query that contains only current academic year records. When a new academic year arrives, I plan to create a new query for the form to feed from. i.e., "hiding" past academic year records on the form in datasheet view.
View 1 Replies
View Related
Dec 26, 2007
I am re-designing a database for 2008 and trying to eliminate my Make Table Queries as I have found them to be somewhat consistant over the last year, particularily when the users do not open the database on a given date. It seems there should be a simple way to accomplish what I want but I am struggling and need some assistance.
I have attached a sample of a few tables from my database, Open Cases, Closed Cases, and Date Today. The Open and Closed tables change daily due to a Corporate download and contain several date fields which have different meanings. As new cases are opened, they go on the open table, and as an open case is closed, it moves to the closed table. The tbl_Date Today is pre-populated with dates of working days only. I have a query called "Count Of Shelf Comb" that counts the number of open cases as of today, which in truth is for all activity through the previous business day. What I want is to have a query that will show each date on the tbl_date today as well has what the total count of open cases was for that date......a permanent history of the amounts.
How can I accomplish this without using a "Make Table Query".
View 2 Replies
View Related
Nov 12, 2013
How to set up a trimester query instead of a quarter? DO I need to do it in VBA or can I do it as a criteria?
I am trying to query historical data into previous year trimesters. Jan-Apr, May-Aug, and Sept-Dec.
View 2 Replies
View Related
Jan 2, 2007
I need help
I created a tblcustomer/ tbljobs database for a charitable handyman service to record customer's details their multiple jobs and handyman. This worked fine until new reporting system was requested. and data protection issues were raised.
In order to differentiate between current active customers and old inactive customers in the database I used to flag in/active customers and this was okay.
Now I have been asked to remove personal identifying information from old customer records but still allow the customer id,sex,age,joindate,local authority and job types,dates,handyman,timetaken etc. to be analysed for regular reports.
I am wondering about using a history table updated by query that would keep all non identifiable active and inactive customer/job records used for reports seperate from the customer table used by the receptionist to book jobs and find customer info.
I could then use the history table to create reports on service use etc.
Can anybody tell me how to set this up. I have tried several ways but run into trouble when a deceased client is deleted from the active customer table I cannot get the history table to hold on to the info.
Paul the handyman
View 2 Replies
View Related
May 29, 2007
I have written a query to calculate how many hours we have worked for our clients. This has a number of sub-queries which sum to make different columns in the main query ie: Hours invoiced so far, Hours to be invoiced, Hours remaining from their allocation, etc.
I am refreshing the queries due to a design change and now have a question..
Which is the better design:
To have those sub-queries with selection criteria from a join to the same table in each (to filter out records at a lower level)
OR
To have that same selection criteria and join just once in the main query? (which of course means its processing many more records but the join to the selection criteria is specified once)
answers on a postcard please..
View 3 Replies
View Related
Jul 13, 2006
please see the example attached, it is a very basic search, double clicking on the return number opens that record.
what i would like to do is show the account name and date is the same box.
below is the code that i use. can someone please someone help me incorporate something into it?
rivate Sub cmdSearch_Click()
On Error GoTo Err_cmdSearch_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "frmSearchReturn"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_cmdSearch_Click:
Exit Sub
Option Compare Database
Option Explicit
Private Sub List2_DblClick(Cancel As Integer)
Dim rs As Object
DoCmd.OpenForm "frmquery"
Set rs = Forms!frmquery.Recordset.Clone
rs.FindFirst "[RETURN NUMBER] = " & Str(Nz(Me![List2], 0))
If Not rs.EOF Then Forms!frmquery.Bookmark = rs.Bookmark
DoCmd.Close acForm, Me.Name
End Sub
Private Sub TxtSearch_Change()
Dim vSearchString As String
vSearchString = Me.TxtSearch.Text
'Me.txtSearch2.Value = vSearchString
'Me.List2.Requery
'Err_cmdSearch_Click:
End Sub
View 14 Replies
View Related
Mar 20, 2013
I have a table with with records that need to be captured for current and historical reporting. This is my table:
[Incident] [planned_end_date] [Report_Date}
1234 3/8/13 2/28/13
1234 3/8/13 3/1/13
1234 3/10/13 3/2/13
Then, on the next report dated 3/3/13 the incident may not be on the report because it is closed.
I need to be able to report on a count of incidents that meet different criteria at any point in time. I first made [Incident] and [planned_end_date] the PK but then when the [planned_end_date] changed it wouldn't be imported. If I have no PK all records will be imported and I would have the data I need but I think the table will grow too quickly (40 new records per day).
View 2 Replies
View Related
Nov 11, 2012
We are collecting data from client files that have multiple dates (start_date, event1_date, event2_date, end_date.) For client protection purposes, we are absolutely not allowed to leave the facility with the actual dates. However, we want to know how many days have passed between each event. I thought about having the data collectors enter each date, have a calculated field store the time between dates, and then have the actual dates cleared when the record is saved or when the person moves to the next record.
View 14 Replies
View Related
Apr 12, 2006
Hi
I am creating a contact management database.
I have set it up and now need to create an invoice section. An invoice needs to be issued every month and is worked out on a percentage of works complete. For example in one job there may be 10 items of work and for 8 of these iems 25% of the work is complete and the other 2 no work has started.
Therefore my invoice needs to be able to calculate 25% of the value of the 8 items and work out a total price to be invoiced. Each time an invoice is created I need to be able to store the invoice value and the percent value of each item complete.
Does any one have any ideas as to a good way of doing this. That is if you can undersatnd what I am asking for. Thanks for any help.
View 2 Replies
View Related
Jun 30, 2005
I have a handful of misc. data that is unique an really doesn't fit anywhere... I need it to be easily updateable, as it will and needs to change from time to time, What should I do with it?
Some of the data is a "Common Footer" that prints on ALL reports and DOES change periodically. I decided to create a common footer table with a single value and can access it from all of my reports... it works great!
However, I now have a bunch of other misc. data that I need to store, like the "Working Year" (I am going to use the field to dictate which year of info to pull the data from) "Common Header", etc. Additionally, I am considering storing formatting data such as font size (still considering this).
So with all this explained, to sum it all up, what is the best method for handling all of this misc. data? I didn't think creating a separate table for each piece was the best idea.
Thanks for your suggestions!
View 1 Replies
View Related
Dec 8, 2006
I created a report database that rely's on both default data and user entered data. Unfortunately the default data is going to be different for each office and needs to be easily updated as needed. So I created a "default data table" and named it DefaultData_tbl; and has these field names in it:
Office
Phone
Address
Fax
The personnel Main form is run from the Main_tbl with the exception of the items above (which reside on the DefaultData_tbl). This default data then needs to be automatically applied into the Main_tbl, via the Main form, which has Main_tbl as it's data source. Then the user does not have to keep filling in these textboxes for each personnel entry (unless it is different for a particular reason; which they should be able to change as needed and then automatically revert back to the DefaultData_tbl for any future personnel inputs). A personnel report (to file in their personnel records) is printed and will also need to pull from this table the items listed above (unless it is changed by the user for that one person they were entering in). The report name is NIPRNet_rpt.
For instance:
Say the Office is "Marketing"...
Everywhere on the reports, tables and forms that asks for the office should automatically put "Marketing" in the spot.
Now, if I get someone who is working in Recieving today, I should be able to update those office boxes with "Receiving" (just this one time) which will also have to be updated on the Main_tbl and NIPRNet_rpt (but should NOT update the DefaultData_tbl).
Then it should automatically revert back to "Marketing" when I pull up a new user
Putting this information in the default data under properties works fine, but I am sending this out to all the offices and want them to be able to easily enter in their particular default data. I don't want to have to create 30 databases all with default data set in them already. Plus, if something changes, like their phone number, I want them to be able to update this in their default data form and it be updated for future use.
I tried putting this in the Office textbox on the Entry Form:
=[Tables]![DefaultData_tbl]![Office]
All I get in the textbox is "Name?"
I would make it a Label instead of a Textbox to associate it, but the user has to have the ability to easily change this default data inside the form as they are filling it out. This updated data is also needed to update the Main_tbl and the NIPRNet_rpt.
I am racking my brain trying to figure out what I am missing here. The DefaultData_tbl will not have more than one record in it; as all it is doing is storing the "initial setup" default data to be used in reports and forms. Anybody know what else I can try to get this to work?
View 1 Replies
View Related
Apr 19, 2005
Anyone know an efficient way of setting the value of a textbox to the result of an sql query?
I am using the following, but it seems to be slow when populating a large form:
Make.RowSource = "SELECT BarcodeDATA.Make FROM (Customers RIGHT JOIN CustomerSales ON Customers.CustomerID = CustomerSales.CustomerID) LEFT JOIN BarcodeDATA ON CustomerSales.ItemNum = BarcodeDATA.ItemNum WHERE (((CustomerSales.ItemNum)=[Forms]![FormCheckConsignmentStatus]![ItemNum])); "
Make.Requery
Make.Value = Make.Column(0, 0)
Let me know if there is a better way to do this.
View 1 Replies
View Related
Mar 11, 2006
Sorry if this is an elementary question, but here goes.
What I want to do is have Access run a query based on the user name "taken from a login screen". That query will return some values such as what team the Supervisor is responsible for, what days off his team has etc...
This information will be used to display all other queries that particular sup runs. When another sup signs in obviously the results will be different
And onto the problem
I have the query running and displaying the result in a datasheet view. I created this to see if the queries work. Now what I would like is to do away with this query (it pops up at startup) and have access save the user name in memory instead of running this query. I also need to figure out how to reference this "user name" piece of data, that will be in memory on the queries.
would appreciate any help you can give on this topic. I have been trying to solve this issue for a loooooong time.
thanks again,
Ricky
View 2 Replies
View Related
Jul 28, 2005
I would like to know if I can control what field the check box enters the -1 value in my record depending on a value from another field in that record.
In my table called workbook I have fields called, phone type which is a text field, wall and wm entry which are both yes/no fields. I want to put one check box on my form to check when a wall mount is needed for the device. The thing is there are two different wall mount sizes. So I need to check the phone type field on my form, if the value is ENTRY then I need to have it enter -1 in the WM Entry field. If the field anything other than ENTRY then the -1 value should go in the WALL field.
Can this be doen and how do I code it?
Thanks in advance
View 4 Replies
View Related
Apr 23, 2014
I'm trying to use a form to store some usefull data on my database.
I'm using the DefaultValue property of the TextBoxes in this code:
Code:
Sub Comando17_Click()
Testo4.DefaultValue = """sasso"""
Testo6.DefaultValue = """sdr"""
Testo0.DefaultValue = Testo0.Value
DoCmd.Save
End Sub
Comando17 is the name of the button to run the macro
Testo4, Testo6 and Testo0 are the names of my TextBoxes
sasso and sdr are the values I want to set as Default
When I run this macro it changes the DefaultValue property on VBA local variables and the Value property, but the DefaultValue on the form structure remains unchanged.
View 7 Replies
View Related
Mar 4, 2014
I'm having some trouble getting my information that I input on my form to store in my correct table. I will attach my DB so you can take a look at what I have thus far.
Here is what I am wanting to do:
I have TblEmployee, TblEquipment and TblJunction and FrmTracking and FrmUpdate
I input the bulk of my information thru FrmTracking, my trouble is I can not seem to get the information that I input in my FrmTracking to store in the correct table. I can get the information to store in TblEmployee, however the information that I want to be stored in TblEquipment will not store in there.
View 14 Replies
View Related
Nov 10, 2013
I am trying to add an attendance records to my database but cannot figure out how best to do it..I already have a 'children' table were all the kids info is stored and have created a 'roll' table.
i want to be able to open a form and search first and/or last name from the 'Children' table, then be able to save both first and last names and the date into the 'Roll' table. (then open reports etc later based on dates)how to pull data from one table and store it in another.
View 3 Replies
View Related
Oct 10, 2012
I have 2 tables one, Contacts, primary key ContactID this table contains names, addresses etc and one group called Form primary key Form ID, foreign Key Contact ID. I want to store the related contact ID in my form but display firstname ad surname from Contaacts list. This works fine when I am selecting name. List box shows 2 columns with correct data but when I recall the form after making other entries it only displays the firstname. The correct ContactID is stored. Why does this happen.
If I can get this working I would like to concatenate the Firstname and surname to make it more readable but don't know where to begin.
View 3 Replies
View Related
Oct 15, 2006
Hello,
The title says it. I want to store 500KB text data into a memo field. How can I do that?
Someone told me there is no limit on the size of a memo field, up to the maximum for a .mdb file of 2GB!!!
Your help would be greatly appeciated.
View 9 Replies
View Related