How do I run a function with a table update trigger? - ms-access

I'm new in this forum and this is my first question.
I've made a database in access for process control and I want to have the this database separated in local applications, linked with the tables, on the server.
Once this database is a process controller, it has a control pannel, designed in a form, with buttons that indicate different states during the process. This control pannel is opened in several computers and must be updated every time the tables are updated. How do I spread the trigger for all the database users? I've tried already, but only the active app, this means, the app who changed the table, is modified.
Pleasem, help! I don't know whatelse to do.

The backend database (access) you use is simply a data storage. It cannot run VBA itself or raise events. So you have to rely on your frontends to detect data-changes. And strangely access detecs no datachanges in open forms that do not originate from the respective client.
So you will have to check for changes yourself. The best bet would probably be with a timer and a routine that checks either for datachanges in a remote table or for some other trigger (like file change time etc..)
If you have any kind of server you could also create a small service where each of your access-instances can register. Then you could create triggers (afterChange or whatever you need) in your frontends that call that service, which then calls teh respective routines in each of the registered instances. This would be preferable, if you have many frontend running or if network load is of concern.

Related

MSAccess: ReadOnly Link to an External Data Source (Salesforce Account Table)?

I am able to link to our Salesforce Accounts table from MSAccess (via my Admin User login). This provides me the welcome benefit not needing to manually "Export" using SFDC Data Loader functionality to perform data maintenance and synchronization tasks w/3rd party data.
This approach gives me strong reservations as this link is Read/Write to live data. I am currently the only user to see this AccessDB/table and perform these maintenance tasks, but still does not preclude me from inadvertently doing something really STUPID.
Here's my current thought (short of a formal ReadOnly method):
Retain the LINKED SFDC table in my local AccessDB, but HIDE in MSAccess' Navigator
OnOpen (or some other event) - COPY the full contents of the linked table into a LOCAL Table
Perform necessary queries & maintenance tasks referencing the LOCAL table only
Is there a better way to accomplish this task? Maybe Link>Copy>Unlink>Maintain afresh for each new session?

Update access application file without changing the data

I just finished developing a Microsoft Access database application for a friend and he started entering data already.
He just contacted me that he would like to add additional features to the application (Nothing Major).
He is using his computer (to enter data) at one location and i use a different computer at a different location (to build the application). My Question is, is there a way when i finish updating my (empty) copy of the application to replace it with his copy of the application without effecting the data he entered into the database?
The real answer is to split the database into two: A backend with tables only, and a frontend with all forms, reports, etc.
There is a wizard that will do 99% of this for you.
When done, you can update the frontend at any time and relink the tables from the backend.

How do i capture mysql triggers and stored procedures in my vb.net application?

Hey i need some help here, i am developing a vb.net desktop application using visual Studio 2010 and mysql v5.5 whose database will be located in a main server hence the applications will have to communicate with the the database to get/post information.
My problem however is that, i want my applications to have a real time update of the database content such that if user1 updates the database, it immediately reflects that in user2's application. I have read articles that recommend use of triggers and Stored Procedures in mysql syntax to do this but i have no idea how this will work.
I have a table called 'Store' , when a user enters an item in table store, i'd like the application to know it and update the Item and its contents in a listbox or datagrid.
How do i capture these events in my vb.net code?
I hope i am clear enough, if not please ask. All your suggestions will be highly appreciated!
I think the easiest way to solve the problem would be to periodically get the records from the server and update the local list appropriately. On your client application you could store the last time the list was updated, and send that as a parameter when you do the get and get all the items that were created after that time (that way you only get new items).
Another possible solution would be to have a client register with the server application (so the server keeps track of all the clients) and when you create a new record you send that new record to all the clients, which would be listening for that event.
It's sort of hard to say what the 'best' approach is in your situation. How is your code designed (what's the architecture)? Are connections between the client and server applications persistent? Is there a server application that your client application talks to or is each client directly talking to the database?

Queries based on forms and MS Access development

