do yall use .mda files?

hey guys!

do yall use .mda files?

how do yall distribute the reuseable code?

ok so we have an mde file for any specific code, but do yall link it to an .mda file?

and apologies for the next super noob question - do we compile an .mda file to a .mde file when distributing so our source code is compiled?

i'm interested in hearing how yall distribute your code!! both reuseable and specific code!! thanks guys!! = ))
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Gustav BrockCIOCommented:
I never use an mda.

The issue is that your mdb needs to be compiled with the mda. Thus, if you modify the mda, the mdb has to be compiled again, now with the new mda. So you cannot just distribute a new version of the mda, and then one of the advantages of using these vanishes.

developingprogrammerAuthor Commented:
so how do you distribute reuseable and specific code gustav? just put it all in one mde?
DatabaseMX (Joe Anderson - Microsoft Access MVP)Database Architect / Systems AnalystCommented:
I've built several MDA Add-In tools that I use daily.

The Ultimate Tool Kit for Technolgy Solution Provi

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy for valuable how-to assets including sample agreements, checklists, flowcharts, and more!

developingprogrammerAuthor Commented:
cool mx! how do you deal with the compiling issue that gustav mentioned above?
Scott McDaniel (Microsoft Access MVP - EE MVE )Infotrakker SoftwareCommented:
I don't use them either. For my stockpile of reusable code, I just keep everything in modules, and copy/paste them into new projects.
Gustav BrockCIOCommented:
>  just put it all in one mde?


I created a form that I use to synchronize container objects that are the same among our databases.  So after making a change to a form, query, module, etc... in one database, I run my Sync form.  I then select the object with the earliest date I want to sync  to (all the items up to that point get highlighted) and these get copied over to the databases listed in the lower section.
SyncEdit Group Members
Jim Dettman (Microsoft MVP/ EE MVE)President / OwnerCommented:
<<do yall use .mda files?>>

 No. VBA is too finicky with compiling.

<<how do yall distribute the reuseable code? >>

I keep a "BaseCode" DB with all my common modules.  

Then within each app, I have one module called "AppSpecific", which contains all the unique code for the DB.   All standard and class modules can be replaced from basecode expect for this one module.

Also, depending on the client, I may have an "AppUtility" module.   This is common code at the application/framework level for that client.   In other words, routines that I would use in each application for that client, but for no other.

So it looks like:

    AppUtility Code
          AppSecific Code

<<ok so we have an mde file for any specific code, but do yall link it to an .mda file?>>


<<and apologies for the next super noob question - do we compile an .mda file to a .mde file when distributing so our source code is compiled?>>

 MDA needs to be compiled first, then the MDB, then make a MDE.

DatabaseMX (Joe Anderson - Microsoft Access MVP)Database Architect / Systems AnalystCommented:
"how do you deal with the compiling issue that gustav mentioned above?"
There is no compile issue with regard to building Add-In MDAs. None whatsoever.

Also, at work I have a 'Library MDA' that is common to some 30 dbs used by our group ... that has common functions used by all dbs ... for example GetUserName(), and many others. It wouldn't be practical to have to change code in 30 dbs - just to update/enhance a function, when I can do it in one place.

developingprogrammerAuthor Commented:
thanks guys for all your help!!

Jim i really like the structure how you do things.

right now i have Generic and Specific. but i don't have Client-Specific.

i believe this is also the structure LSMConsulting and gustav is using as well.

mx i really love your model. i really want to learn how to use .mdas. i don't know the difference between the issues the others face with mdas and why you don't face the same issues as well, but i want to try and test this and learn this cause i think it's very helpful.

perhaps mx you could share how come you don't face the same problems as the rest?

IrogSinta i think your solution is the pinnacle - in terms it offers configurability and scalability. i don't know how to do it now and probably am some way off doing it in the near future, but do you think you could share the form you use to synchronise? i don't know how to sync these items right now using a form and code = )

thanks guys!!
Scott McDaniel (Microsoft Access MVP - EE MVE )Infotrakker SoftwareCommented:
I'm not mx, but ...

