Desktop database
Connect Microsoft Access to Excel, Sheets and AI
Desktop .mdb / .accdb files. The agent opens them locally — no Access Services, no upload of the file.
One connection, every surface
Where your Access data can go
Connect Access once and the same read-only connection feeds all of these — no second setup, no second copy of the data. 9 of 11 have a step-by-step guide.
Access to Excel
Microsoft Excel · Excel add-in
Pull live Access results straight into a worksheet and refresh them on demand — desktop Excel, Excel Online, Microsoft 365.
Read the guideAccess to Google Sheets
Sheets add-on
Run a saved Access query from the sidebar and drop the rows into the sheet. Shared collaborators can refresh it themselves.
Read the guideAccess MCP server
Claude, Cursor and MCP clients
Give an AI assistant read-only access to Access with the schema it needs to write correct SQL — no credentials in the chat.
Read the guideAccess REST API
HTTP endpoint
Publish a Access query as an authenticated JSON endpoint any application can call, with an OpenAPI 3.1 spec and ready-made Postman, Insomnia and Hoppscotch collections. No database port is opened.
Read the guideAccess to Airtable
Automation platform
Sync Access rows into an Airtable base on a schedule, or fetch them inside an Airtable automation script.
Read the guideAccess to Baserow
Automation platform
Feed a Baserow table from Access over the REST endpoint — self-hosted or Baserow cloud.
Read the guideAccess to SeaTable
Automation platform
Keep a SeaTable base current with Access data without exporting a file or exposing the database.
Read the guideAccess to Smartsheet
Automation platform
Push Access results into a Smartsheet grid so plans and reports read from the source system, not last week's export.
Read the guideAccess to Anvil
Anvil Works · App platform
Back an Anvil Python app with Access through the REST endpoint instead of embedding database credentials in the app.
Read the guideAccess to Power BI
Power Query M
Paste the generated Power Query M into the Power BI Advanced Editor and the report reads live Access results over HTTPS — no ODBC driver, no database port opened.
How Power BI works no Access walkthrough written yetAccess alerts and reports
Slack · Discord · Email · Webhook
Put a Access query on a schedule and have the rows delivered to Slack, Discord, email or a signed webhook — or hold the message until a row count, threshold or percentage change crosses the line you set.
How alerts and reports work no Access walkthrough written yetHow it works
5 steps, no inbound firewall change
Install the Network Agent on the Windows machine that can already see the file. Access is the one connector that is Windows-only, because the driver is Microsoft's rather than ours.
Make sure the 64-bit Access Database Engine is installed. The agent checks before you get as far as a connection and links you to Microsoft's download if it is missing.
Point it at the .mdb or .accdb file. It is opened in place and read-only — nothing is imported, converted or copied.
The agent reads the tables, including linked ones, and leaves Access's own system objects out of the list so what you browse is your data.
Write read-only Jet SQL, or let Nova write it. Read the saved query from Microsoft Excel, Google Sheets, Power BI, MCP or REST.
Feature deep-dive
What Access gives you
The database the company still runs on
Access files tend to outlive every plan to replace them. This connector is for reading one where it already is, rather than for finally migrating it.
- Linked tables are listed and queried like any other table, so the front-end / back-end split that nearly every real Access application uses is invisible in your SQL.
- Access's own bookkeeping — the MSys objects, and anything hidden — is filtered out, so the table list is the one a person would recognise.
- Nothing is migrated, exported or synchronised. The file stays exactly where it is, and what travels is the result of your query.
- The Access engine is only ever opened one connection at a time by the agent, which is deliberate: ACE is not fond of being opened concurrently.
It speaks Jet SQL, and so should you
Access is not ANSI SQL, and your query is handed to the engine as you wrote it. That is a feature if you already know Jet and a trap if you assume Postgres, so it is worth knowing which dialect you are in.
- Identifiers go in [square brackets], which is how a column called Order Date is survivable at all.
- TOP 10, not LIMIT 10. Dates are fenced in hashes — #2026-08-30#. String concatenation is &, and IIF stands in for CASE.
- LIKE uses * and ? as its wildcards rather than % and _, which is the single most common reason a copied query returns nothing.
- There are no window functions and no FULL OUTER JOIN. Jet is a 1990s dialect and has not moved.
- Comments are stripped and @named parameters are rewritten to the positional form the driver expects, so a query written in the Query Builder behaves the way it reads.
-- Jet SQL: brackets, TOP, #dates#, and * as the wildcard
SELECT TOP 10 [Customer Name], [Order Date], [Total]
FROM [Orders]
WHERE [Order Date] > #2026-01-01#
AND [Customer Name] LIKE 'Acme*'
ORDER BY [Total] DESC
What it needs from Windows
This is the one connector with a real prerequisite, and it is better stated plainly than discovered later.
- A Windows machine. There is no ACE driver for Linux or macOS, so a Linux agent cannot read an Access file at all.
- The 64-bit Access Database Engine redistributable. The agent runs a check for it up front, though a successful check is not quite a guarantee — a Click-to-Run Office installation can register the driver without leaving it usable, so the connection test is the real answer.
- Write permission on the folder holding the file. This surprises everyone: the Access engine creates a .laccdb lock file next to the database even when it is only reading, so a read-only share refuses a connection that is otherwise perfectly correct.
- Local storage is the safe choice. Access over a network share is fragile for reasons that predate us, and the closer the agent sits to the file the better it behaves.
Shared by every database connector
True of every database connector
- Outbound only — the agent opens one encrypted connection out to Query Streams. No inbound port to forward, no VPN, no IP allowlist, nothing about your database exposed to the internet.
- Credentials stay put — the database username and password live on the machine you installed the agent on. Query Streams never receives them and cannot reach your database on its own.
- Read-only, enforced — one statement at a time, SELECT and friends only. A write is rejected on your own machine before it is ever sent to the server, rather than relying on a permission somebody remembered to set.
- Deploy as many agents as you like — one per site, region or cloud. Every data source they can see arrives in a single dropdown, so nobody has to know which agent hosts what.
What you get once a query is saved
- Share the capability, not the SQL — a colleague or an outside partner can run your query and change its filters without ever seeing the statement behind it.
- Filters from either direction — declare them yourself as @variables, or let the connector spot the literal values already sitting in your WHERE clause and offer those as dropdowns.
- Read it from anywhere — Microsoft Excel, Google Sheets, Power BI, the REST API, AI assistants over MCP, the Query Builder and Nova all read the same saved query.
- Run several at once — five saved queries into five worksheet tabs, streamed concurrently, however large the results.
- Join it to anything else you have connected — another database, a business API, or a folder of files, in one read-only statement.
Cross-source SQL
Join Access to the rest of your data
One statement can span Access and your other connections at once. Each source runs only the part it can, streams the result back, and the join happens centrally — the sources never talk to each other and nothing is copied anywhere.
3 connections · 3 agents
One statement
-- nothing copied, nothing merged, nothing scheduled
SELECT c.region, COUNT(*) AS orders, SUM(i.amount_due) AS invoiced
FROM ops_access.northwind.orders1 f
JOIN pg_crm.public.customers2 c ON c.id = f.customer_id
JOIN billing.stripe.invoices3 i ON i.customer = c.stripe_id
GROUP BY c.region
ORDER BY invoiced DESC;
The three parts are connection, schema and table — and the connection name is whatever you called it. Illustrative columns; your tables will be your tables. Read-only applies to every piece: SELECT, WITH and EXPLAIN only, with a ceiling on how much any one source may hand over for a single query. How federated queries work
Connection details
What Access needs
- What you point at
- One .mdb or .accdb file, on the Windows machine the agent runs on
- Platform
- Windows only — the one connector that is, because the driver is Microsoft's
- Prerequisite
- The 64-bit Microsoft Access Database Engine. The agent checks for it before you connect
- Driver
- Microsoft ACE OLEDB — the newest of 16.0, 15.0 and 12.0 that is present, picked for you
- Opened
- Read-only by default: Mode=Read on the connection, and a statement check before anything runs
- Folder permission
- Write access is needed on the containing folder — the Access engine writes a .laccdb lock file even to read
- Tables
- Base tables and linked tables. System (MSys) and hidden objects are not listed
- Saved queries
- Not surfaced. A saved Access query is not offered as a table — base and linked tables only
- SQL dialect
- Jet SQL, handed to the engine as you wrote it. Brackets, TOP, #dates#, * wildcards
- Schema
- Access has no schema layer, so a federated reference carries the database name in that slot
Read-only is the default and it holds in two places at once — the file is opened with Mode=Read, and the statement is checked before it ever reaches the engine. Access is also the only connector with a switch that turns that off, and it is worth being straight about where it lives: a checkbox in the agent's own console on the machine you installed it on, not reachable from the Query Streams portal at all. Left alone, which is how it ships, the connection cannot write.
The lock file catches people out more than anything else here. Opening an Access database read-only still creates a .laccdb beside it, because that is how the Access engine has always worked, so a folder you have deliberately made read-only will refuse a connection that has nothing else wrong with it. The fix is a folder permission rather than anything in Query Streams, and it is the first thing to check when a file that plainly exists will not open.
In a cross-source query, Access has no schema layer to name — so where PostgreSQL writes public and SQL Server writes dbo, the middle part of a three-part reference carries the database itself. A connection called ops_access reading northwind.accdb is written ops_access.northwind.orders.
Vendor documentation: www.microsoft.com
FAQ
Questions about Microsoft Access
Which tools can read Microsoft Access data through Query Streams?
All of them, from one connection: Excel, Google Sheets, MCP, REST API, Airtable, Baserow, SeaTable, Smartsheet, Anvil, Power BI, scheduled alerts and reports. Connect the database once and every surface reads the same read-only connection — there is no per-tool setup and no second copy of the data.
Do I have to open a firewall port to my Microsoft Access database?
No. The Query Streams Network Agent runs inside your network and opens a single outbound encrypted connection. Nothing listens for inbound traffic, no VPN is required, and the database keeps its existing firewall rules.
Can Query Streams change data in Microsoft Access?
No. The agent enforces read-only at the point of execution — one statement at a time, SELECT and friends only. Credentials stay on the agent and are never sent to Query Streams.
What does Query Streams need to connect to Microsoft Access?
A reachable host, a role and its password — the agent carries the driver, so nothing is installed on the database. What you point at: One .mdb or .accdb file, on the Windows machine the agent runs on. Platform: Windows only — the one connector that is, because the driver is Microsoft's. Prerequisite: The 64-bit Microsoft Access Database Engine. The agent checks for it before you connect. Driver: Microsoft ACE OLEDB — the newest of 16.0, 15.0 and 12.0 that is present, picked for you.
Can I join Microsoft Access to another database in the same query?
Yes — that is a federated query. One statement can reference Microsoft Access and your other connections at once, written as connection.schema.table. Each source runs only the part it can and streams the result back; the join happens centrally, so the sources never connect to each other and nothing is copied or scheduled. Read-only applies to every piece — SELECT, WITH and EXPLAIN only — and there is a ceiling on how much any one source may hand over for a single query. Federated queries are a plan feature; the federated queries page carries the current source and size limits.
Put Access where the work happens
Install the agent, point it at your database, and pick a destination.
Read-only Outbound only Credentials stay on the agent

