0
votes

Summary

I have various forms in an Access front end database with several drop-down lists. These populate from queries, which take data from tables in a back end Access database (via linked tables).

On opening the front end and clicking the first drop-down combo box, there is a wait of several seconds (often accompanied by a "Not responding" message) while the table data from the back end (on a server) is downloaded.

It strikes me that this loading could be initiated as soon as the front end opens, and before the user clicks the first combo box. Is there any way to pre-load the table -- preferably with no "not responding" message?

1
Did you compact & repair? - Mark C.
Yes, the front end database has just been compacted & repaired. - Mark Butler

1 Answers

1
votes

According to my experience, filling the drop-downs initially will require to alter the whole form component structure. I.e. the drop-downs would read their items not from queries but from VBA lists. The lists could be created automatically after the Access startup process.

But I have once successfully increased the performance by opening the whole forms at startup and make them invisible. Then, if somebody needs a form and choses e.g. a menu point, the form will just become visible. People told me they accept a waiting time at startup well as they know of it and do some other work or go grab a coffee.

To maintain this whole form preloading, you would need to disable the form close buttons (and probably add an alternative button), as this buttons would destroy the performance boost. Further, maybe the dialogs should be able to reload the attributes somehow. But if the properties in the drop-downs don't alter too much, customer could probably life with an occasional application restart. Last, if Access crashes (one not caught VBA error is enough to reset Access' runtime status), the next dialog to be opened will be loaded again. You need to write some intelligent GetForm() factory method to deal with this.

But as a plus, loading a dialog invisible at the startup is easy :-)

Now you have at least two scenarios - I hope you'll find a good way.