Archive Records
By Richard Rost
3 years ago
Archiving Old Data in your Microsoft Access Database
In this Microsoft Access tutorial, I will show you how to archive old records to a backup table. We'll use an append query and a delete query to move them.
Iris in Garland, Texas (a Platinum Member) says: I've split my database, and I have contacts in a file all on their own, but I've got a ton of them and I'm approaching the 2 GB limit on file size. I don't want to delete them, but I don't know what to do here. Help.
Members
Members will learn how to detect if a customer has archived contacts when you open up the contact form, and we'll make a button to switch back and forth between them.
Silver Members and up get access to view Extended Cut videos, when available. Gold Members can download the files from class plus get access to the Code Vault. If you're not a member, Join Today!
Pre-Requisites
Links
Recommended Course
Keywords
access 2016, access 2019, access 2021, access 365, microsoft access, ms access, ms access tutorial, #msaccess, #microsoftaccess, #help, #howto, #tutorial, #learn, #lesson, #training, #database, Archive Access data, How do I archive records in Access database, Where should I archive my data, Create an archive in Microsoft Access, Append, Delete, Use Access queries to archive old data, Move Records to Another Table, Best practices for archiving old records
Transcript
Welcome to another TechHelp video brought to you by AccessLearningZone.com. I am your instructor, Richard Rost.
In today's video, we're going to talk about archiving records. I'm going to show you how to archive old data in your Microsoft Access Database.
Today's question comes from Iris in Garland, Texas, one of my platinum members. Iris says, I've split my database and I have contacts and they file all on their own, but I've got a ton of them and I'm approaching the two gigabyte limit on file size. I don't want to delete them, but I don't know what to do here. Help. It's not so much a question as it is a call for help.
First, I've got to say, Iris, if you've got two gigabytes of contacts, you've got a lot of contacts. There's a lot of information in there. Two gigabytes is hard to do. I've been working with Access for nearly 30 years, and I've rarely come across a database that's got two gigabytes of information if that's only text. Are you sure you're not storing pictures or attachments or other things in there? Don't do that.
But, assuming that's valid, you have lots of text. You might have a notes field with tons of notes in it. I get it. What you can do is archive that data by copying older records to a different database file.
So in a nutshell, here are the steps. First, split your database. You've already done that, so you're good. I would put your contacts by themselves in their own ACCDB file, which it sounds like you've already done.
Step two, we're going to create another database file, another ACCDB file just for the archive records. If we take all the old ones and move them there, that'll free up a lot of space in your primary database. Then we're going to use an append query to copy the old records to the new archive table. We'll use a delete query to remove them from the original database, and then we'll compact both databases, and you should get a lot of space back.
Now you're going to have two tables for your contacts: one for the active contacts and one for the older contacts. You can either switch back and forth between them or use a union query to view them altogether. I'm going to walk you through most of this in a few minutes, but first, let's talk about some prerequisites.
If you don't know how to split your database or what that even means, go watch this video. Basically, an Access database can consist of a front end and one or more back end tables that have your data in them. This is essential for what we're going to do today.
You should know how to get a value from an open form. We're going to use that for the date at which we're going to archive old records before. So you should know this. Go watch that video.
Of course, you're going to have to know how to use append queries to add records to a table and delete queries to delete them from a table.
Now you don't have to use VBA to do this. You could do it by manually running the queries yourself, but with just a couple of lines of VB code, you can automate the process and make it one click of a button. If you want to learn a little VBA and you haven't done any programming yet, go watch this video. It's about 20 minutes long. I'll teach you everything you need to know. Don't be scared of VBA. It's super simple, as you'll see in just a few minutes.
And if you are going to use VBA, I like to give the user a little "Are you sure?" prompt. Are you really sure you want to archive these contacts? Yes or no? Go watch this video too. I'm going to show you how to do it in just two minutes.
I made a folder on my desktop for my database. This simulates your database folder. Here, I've got a copy of my TechHelp free template. This is a free database. You can go grab a copy from my website if you want to. You'll find links down below.
Just so we don't get confused, I'm going to rename this as the main database file. I'm going to make a copy of that as well. Copy, paste. I'm going to call the copy the archive database so we're clear as to which one is which.
Now let's go into the archive database. I'm going to close this, and we are going to delete everything from this database file except the contact table, because that's where our archived records are going to go.
I'm going to click on customer, scroll to the bottom, click on the last item, hit delete. Are you sure? Yep. All right, everything's gone out of here except the contact table. I'm going to rename this. Where are you? Rename. We're going to call it contact archive T.
Let's open this guy up and delete all the records. That's just a copy of what's already in the other database. We're going to move stuff over here in just a minute.
Now, this next step is optional, but I like to go into design view. I'm going to make it so that this contact ID is not a primary key, and it's not an autonumber. So turn off the primary key and switch autonumber just to regular number. Where are you? Number. All right, save it, close it, and then reopen it.
If you add new records in here, you'll see you don't get an autonumber. Why do I do that? Well, if you archive a bunch of records - let's say you archive all the records - and then you compact your primary database, you're going to get those autonumbers back. That happens when you compact an empty table.
So now if you go to archive those records again that have duplicate autonumbers, you won't be able to add them to this table because you'll have duplicate primary keys. They're not necessary in this table because contacts don't have any child records. If you're doing something like orders where the orders have order details, then you can't really do that, so you have to be more careful. But for this, that's how I like to do it.
Now, we don't have to worry about duplicate contact IDs. All right, so close that. One more thing I'm going to do in here is go into File, then Options. I'm just going to turn off my startup form because we got rid of it. Now, if I open up this back end database again, it won't bother me with that main menu.
All right, so this guy is all prepped and ready. Close that down.
Let's open up the main database now. Here's the main database, and let's link in that contact archive table. Go to External Data, New Data Source, From Database, Access. We're going to click Link to the Data Source. Go to Browse. Browse to my desktop. Here's my database folder, and there's my archive database. Hit Open. Hit OK. Pick the contact archive T, hit OK. There it is right there. There's my linked table.
Now, if you're going to be archiving records as of a date, or even if not, I strongly recommend you use a datetime to do this. For example, we're going to be archiving old contacts, so let's take a look at our contacts and see what we're dealing with here.
Let me sort this by date. We have 2021, 2022. It's currently November of 2022, so let's say I want to archive everything that is older than a year. All of these records here should get archived.
I'm going to specify that date here on the form. We'll call this the archive date. We'll take this text box here and rename it to archive date. Get rid of the control source. I don't want a control source in there, because if I set an equal date or something in there, the user can't change it. You can go to Data and set the default value to =Date()-365, roughly one year. It doesn't have to be exact.
Now, that's the default option; the user can change it if they want to. Save it, close it, open it back up again, and there we go.
I will explain why it's important to have that date field there at the end of the video. But for now, just use that date field. Trust me.
Now we're going to make an append query to copy the records that are older than that date to the archive table. Go to Create, Query Design. Don't need that. We're going to switch this over to an Append Query. What table are we appending into? The contact archive. Hit OK.
I'm going to bring in the contact table and then close the Add Tables pane. Unfortunately, since we're going to be using a criteria, we have to bring over the fields individually. We can't use the star. Yes, I know this is dumb, but that's the way it's built. So bring over everything.
And before you experts start complaining, yes, it's better to do this straight in SQL if you know how, but I'm trying to keep this at a lower level for everybody. If you want to learn how to write this in straight SQL in your VBA code, I cover that in my SQL seminar. I'll put a link down below. You'll just have to be careful if you add any fields in the future to your contact table. You'll not only have to add them to the archive table, but also have to add them to this query. Keep that in mind.
Now for the contact date, I want a criteria right there. I'm going to zoom in so you can see it better. That should be less than or less than or equal to, whichever you want, Forms!MainMenuF!ArchiveDate (using the syntax for referencing the form and field that we created). I'm going to copy this because we're going to need it in a few minutes for the delete query.
Hit OK.
If you want to preview without actually doing it, click this button here to go to datasheet view. That will give you a preview of what records will be copied, but it doesn't actually copy them because you're not running the query.
So that looks good. Those are all records that are older than that date. Go back to design view. Notice if you look in your archive table, nothing moved. We didn't actually run the query.
Let's save this guy. This is going to be my contact append Q. That's my append query.
If you want to go ahead and run it now, go ahead, give it a run. Click Run once. The warning's turned off, so I don't see any "You're about to append 5 records," but I don't see any of that stuff. I have another video on how to do that, pretty sure in my blank database video. But if you go look at your contact archive now, there are those records.
So that's working. Let's delete them, because we haven't deleted them from the primary table yet. This is part one, the append query. Now we're going to make part two. Now that we've copied them, we can delete the same set of records. That's another reason why I wanted to have that date there, because both queries are pulling off that date. There's more, though. It's coming. I'll tell you why later.
Go to Create, Query Design. Go to Delete Query. Go to Tables, bring in the contact table. Close that. Now, delete queries are a little easier because you only have to bring in the field or fields that have the criteria in them.
We're going to bring in the contact date. For the criteria, paste in the criteria that we copied from the other one. There it is. Take a look at it (Shift+F2). It looks right.
Once again, if you want to preview these records, just click Datasheet view. It'll just show you that field, but it gives you an idea.
Go back to design view. Don't run it this time because we've got to copy them first. If we run it now, it'll delete the records out of the original table.
Save. ContactDeleteQ.
Now, like I said at the beginning of the video, if you want to do this manually and you don't want to bother with VBA or you like writing macros or whatever, you can just run this and then run that manually, and you're done.
If this is something that you plan on doing, maybe once a year or once every couple of months, sure, do it manually. But if you want to join the cool kids and make a button that does that automatically with one click, here we go.
Are you ready? It's super simple. You could literally do this with two lines of code, but I'm going to embellish it just a little bit.
Let's borrow this Hello World button that we don't use for anything else. We'll call this Archive Contacts. Right-click and go to Properties. We're going to give the button a name first - ArchiveContactButton. Now we're going to right-click and fill the event that opens up the code builder, which opened on my other screen. Let me copy it over here, slide it on up.
Here I am in the ArchiveContactButton_Click. If you're curious, the HelloWorldButton_Click is still down there. Let's delete it. If you rename a button that has code in it, the code does not get renamed.
All you really need to run these queries one after the other are two lines. Are you ready? DoCmd.OpenQuery "ContactAppendQ" DoCmd.OpenQuery "ContactDeleteQ"
That's it. You're done. You just made that button code.
But if you want to make it a little more user-friendly, I would at least put a message box "Done" at the end so the user knows something happened, especially if you've got warning messages turned off.
If you don't want to leave warning messages off for your entire database, you can turn them off right here by saying: DoCmd.SetWarnings False
That turns off those warning messages. But don't forget to turn them back on again: DoCmd.SetWarnings True
So you don't have to see the "Access is about to append 15 records," and then "Access is about to delete 15 records." You can skip that by just putting those two commands there.
I like to leave my warnings off at a system level, but if you're a beginner and just getting into Access, you might not want to do that so you are aware of what's about to happen.
For you veterans, just leave it off.
As I mentioned at the top of the video, I'm going to put one more line of code in here before running something like this that's potentially going to delete records. I like to give the user an "Are you sure?" prompt.
If MsgBox("Are you sure?", vbYesNoCancel + vbExclamation, "Archive Contacts") <> vbYes Then Exit Sub
That'll pop up a message box and get the response. If they respond with anything other than vbYes, then exit sub. I cover how to do that in more detail in my message box video that I mentioned at the top of the class.
I'm going to split this onto two lines; it's kind of long. We're going to put in the line continuation character there and do one of those jobs.
So really it's two lines of code, but make it a little more user-friendly, make it a little fancy, give some embellishments to it.
So we're all done. Save it, close this, close this. Save changes? Yes.
Let's take a peek at our tables. Contact table's got everything in it. Contact archive's got nothing in it. Go back to the main menu.
Now it's time to click the Archive Contacts button. Click. Are you sure? Yep. And then "Done." It happens really fast.
Let's go check the tables. ContactT - nothing in there before November of 2021. ArchiveT - there they are, all the older stuff in 2020 and before November of 2021. That's the new record; ignore that one.
At this point, you're going to want to compact both databases, especially this one. Database Tools, Compact and Repair. That just takes a second for me. If you've got a big database, a two gigabyte database, when you compact that, that's going to take a minute, especially if you're compacting over a network.
But you'll get back all that extra space for the records that you just archived to the other database. Archive that one too while you're at it.
Why did I insist earlier that it's important to use this date text box on the main menu? Basically, you want to make sure you have the exact same datetime in both of these queries. You don't want to append one set of data and then delete another one.
If you, for example, hard code that in there like =Date()-365 in both of these, and let's say, hypothetically, you run it close to midnight, the append query runs, and if you're over a network or running a big database, it could take a few minutes to run that append query. Now midnight passes, and now your delete query deletes a whole day's worth of extra records. Or if you use Now in there and records are added in that few minutes, that's why I say use an outside variable out here like this field, or you could use a prompt in your VBA to get that date.
I actually had a situation where something similar happened to me. I wasn't archiving old data, but when I collect new member signups on my website, like people for the mailing list, I get their email addresses and stuff. It collects it on my website and then my local Access database, whenever I'm ready to send out a newsletter or something, I pull all those emails down using a connection over the web to my local database.
Well, I had a simple append query, which was just to append all of the records from the website down to my local database. When that's done, delete all of the records in that website database.
Well, you can probably imagine what happened. It was over the network, over the internet in fact, so it was pretty slow. The append query took two to three minutes sometimes if there were a lot of emails in there. When that was finished, the delete query deletes them all. But if anybody signed up in that two or three minutes when the append query was running, they weren't getting copied because the append query pretty much looks at the records at the moment it starts.
So even if you're copying all of the records, you want to make sure that you specify a date range and use the exact same date for both queries, even if that's now set "Now" in that text box or in a variable somewhere, and have both queries look at that. Minutes could elapse between the time the append query starts and the delete query starts.
I wanted to share that with you because I had that problem a couple of years ago. I couldn't figure out why I was missing records.
There's my little personal story.
Now, you've got your customer form, and your newer contacts are all in here. If I go to, like, Jimmy Kirk there, his contact's in there. But I noticed that mine, contact, there's no customer one in here. I had two contacts. They're gone now. If I go to the contact archive, they're in there. There they are, they're older.
But how do I inform the user that there are contacts for this customer, they're just in the other table? We're going to cover that in the extended cut for the members.
What we're going to do is, when the contact form opens up, it's going to do a quick search with a DLookup and say, "Hey, this customer has archived contacts." It's going to say, "There are records, but they're archived. Do you want to view them?" We'll let the user click on this bar and then that'll switch blue and it'll say, "Viewing archived contacts," and you can click to go back to this if you want to, and there's your archived contacts.
You could also use a union query to pull all of those together in one set if you want to make a report. I do have a separate video you can go watch on union queries. That's good for reporting. But the record set that you get from the union query is read-only. You can't make changes to it, so I wouldn't use that in my contact form. You want users to still be able to edit the contacts. That's why I like this solution. We let them know that there are older archived records, and they can click to view them and edit them if they want to.
But it's not a union query, so this is still read/write. You can still make changes and add new records.
That's what's covered in the extended cut for the members. Silver members and up get access to all of the extended cut videos. There are lots of them. There are well over 300 of them by now. Gold members can download copies of these databases that I make in these videos, and membership is very inexpensive. What are you waiting for? Join today.
Also, if you like stuff like this, I cover more about it, like archiving old customers and contacts together, in my Access Expert Level 15 class. I'll put a link to this down below as well. The full courses basically go in a lot more of a progressive nature so that you learn this, then you learn that, then you learn this.
I know with these TechHelp videos, I make you jump around a lot to a bunch of different videos because they're not in any particular order. But my course is, so you know, Expert Level 15 is followed by 16, followed by 17, and you learn stuff in the regular order. I spend a lot more time going over stuff like this.
That is your TechHelp video for today. I hope you learned something, and I'll see you next time.
Quiz
Q1. What is the primary reason for archiving records in an Access database as presented in this video? A. To meet regulatory compliance requirements B. To prevent unauthorized access to data C. To free up space when approaching the 2GB file size limit D. To improve the visual appearance of forms
Q2. What is the FIRST step you should take before starting to archive records according to the video? A. Backup the database B. Split the database into front end and back end C. Create a union query D. Change all tables to use autonumber fields
Q3. What type of query is used to copy records from the main table to the archive table? A. Make-table query B. Append query C. Update query D. Cross-tab query
Q4. After running the append query to copy records to the archive table, what is the next recommended step? A. Immediately compact the database B. Delete the copied records from the original table C. Close Access and reopen it D. Create a report of the archived data
Q5. What is an important reason to use a form field (such as ArchiveDate) for specifying the archive date in your queries? A. It allows using default values that cannot be changed B. It synchronizes the date between append and delete queries to prevent data loss C. It ensures the archive process runs faster D. It automatically creates backup copies
Q6. Why should the ContactID field in the archive table NOT be a primary key or autonumber after archiving? A. To allow duplicate records across multiple tables B. To avoid errors due to duplicate primary keys if records are re-archived and autonumbers reset C. So the archive table can be used as a backup D. To make all fields editable in the archive table
Q7. What is recommended after deleting records from the original table to maximize space savings? A. Reindex all tables B. Export tables to Excel C. Compact and repair the databases D. Re-run the append query
Q8. What advantage does automating the archive process with VBA offer compared to running queries manually? A. Increases file security B. Reduces the chance of skipping steps and speeds up the process C. Makes the database compatible with web apps D. Allows parallel processing of multiple tables
Q9. Which VBA command is used to run a query from a button click event? A. DoCmd.RunMacro B. DoCmd.OpenForm C. DoCmd.OpenQuery D. DoCmd.ExecuteSQL
Q10. Why is it suggested to prompt users with an "Are you sure?" message before proceeding with the archive? A. To verify they saved their work B. To confirm that they want to perform a potentially destructive action C. To collect user feedback D. To improve load times
Q11. Why is a union query mentioned, and what is its major limitation regarding editing data? A. It combines tables but does not allow any searching B. It can be used for reporting but resulting recordsets are read-only C. It creates a backup of two tables D. It improves performance but disables sorting
Q12. If you use =Date()-365 directly in both queries (append and delete), what problem could potentially occur? A. No records would get archived B. The database would become corrupted C. Records could be missed or extra records could be deleted if the date changes between query runs D. All records would be permanently lost
Q13. What is the purpose of turning off warnings using DoCmd.SetWarnings False in the VBA code? A. To troubleshoot the queries B. To prevent the user from receiving repetitive warning messages during the process C. To enforce data integrity D. To display a completion message
Q14. What does compacting the database do after records have been archived and deleted? A. Merges all data into a single table B. Reduces the database file size by reclaiming unused space C. Encrypts the database D. Updates table relationships
Q15. In what scenario does the presenter say removing the primary key/autonumber is NOT a good idea? A. When archiving contacts tables B. When archiving tables that do not have child records C. When archiving tables with child records, such as orders with order details D. When removing all forms from the database
Answers: 1-C; 2-B; 3-B; 4-B; 5-B; 6-B; 7-C; 8-B; 9-C; 10-B; 11-B; 12-C; 13-B; 14-B; 15-C
DISCLAIMER: Quiz questions are AI generated. If you find any that are wrong, don't make sense, or aren't related to the video topic at hand, then please post a comment and let me know. Thanks.
Summary
Today's video from Access Learning Zone focuses on the topic of archiving records in Microsoft Access. I am your instructor, Richard Rost.
The central issue in this lesson comes from a viewer who has accumulated such a large number of records, specifically contacts, in her split Access database that she is approaching the two gigabyte file size limit. She wants to avoid deleting data but needs a solution to manage her growing database size.
First, let me address the scale of this situation. Having a contacts table reaching two gigabytes is quite rare, especially if you are storing only text data. Typically, hitting this limit is the result of including images, attachments, or similar large objects in your tables, which I generally advise against. However, for the sake of this tutorial, I'll assume the bulk of the data is legitimate text, possibly large notes fields or similar content.
To alleviate space problems without deleting important records, archiving is an excellent approach. The core idea is to move older records from your main database file into a separate archive file. Here's an overview of how to proceed:
1. Ensure your database is already split into a front end and one or more backend files. The backend holds the tables with your data, and you have already completed this step if your contacts are in their own separate file.
2. Create a new Access database file to serve as your archive. You will migrate older records from your main contacts table into this archive. Using an append query, you can copy the targeted records to the new archive table.
3. Follow up by creating a delete query to remove the same archived records from the original contacts table in your main database.
4. Compact and repair both database files to reclaim the space from the deleted records. After this process, you should see a significant reduction in your database size.
Now, you will have two tables containing contacts: one for active (current) records and another for archived (older) records. You can view and work with them separately. If you need to display all records together, a union query can show both sets, although keep in mind that union queries are read-only and not ideal for editing data directly.
Before continuing, it is important to be familiar with a few prerequisites. You should understand the concept of splitting an Access database, how to reference values on open forms (since you will be using forms to select the archive cutoff date), as well as how to create append and delete queries. While VBA is not strictly necessary, automating the process with a small amount of code can make the workflow much smoother—just a couple of lines can do the trick. If you want to start using VBA, I have a video that covers the essentials. I also recommend learning to include a confirmation prompt so the user can confirm actions that modify or permanently remove records.
For demonstration, I used a folder on my desktop to organize the database files. I began by making a copy of the main database to serve as the archive file. Inside this new archive file, I deleted everything except the contacts table. I then renamed this table appropriately, for example to "ContactArchiveT," and cleared out its records since it's simply a structural copy at this stage.
One step I like to take in the archive table is to remove the primary key and change the ContactID field from an autonumber to a regular number type. This avoids conflicts with duplicate IDs in cases where all records are archived and the main table's autonumber sequence resets. This isn't usually an issue for standalone contacts, but you need to be aware if your data model includes relationships, such as orders with order detail tables.
After preparing the archive file, I linked the archive table back into the main database. This allows queries in the main database to move records between the main and archive tables.
Archival is usually performed based on a date, such as archiving contacts older than a year. I suggest adding an "Archive Date" field to your main menu form. This is simply an unbound textbox with a default value, such as Date()-365 for records older than one year. Using a form control for the date ensures both the append and delete queries use the exact same reference, which helps prevent inconsistencies if the operation straddles a date boundary, such as midnight.
Next, build an append query to copy records older than the specified archive date into the archive table. Because Access requires you to specify each field individually when using criteria, you'll need to add all relevant fields rather than selecting everything at once. The critical criterion is that the contact's date must be less than or equal to the value from the Archive Date field on your main form.
Once the append query is set, you can preview the results before running it by switching to datasheet view. When satisfied, save the query. Then, create a matching delete query that uses the same date criterion, targeting the records you have just archived.
Running these two queries in sequence will first copy and then remove the designated records. Both can be performed manually if you prefer, but automating this process with a button and a few lines of VBA simplifies the task, especially if you expect to archive records regularly.
In the VBA code behind the button, you simply open the append query, then the delete query, and optionally display a confirmation message to the user. For a better user experience, you can temporarily suppress warning messages in Access so the user isn't prompted multiple times. It's also good practice to restore warnings afterwards.
For additional safety, include a confirmation prompt so the user must affirmatively agree before records are archived and deleted. This reduces the risk of accidental data loss.
After archiving, be sure to compact and repair both database files to reclaim the space previously occupied by the archived records. This process can take some time with large databases or over a network, but it's an essential step for maintaining database performance.
It's crucial to use the same archive date value in both queries to avoid discrepancies. Hard-coding date criteria can lead to inconsistencies if, for example, the append and delete queries are run seconds or minutes apart and records are added or modified during that window. By storing the date in a form field or variable and referencing it in both queries, you guarantee they operate using the same set of criteria.
I've personally encountered a similar problem when importing email addresses from my website to my local Access database. I learned that if you don't restrict your queries with a shared date variable, records that are created during the process can be missed entirely. Sharing this strategy helps ensure no records are lost inadvertently.
Once archiving is complete, users may notice that older contacts for a given customer are missing from the main table. To address this, in the Extended Cut for members, I will show how to notify users when archived records exist for a customer, how to allow switching between active and archived contact views, and how to edit archived records if necessary. Members will also see how to leverage a union query for reporting purposes, while keeping forms editable by working directly with the tables.
If you are interested in more thorough lessons on archiving, including strategies for archiving customers and their contacts together, you might want to check out my Expert Level 15 Access course where related topics are covered in a step-by-step fashion.
That wraps up the lesson for today. If you want to see a full video tutorial with step-by-step demonstrations of everything discussed here, visit my website at the link below. Live long and prosper, my friends.
Topic List
Archiving old records in Microsoft Access
Creating a separate archive ACCDB file
Copying records to archive using an append query
Deleting archived records using a delete query
Modifying table design to remove primary key and autonumber
Linking archive table into the main database
Using a date field on a form to specify archive cutoff
Referencing form fields in query criteria
Previewing query results before running append/delete
Automating archive process with a VBA button
Suppressing Access warning messages in VBA
Prompting user for confirmation before archiving in VBA
Compacting and repairing databases after archiving
Synchronizing archive and delete queries using a shared date value
Avoiding data loss from query timing issues
Naming and organizing database files for archiving
Setting default value for archive date field on form
|