I never really had "problems" with the .mda format, just seemed like more work than it was worth for what I was doing.

I can see some value in using an .mda - for example, if your goal is to create an add-in to sell, and you don't want the world seeing the code you're using.

I just don't see the value for code reuse.
DatabaseMX (Joe Anderson - Microsoft Access MVP)Database Architect / Systems AnalystCommented:
It's important to understand that ... there is zero difference between the MDB and MDA extension from an internal standpoint.  The only difference is ... The Access Add-In Manager only recognizes the MDA and MDE (ACCDA,ACCDE) extensions. So, if you want to build an Add In (I have built several), then the extension must be MDA or MDE (or ACCDA, ACCDE) to be recognized.

You can change any MDB to an MDA extension ... and nothing changes internally.

Of course, Rick Fisher's legendary Find & Replace is an MDE Add-In (see image below).


Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
developingprogrammerAuthor Commented:
i see guys. fantastic!! thanks so much LSMConsulting and mx!!

guys i just thought about something. what i want is really redistributable components, not just redistributable code.

so we've got 4 things - tables, queries, forms and code.

i want to wrap all my components in an .mda (or any other file that i can redistribute along).

let's just say that i can use an .mda for tables, queries, forms and code (i don't know if this is possible but lets assume).

in my .mda i would have multiple components.

each component would have a few tables, queries, forms and modules to make things work.

then this .mda file would be distributed with the .mde file and as a package, these 2 files will work together to give the final product.

LSMConsulting it is something like a final product i want to sell - just that i'm not selling it but rather using it internally. and i cannot let the user see / modify the code due to compliance sake. so i want to get my skills up to the ultimate level - which of course is always the commercial test as just one of the benchmarks.
Scott McDaniel (Microsoft Access MVP - EE MVE )Infotrakker SoftwareCommented:
If your only purpose is to prevent users from modifying code, then just deploy a single .mde/.accde file. Unless you have very specific functionality (like a .dll file that would provide you with FTP services, for example) then  I don't see the need in using multiple containers for this.

