Thursday, March 5, 2026

How to Create File Folders in Microsoft Access VBA Using the MkDir Statement

Ever open a folder only to find it jam-packed with tens of thousands of invoice PDFs, all jumbled together in one big digital haystack? If that sounds familiar, it's time to let Microsoft Access do the heavy lifting and organize those files for you automatically. No more scrolling endlessly or trying your luck with search - there's a better way!

Let's talk about how to get Microsoft Access to create customer-specific folders for your invoices (or any files, really) instead of dumping everything into a single directory. This is especially helpful if, like Colin from Charleston, you've been exporting invoices for years and now face an overwhelming mess. With just a bit of clever VBA - and the handy MkDir command - Access can automatically keep your folders neat, organized, and easy to navigate.

The first thing you'll need to know is that creating folders from Access uses a simple command called MkDir - which, as the name suggests, stands for "Make Directory." This bit of VBA code allows Access to create new folders on your drive, right when you need them. If you're new to VBA, don't worry; start with any beginner tutorial on Access VBA, and you'll be ready in no time. Plus, keep some basic error handling in your toolbox, so you don't get caught off guard by common issues, like trying to create a folder that already exists.

Picture your workflow: every time an invoice is created from your database, you want Access to save it as a PDF in a folder structure like Invoices > CustomerID. This way, each customer has their own subfolder, and you - and your team - can find files quickly without digging through a mountain of PDFs.

Here's how it works. Before exporting your PDF, instruct Access to check if the "Invoices" folder exists inside your chosen parent directory (say, your database folder or a network share). If not, Access will create it using the MkDir command. Next, Access will create or check for a subfolder within "Invoices" that corresponds to the current customer's ID. Each time you generate a new invoice, Access will ensure this folder structure exists, and then save the PDF right inside the proper customer folder.

Now, here's something important: MkDir isn't picky, but it'll throw an error if you try to create a folder that's already there. That's totally expected, so you can keep your code smooth by telling Access to "resume next" on errors just for those folder-creating lines. If you want to get fancy (or just a bit more robust), check out additional error-handling techniques - or the Dir function - to see if a folder exists first, but for 99.9 percent of cases, a simple setup like this is all you need.

Once the folders are created, your export command points right to the customer's new home in the file system. No more invoice chaos! I always recommend storing file paths in variables if things get complicated; that way, you're not repeating yourself or accidentally missing a backslash somewhere. Also, never forget to refresh your form or commit your data before exporting. You want your invoices to reflect the latest info, not yesterday's news.

This system is scalable. Whether you have a dozen invoices or tens of thousands, Access can handle organizing them - just by tweaking how and where invoices are saved. Want to see more advanced tricks, like checking for missing parent folders, moving existing files into the new structure, or making folders with customer names? That's all possible - just expand your VBA toolkit step by step.

And as always, don't be afraid to experiment. This method works not just for invoices, but for any kind of file you want to manage more efficiently from Access. You're basically turning Access into your own mini document management system. Pretty cool, huh?

If you want to learn about more advanced techniques - like recursive folder creation or file management within Access - check out developer resources and my training videos for those deeper dives. Also, if you're worried about the moral implications of "Tribble Jerky" (yeah, I went there), feel free to share your thoughts in the comments...

So, today you saw how Microsoft Access and a little VBA (MkDir command) can team up to organize your files, keeping your directories tidy and easily searchable. No more endless scrolling or PDF pile-ups!

If you're curious about the step-by-step visuals or want to see exactly how the VBA comes together, check out the video above for a full walkthrough. Feel free to leave a comment below and let us know how you'll put this trick to work in your own database.

Live long and prosper,
RR

Wednesday, March 4, 2026

How To Test If A File Exists In Microsoft Access VBA Using The Dir Function

Ever had your Access database blow up in a flurry of error messages just because it tried to open a file that wasn't there? Yeah, nothing like making your users think their computer's haunted. Today, let's put an end to those surprise meltdowns and learn how to gracefully check if a file exists before trying to open it in Access with VBA. Your users will thank you - and so will your blood pressure.

