Nwind
Microsoft Access database application
Confidential — prepared from the files you shared. Free of charge and without obligation.
Summary
Nwind is a Microsoft Access database application used for sales, orders and invoicing; customer management. I analysed 1 file: 21 screens, 9 data tables and 0 lines of code. It can be turned into a modern web application without losing data or business rules. Overall risk is low. I recommend starting with a £1,100 pilot on the “Customers” module, then the full migration at a fixed price (£10,000).
Recommended start: Pilot — £1,100
Then: full migration £10,000, maintenance £250 per month.
What the program does
Judging from its data and screens, Nwind manages sales, orders and invoicing; customer management. The central data are Customers, Orders, Products, Employees and Sales. People work with screens such as “Customer labels dialog”, “Customer orders”, “Customer orders subform 1” and “Customer orders subform 2” and print reports such as “Alphabetical list of products”, “Customer labels” and “Employee sales by country”. This description is inferred automatically and will be confirmed with you.
Current technology
| Platform | Microsoft Access database application |
|---|---|
| Languages | — |
| Database | Microsoft Access 97 (Jet 3) |
| Files analysed | 1 (2.9 MB) |
| Records | 4,032 |
Business areas detected
Modules and screens
The program has 21 screens. Each one is linked to the data it works on; in the new version they become consistent web pages with search, filters and input checks.
Customers 11 fields, 91 records
- Customer labels dialog
- Customer orders
- Customer orders subform 1
- Customer orders subform 2
- and 2 more
Orders 14 fields, 830 records
- Orders
- Orders subform
Products 10 fields, 77 records
- Product list
- Products
Employees 17 fields, 9 records
- Employees
- Employees (page break)
Sales 14 fields, 830 records
Order details 5 fields, 2,155 records
Suppliers 12 fields, 29 records
- Suppliers
Categories 4 fields, 8 records
- Categories
Shippers 3 fields, 3 records
Reports
Data model
I found 9 tables and 9 links between them. The diagram shows the main tables.
Main tables and their links. Arrows point from a record to the record it refers to.
| Tables | Columns | Rows | Source |
|---|---|---|---|
| Categories | 4 | 8 | database |
| Customers | 11 | 91 | database |
| Employees | 17 | 9 | database |
| Order Details | 5 | 2,155 | database |
| Orders | 14 | 830 | database |
| Products | 10 | 77 | database |
| Shippers | 3 | 3 | database |
| Suppliers | 12 | 29 | database |
| Umsätze | 14 | 830 | database |
Business rules found
Business rules found automatically (checks, calculations, filters): 30. Every one of them will be carried over and tested.
Employees.BirthDate: <Date() → "Birth date can't be in the future."Order Details.UnitPrice: >=0 → "You must enter a positive number."Order Details.Quantity: >0 → "Quantity must be greater than 0"Order Details.Discount: Between 0 And 1 → "You must enter a value with a percent sign."Products.UnitPrice: >=0 → "You must enter a positive number."Products.UnitsInStock: >=0 → "You must enter a positive number."Category Sales for 1995: CategorySales = Sum([Product Sales for 1995].ProductSales)Invoices: ExtendedPrice = CCur([Order Details].[UnitPrice]*[Quantity]*(1-[Discount])/100)*100Order Details Extended: ExtendedPrice = CCur([Order Details].[UnitPrice]*[Quantity]*(1-[Discount])/100)*100Order Subtotals: Subtotal = Sum(CCur([UnitPrice]*[Quantity]*(1-[Discount])/100)*100)Product Sales for 1995: ProductSales = Sum(CCur([Order Details].[UnitPrice]*[Quantity]*(1-[Discount])/100)*100)Quarterly Orders by Product: ProductAmount = TRANSFORM Sum(CCur([Order Details].[UnitPrice]*[Quantity]*(1-[Discount])/100)*100)Alphabetical List of Products: WHERE (((Products.Discontinued)=No))Catalog: WHERE (((Products.Discontinued)=No))Current Product List: WHERE ((([Product List].Discontinued)=No))Employee Sales by Country: WHERE (((Orders.ShippedDate) Between [Beginning Date] And [Ending Date]))14 more rules were found and will be reviewed in the discovery phase.
Extracted automatically from code, queries and formulas. Every rule will be confirmed with you and covered by an automated test.
Risks
Overall risk: low. None of these points blocks the migration; each has a known answer, shown below.
No significant risk factor was detected automatically.
Recommended architecture
Web application
ASP.NET Core on .NET 10 (long-term support) with Blazor: one language, C#, from the database to the screen.
Database
PostgreSQL, or Microsoft SQL Server if you already own a licence. Keys, constraints and an audit trail on every change.
Sign-in and permissions
Personal accounts with two-step verification, or your Microsoft 365 accounts. Each role sees only its screens.
Reports and exports
On-screen reports with filters, PDF and Excel export generated on the server.
Hosting
European cloud with daily backups and HTTPS, or your own server. Works in any browser, on PC, Mac and tablet.
Quality
Automated tests run on every change: data, calculations and the main screens.
- It is the natural successor of Access, VBA, Visual Basic, Delphi and older .NET programs: same Microsoft ecosystem, and any .NET developer can maintain it — you are never locked in with me.
- Microsoft supports .NET 10 until late 2028 with free security updates, and the upgrade path afterwards is routine.
- Blazor builds rich forms and data grids without a separate JavaScript application, which keeps the cost of every future change low.
- PostgreSQL has no licence cost and handles far more data and users than Access or Excel ever will.
| Today | After migration | |
|---|---|---|
| Forms and dialog windows | Web pages with validation, search and filters | |
| Tables, sheets and local database files | One central PostgreSQL database with keys and history | |
| Saved queries and SQL inside the code | Typed queries (Entity Framework Core) and database views | |
| Printed reports | On-screen reports with PDF and Excel export | |
| Single PC or shared network file | Browser access for many users at once, from anywhere |
Migration plan
1Discovery and data audit
I confirm scope, rules and reports with you and take a copy of the data.
2Pilot module
One module running in the browser on your real (copied) data.
3Data model and migration scripts
New database, repeatable migration with automatic reconciliation.
4Screens and business logic
All screens and rules rebuilt, reviewed with you every week.
5Reports, exports and integrations
Reports, PDF/Excel exports, e-mail and other connections.
6Acceptance tests
Old and new run side by side on the same data; results compared automatically.
7Go-live and training
Final data migration, user training, handover documentation.
≈ 9 weeks
How I prove nothing is lost
Data reconciliation
After every migration run, row counts, totals and checksums of of each table are compared automatically between old and new.
Calculation tests
Each business rule I found (30 so far) becomes an automated test fed with real examples from your current program.
Report comparison
The same report with the same filters must give the same totals in both systems.
Screen tests
Robots click through the main workflows in a real browser on every change.
Parallel run
For 30 days after go-live the old program stays in use alongside the new one; figures are compared and any difference is explained and fixed.
Fixed-price packages
Pilot — Customers
- List, search, detail and edit screens for one module
- Its data migrated from a copy of your file
- Running online for your team to try
- Credited against the full migration
Full migration
- All screens, data and business rules
- Reports with PDF and Excel export
- Users, roles and permissions
- Parallel run, training and documentation
- 3 months of warranty on defects
Maintenance
- Hosting supervision and daily backups
- Security and framework updates
- Bug fixes with next-business-day response
- Up to 2 h of small changes each month
Typical agency quote for the same scope: £16,600–£24,900.
Option: database migration only (data moved to PostgreSQL, no new screens): £3,000.
Payment terms: pilot, 50% at the start and 50% on approval; full migration, 30% at signature, 40% at acceptance of the test environment, 30% at go-live. Prices exclude VAT, where applicable. Offer valid for 30 days from the date of this report.
How this price was calculated
- Complexity score: 326 points (size tier M) — 9 tables, 21 screens, 13 reports, 0 lines of code, 0 risk factors.
- Main cost drivers: Screens 168 (52%), Data model 92 (28%), Reports and macros 66 (20%).
- Full migration: fixed price £10,000, about 40–60% of a typical agency quote for the same scope (£16,600–£24,900), thanks to an automated, tool-assisted migration process. Estimated delivery: 6–9 weeks.
- Pilot: the “Customers” module rebuilt end-to-end (list, detail, edit, 1 report) for £1,100; 100% credited if the full migration is signed within 60 days.
- Maintenance: £250/month — monitoring, security updates, backups and up to 2 h of small changes per month.
Next step
Open the interactive preview that accompanies this report, then reply by email with any questions: I answer in writing and confirm the pilot scope. Open the preview
Appendix: inventory details
| Measure | Value |
|---|---|
| Files analysed | 1 |
| Screens | 21 |
| Data tables | 9 |
| Columns | 90 |
| Relations | 9 |
| Saved queries | 22 |
| Reports | 13 |
Limits of this automated analysis
The points below did not prevent the analysis but are checked by hand before the final quote.
- nwind.mdb: VBA module Northwind Help Function listed but its code could not be read
- nwind.mdb: VBA module Startup listed but its code could not be read
- nwind.mdb: VBA module Utility Functions listed but its code could not be read
- nwind.mdb: Access 97 file: VBA code and form designs are stored in a legacy format that is not decoded