Forum Discussion
Moving Away from MS Access
I'm not sure what "structured like Access" might mean.
Any relational database application requires three components:
- A Data Layer: the tables in which data is stored.
- An Interface Layer: the forms and reports through which users interact with that data.
- A Logic Layer: the code which automates interactions with, and manipulation of, both the data and interface.
All relational databases work this way, so "structured like "Access" might mean only that these products have those three components. Perhaps your intention is to suggest deeper similarities?
Of the three mentioned products, the only one I some knowledge of is Caspio.
To use Caspio you must first migrate your data out of Access tables into Caspio's proprietary database, hosted on their site.
Then, you open the Caspio developer site and create new web objects (screens, code, etc.) to interact with the data.
You can continue to use ETL approaches to pass data back and forth from a local accdb to the Caspio tables, but that's not an intended scenario.
I suspect the other two products approach their solutions in a similar manner.
To properly evaluate them as alternatives, it would be very important to decide what your organization requires from your relational database application, and then independently verify how, and even whether, those alternatives provide acceptable features to meet those requirements.
It's essentially a one-way street, so be sure you are ready for that before you plunge in.
Are we still discussing Access? Sounds like very serious proprietary app used for Big 500 with Terra bytes of data.
Here, while you guys still thinking what is possible or not, I've moved 100 tables with POC data for the customer, and build the App in about 5 hours. ETL? My goodness, what is seen is a production data for a small company looking to migrate. None ETL was needed in a sense of manual work. All table and fields Captions preserved in the DB, all ~1300 of them.
Ridiculously easy. ZERO CODE, except wip Dashs! This is probably the first and only app seen on Arabic language for many - myself included.
https://arabic.pythonanywhere.com/
How to move Docs:
https://jampyapplicationbuilder.com/tips/migration/examples/index.html
This thread is now going into a third year. I would really encourage people to start learning some basic JS and ie Python.
- DeanBabicJul 04, 2023Brass Contributor
Hi all,
to make this move easier for everyone, a lot of SQL from MS Access is a problem for non-skilled would-be devs out there - like myself.
So, have you ever considered using ChatGPT for moving ie Reports SQL from Access?
Here is a large Reports SQL converted by ChatGPT, if asked nicely 🙂
Used ChatGPT on many occasions, sometimes it's wrong, sometimes is 100% correct.- bmercerJul 05, 2023Iron ContributorChatGPT has its uses as a tool for getting you started, but relying on it to produce accurate results is dangerous. It frequently returns queries which mix syntax from multiple versions or even multiple platforms.
If you are not able to read the output code and verify that it looks reasonable, don't put it in production.- AL2001Jul 06, 2023Copper Contributor
I can actually demonstrate this.
The Northwind Traders v1 template app has massive SQL for the Inventory list.Here is the SQL (as from Access):
SELECT Products.ID AS [Product ID], Products.[Product Name], Products.[Product Code], Nz([Quantity Purchased],0) AS [Qty Purchased], Nz([Quantity Sold],0) AS [Qty Sold], Nz([Quantity On Hold],0) AS [Qty On Hold], [Qty Purchased]-[Qty Sold] AS [Qty On Hand], [Qty Purchased]-[Qty Sold]-[Qty On Hold] AS [Qty Available], Nz([Quantity On Order],0) AS [Qty On Order], Nz([Quantity On Back Order],0) AS [Qty On Back Order], Products.[Reorder Level], Products.[Target Level], [Target Level]-[Current Level] AS [Qty Below Target Level], [Qty Available]+[Qty On Order]-[Qty On Back Order] AS [Current Level], IIf([Qty Below Target Level]>0,IIf([Qty Below Target Level]<[Minimum ReOrder Quantity],[Minimum Reorder Quantity],[Qty Below Target Level]),0) AS [Qty To Reorder] FROM ((((Products LEFT JOIN [Inventory Sold] ON Products.ID = [Inventory Sold].[Product ID]) LEFT JOIN [Inventory Purchased] ON Products.ID = [Inventory Purchased].[Product ID]) LEFT JOIN [Inventory On Hold] ON Products.ID = [Inventory On Hold].[Product ID]) LEFT JOIN [Inventory On Order] ON Products.ID = [Inventory On Order].[Product ID]) LEFT JOIN [Products On Back Order] ON Products.ID = [Products On Back Order].[Product ID]; SELECT [Inventory Transactions].[Product ID], Sum([Inventory Transactions].Quantity) AS [Quantity Sold] FROM [Inventory Transactions] WHERE ((([Inventory Transactions].[Transaction Type])=2)) GROUP BY [Inventory Transactions].[Product ID]; SELECT [Inventory Transactions].[Product ID], Sum([Inventory Transactions].Quantity) AS [Quantity Purchased] FROM [Inventory Transactions] WHERE ((([Inventory Transactions].[Transaction Type])=1)) GROUP BY [Inventory Transactions].[Product ID]; SELECT [Purchase Order Details].[Product ID] AS [Product ID], Sum([Purchase Order Details].Quantity) AS [Quantity On Order] FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Posted To Inventory])=False)) GROUP BY [Purchase Order Details].[Product ID]; SELECT [Inventory Transactions].[Product ID], Sum([Inventory Transactions].Quantity) AS [Quantity On Hold] FROM [Inventory Transactions] WHERE ((([Inventory Transactions].[Transaction Type])=3)) GROUP BY [Inventory Transactions].[Product ID]; SELECT [Order Details].[Product ID] AS [Product ID], Sum([Order Details].Quantity) AS [Quantity On Back Order] FROM [Order Details] WHERE ((([Order Details].[Status ID])=4)) GROUP BY [Order Details].[Product ID];
This SQL is obviously valid only for the MS Access. It takes a significant skill to re-write this to a standard SQL.
What ChatGPT produced is this:
SELECT p1.ID AS ID, p1.Product_Name AS Name, COALESCE( (SELECT SUM(od.quantity) FROM order_details od WHERE p1.ID = od.product_id AND od.status_id = 4), 0) AS quantity_on_back_order, COALESCE( (SELECT SUM(it1.quantity) FROM inventory_transactions it1 WHERE p1.ID = it1.product_id AND it1.transaction_type = 1), 0) AS quantity_purchased, COALESCE( (SELECT SUM(it1.quantity) FROM inventory_transactions it1 WHERE p1.ID = it1.product_id AND it1.transaction_type = 2), 0) AS quantity_sold, COALESCE( (SELECT SUM(it1.quantity) FROM inventory_transactions it1 WHERE p1.ID = it1.product_id AND it1.transaction_type = 3), 0) AS quantity_on_hold, COALESCE( (SELECT SUM(po1.quantity) FROM purchase_order_details po1 WHERE p1.ID = po1.product_id AND po1.posted_to_inventory = 0), 0) AS quantity_on_order, p1.target_level AS target_level FROM products p1 GROUP BY p1.ID, p1.Product_Name, p1.target_level ORDER BY p1.ID;
It is 100% accurate. Just look at the quality of this SQL. Amasing.
Of course, up to the user to test the iteration, because it IS the process to get it right.
LEFT join will never produce the same result tho.What I wanted to point out is there are significant tools on anyone's disposal, to move the Front End and the DB to a new technologies.
But if Access if your bread and butter, that is another matter. The "Powers to Be" do not know what's out there, to make an informed decision.