11-24-09, 13:44 #1Registered User
- Join Date
- Jan 2002
Unanswered: Running function from 1 database to another
I have two databases. One of the databases i have a function, which runs lots of things.
Database A has functions
Database B has other information
Is it possible to link the function in Database A with a button in database B, because there are lots of queries and tables which i do not want to bring in to Database B, I just bring in the linked tables from database A once the function has been run.
I do not want to run 2 systems, just run the function from Database A in the background when i click on the button on Database B
This might sound confusing.
I would appreciate any ideas
11-24-09, 15:27 #2Moderator
- Join Date
- Dec 2004
- Madison, WI
Not typically done since it's much easier to simply have the functions (in modules) in the same database. Otherwise you make it more complex. I can't say for sure if it's possible (I'm sure there's probably a way somehow but it'll probably be a lot of attempts to get the code right), but again, you make it much more difficult doing it this way.
If your insistent on doing it this way (again, not recommended), you may want to look at opening MSAccess using parameters as this is the only way I can think of doing it. You would open the 2nd database (with the functions), using a parameter to call the right function. Again, I would discourage this route. It can be a pain trying to maintain 2 MSAccess files.
But perhaps I'm misreading your intentions.
Last edited by pkstormy; 11-24-09 at 15:35.Expert Database Programming
MSAccess since 1.0, SQL Server since 6.5, Visual Basic (5.0, 6.0)
11-24-09, 17:54 #3Moderator
Provided Answers: 14
- Join Date
- Mar 2009
If you do not need to get return parameters from the called function, this is rather simple:
Dim appAccess As Access.Application ' Create instance of Access Application object. Set appAccess = CreateObject("Access.Application") appAccess.OpenCurrentDatabase "<Full path to Db 2>", False ' Run Sub (or function) procedure. appAccess****n "<Name of the procedure to be run in Db 2>" Set appAccess = NothingHave a nice day!
11-24-09, 18:39 #4Registered User
- Join Date
- Feb 2004
- Chicago, IL
Yes it can be done. I am assuming the functions in Database A are in modules. To access the functions in A from B you need to add a Reference in Database B to Database A. That will make all of the modules available. There are a couple of warnings:
1. You will have problems if you have functions each database with the same name.
2. You also may have issues developing in either database. When you open Database B it uses Database A like another user would. That means if you have B open and you try to edit a function or code in A it will warn you that you do not have exclusive access. Close B and then open A for editing.
3. Debugging code can be a little more flaky. You can step through the code and everything works as expected, but occasionally (more often than normal) the database will blow up (close unexpectedly). Not a huge deal.
4. Also, get familiar with CurrentProject versus CodeProject when you have a reference in place. Sorry if this gets a little confusing... If you open B with a reference to A and you run a module in A CurrentProject.Connection will reference your tables in B. To reference the tables in A use CodeProject. In other words, CodeProject uses the tables of the database that the code is running in. Since you are executing code in A you will be using the tables in A. CurrentProject uses the tables in B while running the code in A.
Some other notes... you can use forms and reports from a referenced database as well. I have a database that is nothing but modules (string manipulation, common code, etc.) then I reference that database in all the databases I create. I have put a generic progress meter form in that database and I have a Class Module that I call to display it with custom labels. Even though the form itself is in another database, I can control it and it looks like it is in the current database.
It took me a little while to understand how to use this so if you have a specific question I'll do what I can to answer it.