Add-ins are generally 3rd party products that extend/enhance the Access program (like Rick Fisher's Find and Replace).

I think this is a difficult theme and I have not found a final way from which I could say, that's the really best solution.

You see in the very different methods all the others have described above that everyone must find an own way which best fits on the personal way of coding, the environment and also if someone is a standalone programmer or works in a development team, moreover if you work for one single customer (like me at the moment) or if you are an employee in a software company where you have changing customers and so on.

I would say from the models above that the one of Jim is one which I personally would find most useful - but only for my personal situation. The idea of using a three level code base and adding a common code base which can be exchanged at any time is really good.
But to program an own synchronization tool like IrogSinta is also an impressive way. I'm pretty sure he also has a tool for automatic application test like used in Test Driven Development in .NET or other "big" languages to make sure that the synchronization does not end in not working applications.
On the other hand there are the code collections like the one mx has described - is also a very good way of using reusable code libraries. But of course it also needs a very sharp development, exact testing, because you cannot simply change a library code and "hope it runs" if 30 or more databases using it. You must do a very clean versioning and careful coding, no easy thing and creates a lot of extra work. But if you go this way, you maybe have a lot more work in the codebase (but it normally changes very rarely) but if the work is completed you have improved 30 databases at once so the more work you've done before you save for all these applications where you don't need to do it anymore.

I'm not sure if the issue gustav have written at the beginning is a problem because mx has written that it's not (but maybe I've misread), I personally have not experimented with MDAs/ACCDAs very much. I do it more the way like LSMConsulting: If I want to write a general module/class, I create a new database and there I write all my code for that module and do all the tests in a very generic environment without thinking of any specific application. For example my biggest general project, my Filter classes. This one is able to use any bound form, analyzes it if there are some fields with a specific Filter prefix and the name of the field to be filtered as suffix and then it creates a very comfortable filter over all the found filter fields. As alternative it can create a complete filter form which automatically shows filter fields and all the needed buttons to filter anything on any form.

So that's a function I need very often in different applications because I don't want the user to use the built-in filter functions of Access which are buggy especially with big recordsets and I don't want to create a filter form for each and every new form which is not hard work but boring work which takes a lot of time.
If I want to implement that in a new application, I take all the classes and modules and forms which are needed for this into the application. They all have my signature as prefix (like "clsCCFilter") so I know that are completely generic classes which are not specific to the application. They are all designed in a way that they offer a lot of methods and properties where I thought they are MAYBE useful some time without thinking of a specific application. Now the application can begin to use these and mostly it fits. But sometimes I found that there is a method or property missing so I add them in this application and see how it works in "real world" environment. If it was good and a really improvement to this generic class I go and use a simple code comparer to find all the changed places between this and the original code and then implement it in the generic database. That's only to be sure if there has nothing changed in the generic database in the meantime from improvements of other databases. In the easiest form I simply copy them back to the generic database and so my basic code library has also been improved and the next application can again use this when I copy the modules again to this one.

But of course this is only possible because I'm sure that I'm the only one who changes this basic database and I'm the only one who copies that into other applications. If at least a second person would be involved that would be a really difficult way to be sure that not one overwrites the work of another. The more persons are involved the more that way gets impossible.
I'm a little bit a "chaotic programmer". I know that many developers learn the basics and use a straightforward design way of i.e. creating use cases, creating development documents and graphics, creating test environments and test driven development (which I found impressive and really great but could not implement for me at any time, maybe I'm a too impatient man for that - and unfortunately Access is not a very good environment for that way although there are some projects to make this possible out in the Internet) and many more of such useful and good tools. I'm really too impatient for that stuff, I want to see quick results...:-)
And so, if I begin to work on a new database, I mostly simply start to create it. I like to use a tool like the SQL Server diagram editor which is not simply a graphic - each table which I create here exists after I've done that in the diagram editor. I can create relationships and a lot more using the properties flyout and so the model begins to grow. Sometimes I throw away already designed parts, and maybe that's all additional work you would not need if you've created design documents before, but mostly it's for me the faster way because in the end when I'm ready with my diagram(s) I know the database tables also exists at the same time and I can directly begin to create a simple test frontend to test if everything which I designed in the data model is usable in the world of the user. Sometimes that leads to the next loop going back to the model and so it is a constant loop until I think it's good.

But again: That's really not the optimal way, you only asked how we all do that. I can do that only because really nobody in my environment watch me and discuss about my methods or force me to use a specific way of developing, I'm completely free in my decisions and if I today want to work a little bit on the front end or do a little bit researching or work something on my base code or on my data model and so on. If you want to be a really GOOD programmer and want to enter a software company some time - don't follow my way. I was always a standalone programmer in my life and hope to be that until the end of my business life, but that's really not the normal way. I think the way mx is involved is the most usual way and the most professional way (but I have only some very vague idea about that from what he wrote above and elsewhere). And that of course does not mean that it is no professional way the other experts are going because I've NO idea about their environment and how they are doing their daily job.
It's what I described above: Going a straight way with some design patterns which were worked out by really better IT professionals than me in decades before which are proved to be good and constantly changed and improved (like we do with code), using similar proved and developed ways of testing, of documenting, of working together in teams, of versioning and so on. I also think that this gets more useful the bigger the team is and the more complicate the programming language is (writing a database frontend in .NET and WPF and ADO.NET is really harder than to create one in Access and VBA).

A word to the code library itself. I read somewhere in the documentations of Microsoft that an Interface, once created and latest at the point when it is first used, should never be changed anymore. If you need to change that, create a new one which is based on that and which implements the additional functionality.
I think that's a really important tip to be sure that your older applications don't break at any time. So in the example above where I wrote about my filter classes I always try to use that idea. If I implement new functions I add them as new methods or properties but keep the old unchanged or only slightly changes inside which does not affect the input or output data. If they need additional parameters I always add them as Optional and always with a default value which makes sure that the procedure works without using this parameter like before. They also will be documented in the remarks of the procedure and if I don't forget I also add since what version of the class it was added.
This method makes it possible to be always compatible to older applications and this is really important in cases like mx has described: If you need to have a central code library which is used by many applications at the same time.


DatabaseMX (Joe Anderson - Microsoft Access MVP)Database Architect / Systems AnalystCommented:
" But of course it also needs a very sharp development, exact testing, because you cannot simply change a library code and "hope it runs" if 30 or more databases using it."

Well, I don't develop in the 'hope it runs' mode, so this is a non issue. Nobody tests code more than I do. Maybe as much, but not more :-)

Back in the day when I was starting out as an engineer at Hughes Aircraft, my office mate (an older, experienced dude - at that time) had a motto that I have NEVER forgotten or failed to apply:

"Don't fix it in checkout"
I guess the tern 'checkout' would be loosely equivalent to 'beta test' in Today's terms.
I'm the 'office mate' guy today - if  you get my drift.

And my Group Leader at Hughes had this never forgotten motto:

"Assumptions Are The Root Of All Screws"

Noting has turned out to be more true during my engineering career :-)