Picture this: You've got a field in your Customer table that stores the full path of their resume file. Maybe you even have a neat button that, when clicked, opens up that file. But - plot twist - the file sometimes isn't where it's supposed to be. Instead of Access calmly telling you "Hey, file not found," you get blasted with a confusing error no sane person can decipher. There's a way to sanity-check the file's existence before trying to open it, so let's jump right into how that's done in VBA using the handy DIR function.

The magic sauce here is the DIR function. If you're not familiar, think of DIR as the VBA equivalent of the old-school Windows command prompt DIR command. It checks the file system and tells you what's there. In VBA, you feed DIR the path and filename you want to check. If the file exists, DIR returns the filename. If not, you get an empty string. No hype, no drama, just the facts.

Imagine your customer table has a "Resume File" field. Now, we've talked before about why you shouldn't store actual files inside your database (seriously, don't do it), but storing links to files is totally fine. You store the full path and filename as text, like "C:\MyDocuments\ResumeFile.txt". When a user wants to open the file - be it with a button or a double-click event - your code needs to check if that file is actually sitting there before launching your favorite text editor or viewer.

Let's say you use a button called "Open Resume." Traditionally, you might launch the file right away using the Shell function or FollowHyperlink, assuming all is good. But if the file's missing, the user gets an error - sometimes from Access, sometimes from the program you're launching (like Notepad saying "Can't find this file, want to create a new one?"). Not very slick.

Here's what you do: before opening the file, insert the DIR check. If DIR returns an empty string, you know the file's missing. Show a friendly message box to the user and exit the subroutine. If it returns the filename, let the process flow as usual. This is a great way to give your users a nice, user-friendly heads-up instead of leaving them wondering what went wrong.

Don't forget to compile your code often. Trust me - debugging five missed semicolons because you forgot to compile isn't how anyone wants to spend their Friday afternoon. Also, remember that when you paste file paths from Windows Explorer using "Copy as Path," Windows often adds double quotes to the filename. You absolutely must remove them before pasting into your database. Little things like this can trip you up if you're not careful.

Now, you might be thinking, "Why not just use error handling instead of checking first?" Good question! The problem is, with something like Shell launching Notepad, the error doesn't happen inside Access - it happens in Notepad. That means your error handler never gets a shot. Using DIR in advance keeps the process neat and controlled.

If you're curious about more advanced tricks - like looping through every file in a folder with DIR, or why you should never store attachments in your Access tables - there are deeper dives you can explore later. But for the everyday Access user, learning to use DIR as a quick safety check will save you and your users a lot of hassle.

So, next time you set up a file link in Access, take that extra minute to check it with DIR before you open it. It's a simple way to make your databases more user-friendly and less likely to make someone panic when a file is missing.

For those wanting to see the actual VBA code for this (and all the nitty-gritty details of what goes where and why), check out the video embedded above!

Live long and prosper,
RR

Tuesday, March 3, 2026

Access Developer 53: How To Build a Recycle Bin, Batch Import, and Automate Word Docs in Microsoft Access

If you've ever wished you could manage all your important files directly from your Access database - dragging, dropping, organizing, and even batch-importing - without ever leaving Access, you're going to love what comes next. We're diving into the next generation of Access file management that not only keeps things tidy but adds some serious automation muscle. Whether you're an organizational neat freak or a digital pack rat, building a flexible file drop system in Access will save you time, cut down on mistakes, and make your database look about ten times more professional.

To set the scene: in this ongoing project, we've been constructing a complete drag-and-drop file management setup inside Access. This ensures you can safely store, preview, and launch files from within your database, handle a wide range of file types, and even automate interactions with Word and Excel documents. Let's break down how all these moving parts fit together and the new features that take it to the next level.

First up, previous phases of the project focused on laying the foundation: creating core utility functions, allowing safe file and record deletion (even inside tricky loops), and establishing solid automation routines. This means you never have to leave the comfort of your Access app to launch a file, open a folder, or view a web link. We even made it possible to directly interact with Office documents: opening Word or Excel, jumping to specific places in a document or worksheet, and performing searches - all kicked off from Access itself.

With a robust interface in place, the latest improvements focus on making everything bulletproof and even more user-friendly. Professional error handling was introduced so that, if something goes wrong while working with Word or Excel via automation, the program responds gracefully - no more mysterious crashes or disappearing data. This level of polish is what turns a homemade tool into a trustworthy, professional solution.

One of the coolest upgrades is a full-featured recycle bin system. Instead of just deleting records or files - oops, gone forever - you can now send database records to a recycle table and have files moved to the Windows recycle bin. This gives you a safety net. If you ever delete something by accident, you can fish it out and restore it, no questions asked. Accidents happen, but now they don't have to ruin your workday.

Another super-handy feature: a one-click button that creates a brand new Word document for a customer, automatically gives it a smart name, saves it in the right folder, and registers the document to the customer in your database. No more copying templates or manually renaming files - just click, take notes, and you're done. Since Word docs can handle text, images, and much more, it's the perfect catch-all for notes and attachments.

Folder management has also gone pro. With a reusable recursive directory creation function, you can guarantee that all nested folder paths exist before you need them. No need to create one folder at a time. This means if you want to create a complex folder path like "Richard\Desktop\Documents\Clients\ProjectA", you can do it all in one go - Access checks and builds anything missing automatically.

And finally, we've added batch import magic: an import folder button to grab all files from a chosen folder (even screenshots or scans you drop there from different systems) and register them en masse to your Access database. This is perfect for anyone who works across multiple devices or collects documents in batches; now you can get them all into your database, properly linked and organized, with a single click.

All of these enhancements transform Access into a real file management powerhouse. For specific details on the VBA code behind these features, be sure to watch the linked video. If you want to try these tricks for yourself and really supercharge your Access file management, the walk-through will guide you every step of the way.

Got questions, or a neat use case for these new tools? Drop them in the comments. And of course, check out the video above for the full demonstration and code details.

Live long and prosper,
RR

Spam, Scammers, and the Cost of Hustle

I got an email a couple days ago from someone claiming to represent a company called Commercial Cleaning Southwest Florida. Apparently, they were excited about cleaning my "computer training center" on Del Prado here in Cape Coral. That was interesting news to me, since I don't have a training center. My business operates entirely online. The address they referenced is a mailbox. No classrooms. No labs. No dusty keyboards in need of disinfecting.

Example of a spam commercial cleaning offer for a computer training business

Hey, I just wanted to reach out because I noticed that your computer training center is located on Del Prado Blvd S in Cape Coral! I'm sure that keeping your training rooms and labs spotless must be a priority for you and your students, right? I'm asking because we manage a local cleaning business, and we'd love to help you maintain the cleanliness, so that your training environment feels professional and inviting. I'm going to be in your area soon seeing a few other clients. Want me to swing by your computer training center to get a feel of your place and pull together a quote?

Kind regards,
Kayla Munro
Regional Commercial Director
Commercial Cleaning Southwest Florida
I replied. Politely, but directly...

Kayla,

I want to be direct and clear.

While I understand you are trying to generate new business, I have a strict policy when it comes to spam. I do not do business with companies that send unsolicited marketing emails or text messages. If I need a service, I will research vendors myself and make contact on my own terms. I do not appreciate advertisements simply showing up in my inbox.

Additionally, the information in your message is based on incorrect assumptions. The address you referenced is a P.O. box. My business operates 100% online. I do not have classrooms, labs, or any physical training facility that would require cleaning services. That address is tied to a Staples mailbox location. A minimal amount of research would have made that clear before sending spam solicitations.

Spam burns more bridges than it builds. I specifically won't do business with companies that send spam, just like I will never buy anything from a door-to-door salesman, especially once he ignores the no soliciting signs on my lawn.

Please remove my contact information from your marketing list and do not contact me again.
After that, curiosity got the better of me. I looked up the company. It doesn't exist. The person doesn't exist. The domain they emailed from was created last month. In other words, it has all the hallmarks of what we're seeing more and more of these days: fake local "businesses" generating leads through spam, then farming the actual work out to whoever will do it cheapest, whether or not they're licensed or even qualified.

I recently watched a scam-buster on YouTube break down a similar air duct scheme. The playbook is simple. Blast out emails and social posts. Offer a too-good-to-be-true price. Collect payment. Then scramble to find someone, anyone, to do the job. Quality is irrelevant. Once they've got your money, they're gone.

Now here's the bigger issue: Even if this particular email had come from a real cleaning company, I still wouldn't do business with them. Why? Because unsolicited marketing burns trust immediately. If I need a service, I'll research it. I'll look up reviews. I'll make the first move. When someone barges into my inbox based on bad assumptions and zero homework, that's not hustle. That's noise.

Which brings me to the question I'm wrestling with. Should I have replied at all? Was my response too blunt? Or is ignoring them the smarter move?

On one hand, there's something satisfying about calling out lazy spam. On the other hand, responding at all confirms your email address is active. That alone can put you on more lists. Silence might be the more strategic choice. I'm pretty confident in my Gmail spam filter to keep out most of the spam. This one snuck through, but it's pretty good about catching the majority of it.

However, I don't respond at all to text messages, because that for sure when you respond to one, then they know they got a live number and a million more messages come through. I used to have fun with those people because somehow I ended up on a commercial funding texting list and all these companies were sending me unsolicited requests for short money loans like "what kind of position are we looking at?" I used to joke back with them like "how about the position I had your mom in last night?" But then it just made the situation worse. More spam. And no one seemed to care about their mom at all.

The lesson here isn't about cleaning companies. It's about due diligence. Whether you're hiring someone to clean ducts, manage ads, build a website, teach you Access (ehem), or do anything remotely technical, take a few minutes to verify who you're dealing with. Check the domain registration. Look up the business entity. Read real reviews. If the company supposedly "local" has no footprint beyond a freshly minted domain and a Gmail-style blast email, that's a red flag you shouldn't ignore.

There's nothing wrong with earning business. There's everything wrong with pretending to be something you're not. In an age where AI can generate convincing emails in seconds and scammers can spin up fake brands overnight, skepticism isn't cynicism. It's self-defense.

As for me, I'll keep running my very dusty, completely imaginary training center from my very clean, entirely virtual office. (1)

LLAP
RR

(1) Yes my business is 100% online but I don't pretend to be anything else. The whole reason I have a P.O. Box is in case someone needs to mail me something like a check. I don't want folk showing up at my home which has happened before. When I used to live back in Buffalo people would stop by and ask "Hey can I pick up the CD that you're going to mail me? I'm right here in Buffalo." Sometimes they would just show up because my address was on the website. It was quite awkward. So from that point on I used a mailbox for everything.

Monday, March 2, 2026

SQL Server Vs Microsoft Access SQL Differences - T-SQL Basics For Access Users

Ever try copying an SQL query from Access to SQL Server only to run headfirst into a wall of bizarre errors? Maybe something about quotes, or dates, or wildcards? Even if you know SQL pretty well, these little syntax differences can trip up the best of us. Today, let's cut through that confusion and look at the basic SQL quirks that separate Microsoft Access from SQL Server TSQL - so your queries actually run the first time you paste them.

Migrating an Access database to SQL Server isn't just a matter of dragging your tables over and calling it a day. A lot of us have Access databases that have been around for decades, stuffed with forms, reports, and a heap of VBA code - all referencing tables with familiar names like CustomerT. If, after migrating, you suddenly rename that table to DBO_CustomerT, you'd have to update every single query, form, and code reference. Life is just too short for that kind of tedium. So, once you're confident everything transferred correctly, it's completely reasonable to ditch the old table and rename the linked SQL Server table right back to CustomerT. That keeps all your queries and VBA code happy without breaking a sweat.

Now, don't worry if you're the meticulous type who likes keeping those DBO prefixes as reminders you're dealing with SQL Server objects. When I'm building something new and shiny, I like that too. But for migrations, consistency with legacy naming usually wins. Just make sure you always have a solid backup before deleting anything. (Seriously - back up, check your backup, then back it up again.) Also, remember: when you remove a table in Access, you may have to deal with relationship warnings, because Access manages those locally unless you've set them up in SQL Server. Going forward, referential integrity is up to the server; Access is just the front end now.

Alright, on to the real meat: basic SQL differences between Access and SQL Server (TSQL). Biggest thing to remember: strings in Access use double quotes, but TSQL wants single quotes. This trips everyone up. For example, in Access, you'd write WHERE LastName = "Kirk", but in SQL Server it's WHERE LastName = 'Kirk'. Same field, same value, different quotes. And you'll need single quotes for dates in TSQL too, whereas Access wraps dates in pound signs - like #2020-1-1# versus '2020-1-1'.

Wildcards are another classic hang-up. In Access, you use the asterisk (*) for LIKE queries and the question mark (?) as the single-character wildcard. In TSQL, it's percent (%) and underscore (_), respectively. So, LastName LIKE 'K*' in Access becomes LastName LIKE 'K%' in SQL Server. And if you're wondering why Microsoft didn't keep things consistent, remember: Access and SQL Server were designed for totally different purposes and at different times. So we ended up with two dialects, and neither is changing anytime soon.

Boolean fields have their own twist. In Access, you use IsActive = True (or even = -1 if you like living dangerously). In SQL Server, you simply use IsActive = 1 for true, and 0 for false.

What about nulls? Checking for null is another place where syntax can sneak up on you. In Access, you might be used to using an IsNull() function, but in SQL Server, you check directly with IS NULL. So WHERE IsNull(FirstName) in Access becomes WHERE FirstName IS NULL in TSQL. Also, keep in mind that nulls and empty strings are not the same in either system - so be careful if you're porting queries that rely on that difference.

Date functions are another headache. Access lets you use Date() to get the current date (midnight, no time), or Now() for date and time. SQL Server uses GetDate() for both date and time (so it's more like Access's Now). If you want just the date, cast GetDate() as a DATE data type. And yes, there are tons of other date tricks, but start there.

Let's talk about passthrough queries for a second: these let you run TSQL directly from Access, bypassing Access's SQL parser, and executing the query directly on SQL Server. This is huge for performance, especially if you're dealing with tons of data. Normally, if you use Access syntax, Access tries to pull all your records locally, which can be slow and waste a ton of resources. Passthrough queries, on the other hand, let the server do the heavy lifting and just hand you the results. Just remember to set up your ODBC connection string in the query properties so you're not pestered for the DSN every time you run the query.

Some bonus tips (because you'll thank me later): whenever you change table structures in SQL Server (like allowing nulls in a column), be sure to refresh your linked tables in Access. Otherwise, Access won't recognize your design changes and things may break for no apparent reason. And keep in mind: Access is pretty good at translating basic queries into TSQL for server-side execution (what's called query delegation), but as soon as you toss Access-only functions or VBA into the mix, all bets are off - and it's back to dragging all your data across the network.

One last thing: while I'm a big fan of learning SQL the right way, sometimes even the best of us just want to get it done fast. Don't be afraid to use AI tools like ChatGPT to translate your Access SQL into TSQL (or vice versa) if you're stuck. Just use it as a learning tool, not a replacement for understanding whats' going on.

At the end of the day, most of the pain switching from Access to SQL Server comes down to a handful of tiny syntax tweaks with quotes, wildcards, nulls, Booleans, and date handling. Get those right, and you'll avoid 90% of the usual headaches. And if you want all the nitty-gritty code details and live demos, be sure to check out the video embedded above.

Live long and prosper,
RR

Sunday, March 1, 2026

User Experience

One of the interesting challenges of running a website like mine is that I don't use it the same way you do. I upload videos, answer forum questions, fix bugs, and build new courses. What I don't do is sit down and binge watch my own lessons for hours at a time. I don't go through the site as a student. That means there are parts of the user experience that I simply don't feel the way you do.

Website user experience and video volume feature

Over the years, one small but consistent piece of feedback I've received is about video volume. Every time someone pressed play on a new page, the volume jumped back to 100%. If you're watching a lot of videos in a row, that gets annoying fast. For me, I'd click a video once in a while just to make sure it worked, so I never experienced that friction the way regular users did. But once it was pointed out, I realized that's the kind of thing we can and should fix.

So today I did. I added a small bit of JavaScript that saves your preferred volume setting right in your browser. Now, if you set a video's volume to 50%, it should stay there for you across the site. As long as you don't clear your browser data, your volume preference will stick. It's a tiny change, but those little quality of life improvements add up over time.

This is a good reminder that developer experience isn't the same as user experience. And this applies to your own projects too. When you're designing your Access databases or building websites, ask your end users for feedback. A lot of times when I was developing databases for clients, I'd think everything was perfect. I was proud of the layout, the forms, the workflow. Then a few days after installation, the feedback would start coming in. This form isn't what we need. That process doesn't match how we actually work. And that's because I wasn't using it the way my clients were using it.

Keep that in mind when you're building your own systems. Just because it makes sense to you doesn't mean it's ideal for the people who live in it every day. Sometimes the smallest tweaks make the biggest difference.

LLAP
RR

Friday, February 27, 2026

When Combining Query Results Turns Into a Headache in Microsoft Access - QQ #81

Ever felt like a genius while stacking a dozen union queries together, only to discover later you've created a hair-pulling maintenance mess? You're not alone. Combining data in Microsoft Access - especially when you start getting clever with queries - can look fantastic at first and then quietly set you up for major headaches down the road. Today, I'm going to walk you through why some shortcuts look smart at first, where they typically backfire, and how to structure your database sanity for the long run. We'll also hit some other common Access questions straight from the trenches, like forms behaving badly, joins that seem to have a mind of their own, and head-scratchers about imports and data corruption. Let's get into it.

Let's kick off with a classic scenario: you've got a dozen tables, all with the same fields, and at some point, someone says, "Hey, can we just pull all that data together in one report?" The knee-jerk reaction might be to toss together a union query. Sure, it gives you a combined list, and for small datasets or one-off lists, that trick is fine. But when you start adding grouping, sorting, and calculations - especially stacked over 13 tables - things can get hairy. If you find yourself nesting GROUP BY inside union queries, it's really time to pump the brakes.

Here's why: in Access, union queries are great for merging similar datasets - think employees, vendors, and sales reps when you want one big people list. But they're a pain when you need to perform more complex operations. The moment you want to summarize, aggregate, or sort on fields that aren't neatly aligned in every table, you'll start running into reserved word collisions and cryptic syntax errors. "Name," "Type," "ID" - these innocent-sounding labels can make your query explode and the error messages are never as helpful as they pretend to be. You'll see the notorious "not part of an aggregate function" error as soon as you try grouping by anything that isn't handled right.

What's the sane solution? Staging tables. Instead of running wacky union gymnastics every time, just create a temporary (or staging) table. Append data from all your individual sources into that one spot, then run your summaries and sorts as needed. Maintenance becomes so much easier. Need to add table number 14? Just append that too - zero stress. Not only does this approach cut down on bugs, it's also easier for future you (or someone else) to understand, troubleshoot, and build upon. If you want to see all the nitty-gritty on how to set up such staging tables, check out the video above for the walkthrough.

Now, let's talk quirky forms and join logic - because if you've ever wondered why changing join types didn't seem to affect your Access results, you're far from alone. Take this common story: a user noticed that his player list was showing names even when there was no associated card data. The reason? Outer joins. With a left outer join, Access will show every record from one table, whether there's a matching record in the second table or not. Want to see only players with card data? You need an inner join. And here's a gotcha: the query builder's settings override what you see in the Relationships window. Changing relationships there does not change existing query joins - the query itself calls the shots. Double-click the join line in the query design view and set it directly. For a deeper dive, my Access Beginner and Expert courses are packed with join troubleshooting tips.

A quick word on zero-length strings, spaces, and nulls, because this subtlety will sneak up on people. A zero-length string is literally an empty string - a conscious blank, like when you ask someone for a middle name and they have none. A single space character, which is totally different, is like someone hitting the spacebar once. And null doesn't mean blank at all; it means "unknown, wasn't asked, maybe empty, maybe not." This distinction matters: Access stores and recognizes all three separately. Don't let your fields get cluttered with hidden blanks or nulls thinking they're all the same. Dig into my dedicated videos for real-life examples, and brace yourself - null math gets wild.

Let's move on to importing from Excel - especially when you're stuck with real-world spreadsheets full of actual names or descriptions rather than handy ID numbers. The best practice is: dump that data into a staging table first. Then, use update queries to match up foreign keys (IDs from related tables) before finally appending everything into your real tables. This lets you validate, clean, and trace your data before it hits your core system, keeping your database cleaner and your hairline intact (or at least not more receded than it already is).

On the subject of keeping things healthy, let's talk network setups and data corruption. Access databases are good team players in a small, stable local office. But as soon as you put your backend on a flaky Wi-Fi, a VPN, or try opening it across the internet, it's open season for corruption. Database connections can drop unpredictably, leaving half-finished writes and messy files. Good hardware - wires, switches, solid infrastructure - makes a world of difference. But if you keep running into corruption, that's your sign to consider SQL Server. SQL Server acts as a gatekeeper, never leaving your main file exposed, and users work through the server so dropped connections won't corrupt your data. Trust me, you don't want to learn this the hard way.

When is it time to redesign that legacy Access database from the Windows 3.1 days? The answer is: whenever your app starts feeling sluggish, overloaded, or you simply can't trace which chunk of code does what anymore. Rebuild intentionally based on what you actually use today - not the feature set you needed in 1997. Take stock, map your needs, and build with the benefit of experience. You'll wind up with a much tighter, more modern system and probably eliminate more bloat than you think possible.

Let's jump to another common question: Is Access still relevant? Absolutely. Microsoft's investing in the Power Platform and Azure, but Access remains the fastest, easiest way to build powerful desktop applications. Its role as a front end for SQL Server and Azure SQL is stronger than ever. You can start with a stand-alone Access database, then, as your business grows, migrate up to a SQL Server or even a hybrid cloud setup. And thanks to Access's rapid application tools, you don't lose your existing effort. My roadmap includes a lot of training on exactly this integration, so stay tuned if you're thinking about scaling up.

Let's talk about reports for a second. Are they still worth using if you never print a page? For sure. Reports shine when you need structured, polished output - whether that's for PDF exports, email summaries, dashboards, or "pretty" data layouts. Data sheets and forms work for day-to-day operations, but reports let you control exactly what users see and how it's formatted. And if you're trying to split a long text field across two columns, that's not natively supported - multi-column layouts handle records, not field-wrapping. You could pull it off by splitting your text into smaller chunks, but you'd need a little VBA trickery (and probably a temp table). If you want to learn more about those workarounds, check out the video above and watch for future tutorials.

For anyone thinking you can "secure" your database by simply renaming it with an ACCDR extension to hide the tables - bad news. ACCDR just launches Access in runtime mode, with the simplified interface, but does nothing for securing your data. If you want to truly protect your design and code, you need an ACCDE. For real back-end data security, SQL Server is the only way to go. Table renaming and interface tweaks are just mild annoyances for anyone who knows their way around Access.

Curious about running Access on a tablet? If you've got a full Windows tablet (think Microsoft Surface), you're good to go. But if we're talking iPad or Android? Sorry, Access doesn't run there natively. You can remote desktop into a Windows PC, or (with more ambition) move your data to SQL Server and create a web or platform-agnostic front end. And here's the biggie: even with a Windows tablet, don't use Access over Wi-Fi for anything mission-critical - wireless connections and Access databases are a corruption party waiting to happen. SQL Server solves that too. See a pattern?

On a lighter note, appreciate all your feedback on dark mode. Most users prefer it - it's easier on the eyes for those late-night coding sessions. If you want to send complaints, just remember to fold them into sharp corners first. Jokes aside, I read every comment and truly value your input.

Finally, let's set the record straight: Access can work as a full stand-alone solution (back and front end on a simple file share), as a rapid front end for enterprise-grade SQL Server or cloud data, or as part of a hybrid with web and mobile components. The trick is knowing what fits your business, your infrastructure, and your team.

So, what's the real lesson today? When it comes to combining data, keep it simple and maintainable - use temp tables instead of tangled union queries for larger processes. Split up your logic, don't be afraid to break things into smaller, saved queries, and take advantage of staging areas to clean and validate your data before it ever touches the core. That's how you build an Access database that stands the test of time and change.

As always, feel free to drop your questions or stories below. Let me know what obstacles you're facing and how you plan to use these best practices in your own systems. For the deep dives, walk-throughs, and more tips, check the embedded video above. And don't forget to check out the other resources and links I mention in the video description for further learning.

Live long and prosper,
RR