Access Database

San Jose Radio Amateur Civil Emergency Service (SJ RACES) database of members is implemented in MS Access. When I got the task of maintaining it I tried to become familiar with manipulating the database in Access and Visual Basic. Unfortunately I did not find that to be easy or flexible. So I turned to VS c++, a language that was both easier and flexible.


The original interface several years ago was DAO. This worked in WinXP, Win7 and Visual Studio 2017 (VS17) in Win 11. I think it may have been made redundant in VS19. In any event Visual Studio 2022 (VS22) moved DAO to the obsolete pile. So a new set of interface modules was developed for the ODBC interface. The tough part was finding a way to discover the names of all the tables and the fields in the tables. Fortunately a method was developed and documented by Alexander Wiseman in 2002 and I've rewritten it in my style for use here.

MFC ODBC -- CDatabase, AccRcdSet, CRecordset

The internet is great as from it I found some code that allows access to the Access database through three classes: CDatabase, AccRcdSet, CRecordset. A small static library, AccessDB, was created in the Library/AccessDB directory that supports find all the tables and fields in the tables in an Access Database. This library is used by CodeGen to create classes to read and write to records in an Access Database. It is also include in the three applications that access the SJ RACES Database. Those applications are RWracesDB, RACEScontacts and RACEStraining.

CodeGen -- Create Modules for accessing an Access Database File

CodeGen's purpose is to produce c++ Modules such that an application may read and write to a MS Access Database Table. It does this by opening an Access database, reading the list of tables for the db and allowing the user to pick which tables to generate code for. By the way my definition of a module is: "a module is composed of a header file, <moduleName>.h, and a body file, <moduleName>.cpp and defines zero or more enums, constants, typedefs, functions, classes, templates, etc. A "Module Name" is usually the main class name in the module.

The ODBC modules are the AccessDB Project which is located in the Library directory. The modules created by this application for the SJ RACES database are housed in Library/RACESdb static library.