"I think the way mx is involved is the most usual way and the most professional way (but I have only some very vague idea about that from what he wrote above and elsewhere)."

(relative to the company I've been with since 6-2006)
I actually don't work with a 'team' of Access developers, if that's what you mean. I'm the only ' Full Time Access Developer' in our large group, and quite possibly throughout the entire company of some 23K employees.  
Over the last few years, I've become the 'go to guy' for Access questions for those who are aware that I exist, lol. Nothing magic here - people have questions, I have answers (or find the answer). Guess I like to answer questions. And I can certainly thank my experience on EE for extending my Access knowledge 4x (or some number) over what is was prior.

So, to say I'm quite fortunate would be an understatement.  I/we fly under the IT Radar - and of course, they are not fond of Access. On the other hand, IT has no clue whatsoever what I've been able to accomplish because of ... the stellar 1Gbit fiber optic super stable WAN that we operate on. .  This  network has allowed me to do things never before thought possible (apparently) with Access :-)

Access makes total sense for the work that our group does and the databases needed. I am in total control of all our Access dbs. In fact, I'm about to inherit another dozen dbs from another group that merged with our group late last year. All of these will get revamped over time.

I still have several full on db apps running daily out in the wild - from my consulting days - not really over yet - I  just don't take on new outside projects very often.
Hi mx,

that's what I meant with the "vague idea"...:-)
My impression was really something else, more like that you are working in a team of developers.
Interesting to see that our situations in job are not so different - in my case it is an automotive company and I only work mainly on one database project, but also have some minor applications beside that. I also are not "accepted" by the local IT as I do not belong to them, I was hired by our Prototype department because they never got real solutions from the IT and there was also no external software company which wanted to do that so they hired me. So I'm also a kind of "underground IT"...:-)

I'm not so strict in my development but you're of course right, that are rules which every developer should use. I try to do my best to create applications of high quality but I'm also sure that a user can break any "seems to be the best" application with some clicks and inputs where a developer never have thought of doing it that way so I'm not in the illusion that I can create an application which is guaranteed to be bug free. What do you do to test your applications to make them best bugfree as possible?

I fully agree with you that answering questions in a forum like EE or others can not only help others but also your personal development skills, that's what I also said to developingprogrammer in an earlier thread.


developingprogrammerAuthor Commented:
List of car makers out of Germany (Wikipedia).
1.1 Audi
1.2 BMW
1.3 Ford Germany[1]
1.4 Mercedes-Benz
1.5 Opel
1.6 Porsche
1.7 Volkswagen

WHAO! i wish i'm that good next time! i want to be a computer commando!! haha = ))

yup yup guys,

1) what do yall do for bug testing?
2) what do yall do for code version control for Access? (i read through quite a few posts which some of yall answered before asking this - hrmm simply cause this question has a big part of super experts!! = )))   )

i'm currently reading this site for source control - and all the other articles are super fantastic and funny too! = )) i wonder if eric also comments on EE! = ))

thanks guys!!

P.S. could yall also help me take a look at this other question? it's a party question! = )
do yall use long procedures?
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Access

From novice to tech pro — start learning today.