i have 2 questions when i use access:
i create a form with comboBox and calenders, i want to choose an employee
from combobox and from date and to date and when i click ok i will send these
parameters to a query to return the result in a query (result is the calculation
of it's salary).
i know how to release an access project to be useful to user that can't
access tables and queries only forms.
is there any way to change the access project from release mode to development
one, because supposed that an error occurred, how to solve it without loosing
my data.
Note: i don't have client/server i develop a program and i release it and
give this release to the user, after a specific time this user tell me that
an error occurred, and he need data inserted from this program to database.
i can solve this problems and release another version of program, but the
main problem is how to take all data from the old program to the new one.
-- You can reference form control in a query:
SELECT FROM MyTable
WHERE EmployeeID = Forms!MyForm!cboEmployee
AND SomeDate BETWEEN Forms!MyForm!txtDateStart And Forms!MyForm!txtDateEnd
You could also build an SQL string and use it as the record source for a form or in VBA.
-- Access should be split into front-end (forms, reports, etc) and back-end (data). When you make changes to the front-end, you create a new mde or accde and send that to the users. The data stays on a server in the back-end.
See: http://msdn.microsoft.com/en-us/library/aa167840(v=office.11).aspx
EDIT
From your comments, it seems that each application has a single user, if this is the case, splitting is not essential, but it can still be a good idea. The user will get two databases, one for data and one for forms etc and only the one for forms gets replaced. You will need to include a routine to locate and link the back-end tables.
However, if this is not possible, an mde or accde does not hide the data, you can send your revised copy and include a routine to import from the previous mde/accde.
EDIT 2
There are wizards that will split your database for you and link the tables. Where you find them varies slightly from version to version, but they are under the menu item Database Tools. The only problem with this is that the linked table holds the location for the back-end, which is on your computer, not on your users computer. Linked tables are how you access data in the second database. These act as if there are tables in the first database, except you cannot change them. Unfortunately, linked tables hold the location of the back-end, so this will have to be changed if you are sending it to a users. You can either write code, or show your user how to use the linked table manager. This may lead to confusion and may not be worth the effort for one PC. (See also http://www.alvechurchdata.co.uk/accsplit.htm)
Alternatively, you can split the database on your PC and make all the changes to forms etc that you want, then add some code that will import the tables and other data for the user into your new copy. The user will follow the instructions in your code to import the tables. As an aside, you will find that development is a lot safer on a split database. You should also decompile from time to time, which you can find at http://www.granite.ab.ca/access/decompile.htm.
If you want to protect your code, you can create a compiled version of this new copy, the extension for a compiled Access database is *.accde, for 2007 onward and *.mde for prior versions. This is what I thought you meant by 'i know how to release an access project'.

Data sync solution?

For some security issues I'm in an envorinment where third party apps can't access my DB. For this reason I should have some service/tool/script (dunno what yet... i'm open to the best option, still reading to see what I'm gonna do...)
which enables me to generate on a regular basis(daily, weekly, monthly) some csv file with all new/modified records for a certain application.
I should be able to automate this process and also export at any time a new file.
So it should keep track for each application which records he still needs.
Each application will need some data in some other format (csv/xls/sql), also some fields will be needed for some application and some aren't... It should be fairly flexible...
What is the best option for me? Creating some custom tables for each application? Based on that extracting modified data?
I think you best thing here, assuming you have access to the server to let you set this up is to make a small command line program that can do the relativley simple task you need. Languages like pearl are good for this sort of thing I do believe.
once you have that 'tool' made you can schedule it through the OS of the server to run ever set amount of time. Either schedule task for a windows server or a cronjob for a linux server.
You can also (with out having to set up the scheduled task if you don't / can't want to) enable this small command line application to be called via 'CGI' this is a special way of letting applications on the server be executed at will by a web user. If you do enable this though, I suggest you add some sort of locking system so that it can only be run every so often and to stop it being run five times at once.
EDIT
You might also want to just look into database replication or adding read only users. This saves a hole lot of arseing around. Try to find a solution that dose not split or duplicate data. You can set up users to only be able to access certain parts of the database system in certain ways, such as SELECT data