Repository: joyfullservice/msaccess-vcs-addin Branch: main Commit: 387f8ad1deb2 Files: 248 Total size: 2.9 MB Directory structure: gitextract_2zutbv_x/ ├── .gitattributes ├── .gitattributes.default ├── .github/ │ └── workflows/ │ └── update-wiki.yml ├── .gitignore ├── .gitignore.default ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Hook/ │ └── README.txt ├── LICENSE.txt ├── README.md ├── Ribbon/ │ ├── MSAccessVCS_Ribbon.code-workspace │ ├── MSAccessVCS_Ribbon.twinproj │ ├── Ribbon.xml │ └── Source/ │ ├── Resources/ │ │ └── MANIFEST/ │ │ └── #1.xml │ ├── Settings │ └── Sources/ │ ├── AddInRibbon.twin │ ├── DllRegistration.twin │ └── JsonConverter.twin ├── Testing/ │ ├── Linked.csv │ ├── Testing.accdb.src/ │ │ ├── dbs-properties.json │ │ ├── documents.json │ │ ├── forms/ │ │ │ ├── Form1.bas │ │ │ ├── frmColors.bas │ │ │ ├── frmColors.cls │ │ │ ├── frmExtendedChars.bas │ │ │ ├── frmExtendedChars.cls │ │ │ ├── frmMain.bas │ │ │ ├── frmMain.cls │ │ │ ├── frmTestMenu.bas │ │ │ └── frmTestMenu.cls │ │ ├── hidden-attributes.json │ │ ├── images/ │ │ │ ├── 1370126936_button_ok.json │ │ │ ├── Colors.json │ │ │ ├── button_error.json │ │ │ └── button_ok.json │ │ ├── imexspecs/ │ │ │ ├── Linked Link Specification.json │ │ │ └── Test 2.json │ │ ├── macros/ │ │ │ └── AutoExec.bas │ │ ├── menus/ │ │ │ ├── Demo Popup.json │ │ │ └── Special %5C%5C..%2F%2F Popup.json │ │ ├── modules/ │ │ │ ├── Module1.bas │ │ │ ├── basExtendedChars.bas │ │ │ ├── basUtility.bas │ │ │ ├── clsPerson.cls │ │ │ ├── clsPopupMenu.cls │ │ │ └── clsPublic.cls │ │ ├── nav-pane-groups.json │ │ ├── proj-properties.json │ │ ├── project.json │ │ ├── queries/ │ │ │ ├── qryFormControl.bas │ │ │ ├── qryFormControl.sql │ │ │ ├── qryNavigationPaneGroups.bas │ │ │ ├── qryNavigationPaneGroups.sql │ │ │ ├── qryTestSqlFormat.bas │ │ │ ├── qryTestSqlFormat.sql │ │ │ ├── qryVBAFunction.bas │ │ │ └── qryVBAFunction.sql │ │ ├── relations/ │ │ │ └── tblInternaltblSaveXML.json │ │ ├── reports/ │ │ │ ├── rptDefaultPrinter.bas │ │ │ ├── rptDefaultPrinter.cls │ │ │ ├── rptNavigationPaneGroups.bas │ │ │ ├── rptNavigationPaneGroups.cls │ │ │ ├── rptNavigationPaneGroups.json │ │ │ ├── rptNonDefaultPaperSize.bas │ │ │ ├── rptNonDefaultPaperSize.cls │ │ │ └── rptNonDefaultPaperSize.json │ │ ├── savedspecs/ │ │ │ └── Export-MSysIMEXColumns.json │ │ ├── tables/ │ │ │ ├── tblInternal.txt │ │ │ ├── tblLinkedAccess.xml │ │ │ └── tblSaveXML.xml │ │ ├── tbldefs/ │ │ │ ├── ImageFile.sql │ │ │ ├── ImageFile.xml │ │ │ ├── USysApplicationLog.sql │ │ │ ├── USysApplicationLog.xml │ │ │ ├── tblAttachment.sql │ │ │ ├── tblAttachment.xml │ │ │ ├── tblColors.json │ │ │ ├── tblHidden.sql │ │ │ ├── tblHidden.xml │ │ │ ├── tblInternal.sql │ │ │ ├── tblInternal.xml │ │ │ ├── tblLinkedAccess.json │ │ │ ├── tblLinkedCSV.json │ │ │ ├── tblLinkedExcel.json │ │ │ ├── tblSaveXML.sql │ │ │ └── tblSaveXML.xml │ │ ├── tdmacros/ │ │ │ └── tblSaveXML.xml │ │ ├── themes/ │ │ │ ├── Angles.thmx │ │ │ ├── Executive.thmx │ │ │ └── Office Theme.thmx │ │ ├── vbe-project.json │ │ ├── vbe-references.json │ │ ├── vbeforms/ │ │ │ ├── frmForm20.frm │ │ │ ├── frmForm20.frx │ │ │ └── frmForm20.json │ │ └── vcs-options.json │ └── Workbook.xlsx ├── Translation/ │ ├── MSAccessVCS.pot │ ├── en_TEST.po │ └── pt_BR.po ├── Version Control.accda.src/ │ ├── dbs-properties.json │ ├── documents.json │ ├── forms/ │ │ ├── frmVCSConflict.bas │ │ ├── frmVCSConflict.cls │ │ ├── frmVCSConflictList.bas │ │ ├── frmVCSConflictList.cls │ │ ├── frmVCSDatabase.bas │ │ ├── frmVCSDatabase.cls │ │ ├── frmVCSInstall.bas │ │ ├── frmVCSInstall.cls │ │ ├── frmVCSMain.bas │ │ ├── frmVCSMain.cls │ │ ├── frmVCSOptions.bas │ │ ├── frmVCSOptions.cls │ │ ├── frmVCSSplitFiles.bas │ │ ├── frmVCSSplitFiles.cls │ │ ├── frmVCSTableData.bas │ │ └── frmVCSTableData.cls │ ├── macros/ │ │ └── autoexec.bas │ ├── modules/ │ │ ├── IDbComponent.cls │ │ ├── IDbSchema.cls │ │ ├── clsAdpFunction.cls │ │ ├── clsAdpProcedure.cls │ │ ├── clsAdpServerView.cls │ │ ├── clsAdpTable.cls │ │ ├── clsAdpTrigger.cls │ │ ├── clsConcat.cls │ │ ├── clsConflictItem.cls │ │ ├── clsConflicts.cls │ │ ├── clsConnectionODBC.cls │ │ ├── clsDbCommandBar.cls │ │ ├── clsDbConnection.cls │ │ ├── clsDbDocument.cls │ │ ├── clsDbForm.cls │ │ ├── clsDbHiddenAttribute.cls │ │ ├── clsDbImexSpec.cls │ │ ├── clsDbMacro.cls │ │ ├── clsDbModule.cls │ │ ├── clsDbNavPaneGroup.cls │ │ ├── clsDbProjProperty.cls │ │ ├── clsDbProject.cls │ │ ├── clsDbProperty.cls │ │ ├── clsDbQuery.cls │ │ ├── clsDbRelation.cls │ │ ├── clsDbReport.cls │ │ ├── clsDbSavedSpec.cls │ │ ├── clsDbSharedImage.cls │ │ ├── clsDbTableData.cls │ │ ├── clsDbTableDataMacro.cls │ │ ├── clsDbTableDef.cls │ │ ├── clsDbTheme.cls │ │ ├── clsDbVbeForm.cls │ │ ├── clsDbVbeProject.cls │ │ ├── clsDbVbeReference.cls │ │ ├── clsDevMode.cls │ │ ├── clsDotEnv.cls │ │ ├── clsGitIntegration.cls │ │ ├── clsJob.cls │ │ ├── clsLblProg.cls │ │ ├── clsLog.cls │ │ ├── clsOptions.cls │ │ ├── clsPerformance.cls │ │ ├── clsPerformanceItem.cls │ │ ├── clsSchemaMsSql.cls │ │ ├── clsSchemaMySql.cls │ │ ├── clsSourceParser.cls │ │ ├── clsSqlFormatter.cls │ │ ├── clsTranslation.cls │ │ ├── clsVCSIndex.cls │ │ ├── clsVCSIndexItem.cls │ │ ├── clsVersionControl.cls │ │ ├── clsViewDiff.cls │ │ ├── clsWorker.cls │ │ ├── modAPI.bas │ │ ├── modAddInMenu.bas │ │ ├── modComAddIn.bas │ │ ├── modConnect.bas │ │ ├── modConstants.bas │ │ ├── modDatabase.bas │ │ ├── modEncoding.bas │ │ ├── modErrorHandling.bas │ │ ├── modExportOnSaveHook.bas │ │ ├── modFileAccess.bas │ │ ├── modFileWinAPI.bas │ │ ├── modFunctions.bas │ │ ├── modHash.bas │ │ ├── modImportExport.bas │ │ ├── modInstall.bas │ │ ├── modJsonConverter.bas │ │ ├── modLibReference.bas │ │ ├── modObjects.bas │ │ ├── modOrphaned.bas │ │ ├── modRepair.bas │ │ ├── modResource.bas │ │ ├── modRibbonStrings.bas │ │ ├── modSqlFunctions.bas │ │ ├── modStaging.bas │ │ ├── modTimer.bas │ │ ├── modUIAutomation.bas │ │ ├── modUnitTesting.bas │ │ ├── modUtcConverter.bas │ │ ├── modVCSUtility.bas │ │ ├── modVbeForm.bas │ │ ├── modWizHook.bas │ │ └── modZip.bas │ ├── nav-pane-groups.json │ ├── project.json │ ├── queries/ │ │ ├── qryMsSqlServerObjects.bas │ │ ├── qryMsSqlServerObjects.sql │ │ ├── qryMySqlServerObjects.bas │ │ ├── qryMySqlServerObjects.sql │ │ ├── qryNavPaneGroups.bas │ │ ├── qryNavPaneGroups.sql │ │ ├── qryStrings.bas │ │ ├── qryStrings.sql │ │ ├── qryTranslatedStrings.bas │ │ └── qryTranslatedStrings.sql │ ├── tbldefs/ │ │ ├── tblConflicts.sql │ │ ├── tblConflicts.xml │ │ ├── tblLanguages.sql │ │ ├── tblLanguages.xml │ │ ├── tblResources.sql │ │ ├── tblResources.xml │ │ ├── tblStrings.sql │ │ ├── tblStrings.xml │ │ ├── tblTableData.sql │ │ ├── tblTableData.xml │ │ ├── tblTranslation.sql │ │ └── tblTranslation.xml │ ├── themes/ │ │ └── Office Theme.thmx │ ├── vbe-project.json │ ├── vbe-references.json │ └── vcs-options.json └── Wiki/ ├── Documentation.md ├── Editing-and-Contributing.md ├── Export-Import-File-Types.md ├── FAQs.md ├── Home.md ├── Installation.md ├── Merge-Build.md ├── Options.md ├── Project-Scope.md ├── Quick-Start.md ├── Security-Considerations.md ├── Split-Files.md ├── Supported-Objects.md ├── Terminology-and-Style-Guide.md └── Translation.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ ############################################################################### # Set default behavior to automatically normalize line endings. ############################################################################### * text=auto ############################################################################### # Ensure that source files use CRLF for newlines, in case they are downloaded # in a compressed archive directly from GitHub. (Otherwise class modules may # not be imported correctly. See issue #150 for more details.) ############################################################################### # Most source files use this extension *.bas text eol=crlf # Class modules *.cls text eol=crlf # Some object definitions *.xml text eol=crlf # SQL output *.sql text eol=crlf # Forms 2.0 form definitions (rarely used) *.frm text eol=crlf # Common source file *.json text eol=crlf ############################################################################### # Clarify that the source language is VBA (Auto-detection not always accurate) # https://github.com/github/linguist/blob/master/docs/overrides.md ############################################################################### *.bas linguist-language=VBA *.cls linguist-language=VBA *.twin linguist-language=VBA # Git files *.gitattributes text *.gitattributes linguist-language=gitattributes # Ignore files (like .npmignore or .gitignore) *.*ignore text *.*ignore export-ignore ================================================ FILE: .gitattributes.default ================================================ # gitattributes template for Microsoft Access database source files # Source: https://github.com/joyfullservice/msaccess-vcs-integration # ############################################################################### # Set default behavior to automatically normalize line endings. ############################################################################### * text=auto ############################################################################### # Ensure that source files use CRLF for newlines, in case they are downloaded # in a compressed archive directly from GitHub. (Otherwise class modules may # not be imported correctly. See issue #150 for more details.) ############################################################################### # Most source files use this extension *.bas text eol=crlf # Class modules *.cls text eol=crlf # Some object definitions *.xml text eol=crlf # SQL output *.sql text eol=crlf # Forms 2.0 form definitions (rarely used) *.frm text eol=crlf # Common source file *.json text eol=crlf ############################################################################### # Clarify that the source language is VBA (Auto-detection not always accurate) # https://github.com/github/linguist/blob/master/docs/overrides.md ############################################################################### *.bas linguist-language=VBA *.cls linguist-language=VBA *.twin linguist-language=VBA # Git files *.gitattributes text *.gitattributes linguist-language=gitattributes # Ignore files (like .npmignore or .gitignore) *.*ignore text *.*ignore export-ignore ================================================ FILE: .github/workflows/update-wiki.yml ================================================ name: Update Wiki on: push: branches: - main paths: # Limit to changes to the wiki folder - 'Wiki/**' workflow_dispatch: jobs: update-wiki: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v3 - name: Set up git user run: | git config --global user.name "github-actions" git config --global user.email "github-actions@joyfullservice.com" - name: Clone the wiki repo run: | git clone "https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.wiki.git" wiki-tmp mkdir -p wiki cp -r wiki-tmp/.git wiki/ - name: Sync wiki folder run: | rsync -av --delete --exclude='.git' Wiki/ wiki/ - name: Commit and push changes run: | cd wiki if git status --porcelain | grep .; then git add . git commit -m "Update wiki from main/Wiki" git push else echo "No changes to commit" fi ================================================ FILE: .gitignore ================================================ # Version Control Add-in Binaries # (This should be built from source and not committed to version control) *.mdb *.accda *.accdb *.zip # Database lock files *.laccdb # Comment out the following line if you wish to include the log files in git. *.log # The local VCS index file is paired with the database and should not # be comitted to version control. vcs-index.json # Ignore any dotenv files (used for external database connections) *.env # TwinBasic ribbon project packages Ribbon/Source/Packages ================================================ FILE: .gitignore.default ================================================ # gitattributes template for Microsoft Access database source files # Website: https://github.com/joyfullservice/msaccess-vcs-addin # # Ignore Microsoft Access database binary files (Build these from source) *.accda *.accdb *.mdb # Ignore database lock files *.laccdb *.ldb # The local VCS index file is paired with the binary database file # and should not be comitted to version control. vcs-index.json # Ignore any dotenv files (used for external database connections) *.env # Ignore log files generated by the VCS Add-in # Comment out the following line if you wish to include log files in git. *.log ================================================ FILE: CHANGELOG.md ================================================ Change log ========== Ongoing Development ------------------- joyfullservice: As this project continues to move forward, many changes and updates are being made but not specifically documented in this change log. For details on updates since 2015, please review the commit messages in this repository. (If you use this project and would find more detailed change logs to be helpful, please let me know, and I will take that into consideration.) Version 1.1.0 - 15 May 2015 ---------------------------- joyfullservice: * Performed some significant refactoring to use the system as a reference library rather than a collection of modules that need to be added to each project. * Added support for exporting VBE objects directly, allowing drag-and-drop within projects in the IDE. * Standardized module names (special prefix no longer needed) * Source folder name changed to be specific to the current database (avoids unexpected results when working with two databases in the same folder.) * Source folders only created when they will contain content * General code cleanup and organization * Improved debug output in debug mode * Converted module constants to input parameters for debug mode and tables to save data * Updated sample database Version 1.0.0 - 11 Mar 2015 ---------------------------- jwbrookes: * Added support for Table Data Macros * Added support for Linked Tables (supports relative paths for linked files) * Added support for Print Variables in Reports (Page size and orientation) * Added support for Relation for all types of table * LoadVCS warnings removed when no object delete is required * Removed elements from Report export that change constantly but don't affect import * Fixed query import bug (complex queries being rearranged on import) * Fixed missing constraints in table export prmills: * Added support for bit fields in table Import/Export * Added support for References without GUIDs * Export all table data with `INCLUDE_TABLES = "*"` Version 0.12.0 - 28 Jan 2015 ---------------------------- jwbrookes: * Refactored AppCodeImportExport into several modules * Added VCS_Loader, a module to import multiple vba modules into a database Version 0.11.1 - 14 Jan 2015 --------------------------- jwbrookes: * Fixed bug in ExportTableDef function * Removed redundant DeleteFile function (had been left commented out in the module) Version 0.11 - 01 May 2014 ------------------------- matonb: * Removed DeleteFile function and replaced calls to Kill with FileSystemObject.DeleteFile Version 0.10 - 09 Mar 2014 ------------------------- matonb: * Added DoEvents in loops to avoid "Unresponsive" state. Version 0.9 - 15 Feb 2014 ------------------------- matonb: * Aggressive Sanitise, moved BaseInfo from "Block" regex to Line level. * Changed line level skipping to include lines with deeper indendation the follow. This catches split lines mostly found in BaseInfo exports. Version 0.8 - 14 Feb 2014 ------------------------- matonb: * Aggressive Sanitise now excludes "BaseInfo" lines. These lines were seen to be randomly switching between being empty, not present or containing SQL on an arbitary basis. Version 0.7 - 06 Jul 2013 ------------------------- matonb: * Replaced TempFile function. * Temporary file names now generated via external MS libraries. * Functions using TempFile updated to only call TempFile function once. * Temporary file path and name stored in tmepFileName variable. * Temporary files deleted when done. * Changed db declaration in ImportProject to DAO.database. Version 0.6 - 06 Jul 2013 ------------------------- matonb: * AppcodeImportExport excluded from ExportAllSource * Added ImportProject sub-routine, Deletes all forms, macros, modules and queries before calling ImportAllSource. By clearing out the existing objects, you know that your database only contains code from your version control database. Excludes *AppCodeImportExport* Version 0.5 - 29 May 2013 -------------------------- matonb: * All "exclusion" patterns are now matched by regex. * Added StripPublishOption constant. If set to _True_ the following lines are also excluded from the export files * dbByte "PublishToWeb" ="1" * PublishOption =1 * Added DeleteFile(FileName) function The function tries to delete _FileName_ three (3) times before giving up. A delay of 100ms is introduced between delete attempts should the first fail. Version 0.4 - 19 Apr 2013 -------------------------- matonb: * Added dbLongBinary "DOL" to aggressive sanitize, these statements were appearing in queries and being flagged by git as modified in files that hadn't been touched by developers. Version 0.3.2 - 8 Apr 2013 -------------------------- matonb: * 0.3.1 Patched - Serious Problem: SanitizeTextFiles If logic removed all lines containing "Begin". * 0.3.2 Replaced if block for skipping code sections in SanitizeTextFiles with regular expression. Version 0.3 - 6 Apr 2013 ------------------------ bkidwell: * Sanitize query exports. * Fixed SERIOUS TYPO in UCS2-to-UTF-8 conversion (wrong threshold for 2 byte versus 3 byte symbol in output stream). * AggressiveSanitize default True. matonb: * Added AggressiveSanitize constant, it's a number to allow for different levels in the future. ~~Default False.~~ * Added Skipping for GUID & Namemap in aggressive sanitize mode. * ~~If AggressiveSanitize is on, also sanitize query exports.~~ * Append Number of objects imported/exported to information lines in immediate window. * Updated readme (removed references to terminal window). * Close all open forms and reports when importing and exporting because you can't import an open form or report. Version 0.2 - 4 Apr 2013 ------------------------ matonb: * Added dbLongBinary "DOL" to SkipList in SanitizeTextFiles. * Added Source directory check to ImportAllSource, pops up a message box if missing. * Only create source directories if there is something to export. bkidwell: * Removed external executable for converting UCS-2-little-endian to and from UTF-8; replaced with VB6 methods. * Added demo database to the repository. * Removed the need for a special "export_[name]" query to export and import a lookup table. * Added check to determine if Queries, Forms, etc. are exported from THIS database (depending on which version of Access created it) uses UCS-2-little-endian, or a legacy 8-bit Windows character set. Skip converting to/from UTF-8 if not using UCS-2, because the point of the conversion was to avoid writing 0x00 bytes in the text files and confuse diff/merge tools. Version 0.1 - 22 Oct 2012 ------------------------- Initial release ================================================ FILE: CONTRIBUTING.md ================================================ Found a Problem? Have an Idea? ============= The easiest way to contribute is to create a detailed [Issue](https://github.com/joyfullservice/msaccess-vcs-integration/issues). Be sure to include details about the version of OS, Access, and VCS add-in. If you can, provide a [Minimal Reproducible Example](https://stackoverflow.com/help/minimal-reproducible-example) of the problem. Also be sure to check out the [Project Wiki](https://github.com/joyfullservice/msaccess-vcs-integration/wiki) which contains detailed documentation and other helpful tips for using this add-in. Development Version --------- If you want the very latest updates since the last published release, you will need to build it from source. Here is how to go from GitHub to git, to Access: * Make sure you have a fairly recent version of the add-in installed. If not: * Download the latest release. * Install the add-in. (Just open *Version Control.accda*.) * Clone this repository. * Pull your clone down to your local machine. * Choose a branch in git. (Typically `dev`) * Use the add-in to *Build From Source*, selecting the cloned `Version Control.accda.src` folder. * Run the newly compiled *Version Control.accda* file to install the development version. Making your first Pull Request (PR) --------- A *Pull Request* is how you can propose that your code changes be included in the main project. (This project is the work of many people who have donated their efforts to make it better for everyone.) If you followed the steps to get to the Development Version then you can follow these steps to go back from Access to git, back up to GitHub: * *Optional: For larger changes, you should consider making a branch that describes the changes you are proposing.* * Open the development copy of *Version Control.accda* from the cloned GitHub project. * Perform testing on your development version. * Make updates to the database project. (This is where the magic happens) * When you are ready to make a commit run the **Deploy** procedure by typing `Deploy` into the VBA immediate window and press **Enter**. This will: * Increment the version number. * Export the project to source. * Install the version you have open. * Close Access. * Open an Access project and ensure that the version installed matches the new version you just deployed. * Perform testing to confirm that your new version works as expected. * Make a git **commit*** and briefly describe your changes in the commit notes. (You can add more verbose details in your pull request.) * _*When creating the commit, please select only the files that reflect the actual changes you are proposing. It is usually not necessary to include auto-generated files that don't include substantive or intended changes._ * **Push** your branch up to your cloned repository. * Make a **pull request** to the upstream project! Be sure to clearly describe what you did and why in the pull request. This will allow reviewers to better understand why your PR should be merged. * Pull requests should target the `dev` branch, where most active development takes place. `Master` branch PRs should be mainly limited to Wiki changes. Critical bug fixes can be cherry-picked over to the `master` branch if needed. * *Tip: If you have many different types of changes to propose, please use different pull requests for each of them. That will be easier to review and implement them individually.* Thank you again for your support for the Microsoft Access development community!! ================================================ FILE: Hook/README.txt ================================================ The source code for the hook library is licensed under LGPL-2.1, and can be found in the following repository: https://github.com/bclothier/AccessAppHook ================================================ FILE: LICENSE.txt ================================================ Copyright © 2012 Brendan Kidwell et al Use of msaccess-vcs-integration and documentation are subject to the following BSD-style license: Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ================================================ FILE: README.md ================================================ Version Control Add-in (msaccess-vcs-addin) ====================== *for Microsoft Access Database Development* ---------- Supports Microsoft Access 2010, 2013, 2016, 2019, and 365 About ----- Easily export your Microsoft Access Database objects for use with a version control system like **GitHub** or **GitLab**. (Allows you to track code changes over time, and even collaborate with other developers on the same project.) This project functions as a **Microsoft Access add-in**, allowing you to use a custom ribbon toolbar to export the objects and source code from the currently open Microsoft Access Database. ![Export-All](img/gui-demo.gif) Development Focus ----------------- This project was originally developed to manage the in-house development of numerous Microsoft Access database applications and integrations, some of which are very complex with hundreds of components. The development focus of this particular add-in is primarily in the following areas: * **Intuitive user interface** for managing code exports and related options, instead of having to set all these options in code or remember commands to run in the immediate window. * **Ribbon Toolbar** with 64-bit support! Thanks to some fantastic work by Wayne Phillips on the [twinBASIC](https://twinbasic.com/) project, we have a practical *and easy* way to implement a user-friendly ribbon through a light-weight COM Add-in wrapper that passes commands back to the Access add-in. * **Optimal performance**, even with very complex databases. This is largely achieved through the indexing of database components to export only items that have changed since the last export. Most databases can be exported in a few seconds or less. * **Extensive support** for different types of database components beyond the standard database objects. See [Supported Objects](https://github.com/joyfullservice/msaccess-vcs-addin/wiki/Supported-Objects) for more details on what can be exported from a database. * **Build From Source** - Using this add-in you can actually build a database entirely from exported source files. This allows collaborative development where changes can be managed at the source code level. See this [this link](https://github.com/joyfullservice/msaccess-vcs-addin/wiki/Documentation) for additional details. * **Code quality** - I am doing my best to continually refine and organize the code into efficient and well commented logical flows. This is a work in progress, but I feel it is critical to the long-term success of the project. * **ADP Project** support. While this is an outdated technology, there are some of us that still support and maintain complex ADP projects. This tool has been extended to export objects from ADP projects, including server-side SQL object details. Getting Started --------- Simply download the add-in from the [**Releases**](https://github.com/joyfullservice/msaccess-vcs-addin/releases) page, and run the file. It will install or update the add-in for you. Additional notes on installation and use can be found on the [project wiki](https://github.com/joyfullservice/msaccess-vcs-addin/wiki). [Quick Start](https://github.com/joyfullservice/msaccess-vcs-addin/wiki/Quick-Start) is a simple overview to help you test out this add-in on your project in less than five minutes. Contributing ------------ Interested in adding a feature or fixing a bug? [Issues](https://github.com/joyfullservice/msaccess-vcs-addin/issues) and [pull requests](https://github.com/joyfullservice/msaccess-vcs-addin/pulls) are welcome for this project. [This page](/CONTRIBUTING.md) describes some guidelines and the types of contributions would be most helpful. Development Roadmap ------------------- In addition to fixing bugs and adding features here and there, here are some of the long-term goals I want to implement in the future: * Release Version 4 (Early 2024). This version includes a number of substantial updates including an integrated ribbon toolbar interface, support for merging changes into an existing database (instead of having to build entirely from source) and numerous other enhancements. * Add support for translations in the user interface. After version 4 rolls out, I am hoping to finishing out some functionality to translate the user interface for other languages. While most International developers are at least somewhat familiar with English, I feel like this would make the tool even more comfortable for everyday use. * Finish an automated testing process where a complex sample database can be exported, reconstructed, exported again, and compared with the original export to ensure that the build process is fully constructing the database from the exported source files. * Build out an automated deployment workflow using a GitLab runner that is triggered on a commit to automatically build, test, and deploy a database project. Discussion on this idea can be found [here](https://github.com/joyfullservice/msaccess-vcs-addin/issues/51). Project History ---------------- This project was originally forked from [timabell/msaccess-vcs-integration](https://github.com/timabell/msaccess-vcs-integration) in 2015, but has been extensively rewritten over the years. In 2023 the project was detached from the upstream fork and converted to a stand-alone project. ================================================ FILE: Ribbon/MSAccessVCS_Ribbon.code-workspace ================================================ { "folders": [ { "name": "BUILD CONFIGURATIONS", "uri": "twinbasic-builds:/___BUILDS/" }, { "name": "PROJECT: MSAccessVCSLib", "uri": "twinbasic:/MSAccessVCSLib/" } ], "settings": { "window.title": "${dirty}MSAccessVCSLib${separator}twinBASIC", "files.associations": { "*.module": "php", "*.mht": "html", "*.pwmacro": "powershell", "/___BUILDS/*": "twinbasicBuildConfig", "/___BUILDS/win64": "twinbasicBuildConfigACTIVE", "/*/Settings": "twinbasicProjectConfig" }, "files.defaultLanguage": "twinbasic", "editor.trimAutoWhitespace": false, "editor.wordBasedSuggestions": false, "editor.quickSuggestionsDelay": 350, "editor.semanticTokenColorCustomizations": { "[Monokai Dimmed]": { "enabled": true, "rules": { "basicClass": { "foreground": "#e4c685" }, "basicLibrary": { "foreground": "#bb6464" }, "basicParameterByVal": { "foreground": "#9b79b3" }, "basicParameterByRef": { "foreground": "#9b79b3" }, "basicUDT": { "foreground": "#a5630d" }, "basicModule": { "foreground": "#a8a887" }, "basicBuiltInDataType": { "foreground": "#b1551f" }, "basicVariable": { "foreground": "#8b8b52" }, "basicField": { "foreground": "#f59e1b" }, "basicEnum": { "foreground": "#738dc5" }, "basicEnumMember": { "foreground": "#a1adc7" }, "basicKeyword": { "foreground": "#6c8eda" }, "basicLiteralString": { "foreground": "#aeca89", "fontStyle": "italic" }, "basicOperator": { "foreground": "#80a1a5" }, "basicGenericDataType": { "foreground": "#eeda83" }, "basicGenericValue": { "foreground": "#86ee83" }, "basicReturnValue": { "foreground": "#ee8391" }, "basicMe": { "foreground": "#a13838" }, "basicComment": { "foreground": "#448a63" }, "basicNamedArgument": { "foreground": "#74384c" }, "basicMultiLineSeperator": { "foreground": "#74384c" }, "basicLateBoundFunction": { "foreground": "#e7ac5f" }, "basicLineLabel": { "foreground": "#ccc6be", "underline": true }, "basicLineNumber": { "foreground": "#ccc6be", "underline": true }, "basicLiteralNumeric": { "foreground": "#aeca89" }, "basicLiteralBoolean": { "foreground": "#c495d3" }, "basicLiteralNull": { "foreground": "#c495d3" }, "basicLiteralNothing": { "foreground": "#c495d3" }, "basicLiteralEmpty": { "foreground": "#c495d3" }, "basicLiteralDate": { "foreground": "#c495d3" }, "basicConditionalCompilationDirective": { "foreground": "#ad8c98" }, "basicConditionalCompilationExcludedCode": { "foreground": "#989599", "italic": true }, "basicVariableUndeclared": { "foreground": "#b9929c" }, "basicFunction": { "foreground": "#cf9a5d" }, "basicDeclareFunction": { "foreground": "#bb956a" }, "basicSub": { "foreground": "#cf9a5d" }, "basicDeclareSub": { "foreground": "#bb956a" }, "basicPropertyGet": { "foreground": "#864f0f" }, "basicPropertyLet": { "foreground": "#864f0f" }, "basicPropertySet": { "foreground": "#864f0f" }, "basicGlobalVariablePrivate": { "foreground": "#f38096" }, "basicGlobalVariablePublic": { "foreground": "#d34056" }, "basicAttribute": { "foreground": "#5c5c53", "italic": false }, "basicLineContinuationCharacter": { "foreground": "#808080" } } }, "[Default Dark+]": { "enabled": true, "rules": { "basicClass": { "foreground": "#e4c685" }, "basicLibrary": { "foreground": "#bb6464" }, "basicParameterByVal": { "foreground": "#9b79b3" }, "basicParameterByRef": { "foreground": "#9b79b3" }, "basicUDT": { "foreground": "#a5630d" }, "basicModule": { "foreground": "#a8a887" }, "basicBuiltInDataType": { "foreground": "#b1551f" }, "basicVariable": { "foreground": "#8b8b52" }, "basicField": { "foreground": "#f59e1b" }, "basicEnum": { "foreground": "#738dc5" }, "basicEnumMember": { "foreground": "#a1adc7" }, "basicKeyword": { "foreground": "#6c8eda" }, "basicLiteralString": { "foreground": "#aeca89", "fontStyle": "italic" }, "basicOperator": { "foreground": "#80a1a5" }, "basicGenericDataType": { "foreground": "#eeda83" }, "basicGenericValue": { "foreground": "#86ee83" }, "basicReturnValue": { "foreground": "#ee8391" }, "basicMe": { "foreground": "#a13838" }, "basicComment": { "foreground": "#448a63" }, "basicNamedArgument": { "foreground": "#74384c" }, "basicMultiLineSeperator": { "foreground": "#74384c" }, "basicLateBoundFunction": { "foreground": "#e7ac5f" }, "basicLineLabel": { "foreground": "#ccc6be", "underline": true }, "basicLineNumber": { "foreground": "#ccc6be", "underline": true }, "basicLiteralNumeric": { "foreground": "#aeca89" }, "basicLiteralBoolean": { "foreground": "#c495d3" }, "basicLiteralNull": { "foreground": "#c495d3" }, "basicLiteralNothing": { "foreground": "#c495d3" }, "basicLiteralEmpty": { "foreground": "#c495d3" }, "basicLiteralDate": { "foreground": "#c495d3" }, "basicConditionalCompilationDirective": { "foreground": "#ad8c98" }, "basicConditionalCompilationExcludedCode": { "foreground": "#989599", "italic": true }, "basicVariableUndeclared": { "foreground": "#b9929c" }, "basicFunction": { "foreground": "#cf9a5d" }, "basicDeclareFunction": { "foreground": "#bb956a" }, "basicSub": { "foreground": "#cf9a5d" }, "basicDeclareSub": { "foreground": "#bb956a" }, "basicPropertyGet": { "foreground": "#864f0f" }, "basicPropertyLet": { "foreground": "#864f0f" }, "basicPropertySet": { "foreground": "#864f0f" }, "basicGlobalVariablePrivate": { "foreground": "#f38096" }, "basicGlobalVariablePublic": { "foreground": "#d34056" }, "basicAttribute": { "foreground": "#5c5c53", "italic": false }, "basicLineContinuationCharacter": { "foreground": "#808080" } } }, "[Default Light+]": { "enabled": true, "rules": { "basicClass": { "foreground": "#000000" }, "basicLibrary": { "foreground": "#000000" }, "basicParameterByVal": { "foreground": "#000000" }, "basicParameterByRef": { "foreground": "#000000" }, "basicUDT": { "foreground": "#000000" }, "basicModule": { "foreground": "#000000" }, "basicBuiltInDataType": { "foreground": "#315dbb" }, "basicVariable": { "foreground": "#000000" }, "basicField": { "foreground": "#000000" }, "basicEnum": { "foreground": "#000000" }, "basicEnumMember": { "foreground": "#000000" }, "basicKeyword": { "foreground": "#315dbb" }, "basicLiteralString": { "foreground": "#000000" }, "basicOperator": { "foreground": "#315dbb" }, "basicGenericDataType": { "foreground": "#000000" }, "basicGenericValue": { "foreground": "#000000" }, "basicReturnValue": { "foreground": "#000000" }, "basicMe": { "foreground": "#315dbb" }, "basicComment": { "foreground": "#26774a" }, "basicNamedArgument": { "foreground": "#000000" }, "basicMultiLineSeperator": { "foreground": "#000000" }, "basicLateBoundFunction": { "foreground": "#000000" }, "basicLineLabel": { "foreground": "#000000", "italic": true }, "basicLineNumber": { "foreground": "#000000", "italic": true }, "basicLiteralNumeric": { "foreground": "#000000" }, "basicLiteralBoolean": { "foreground": "#315dbb" }, "basicLiteralNull": { "foreground": "#315dbb" }, "basicLiteralNothing": { "foreground": "#315dbb" }, "basicLiteralEmpty": { "foreground": "#315dbb" }, "basicLiteralDate": { "foreground": "#000000" }, "basicConditionalCompilationDirective": { "foreground": "#315dbb" }, "basicConditionalCompilationExcludedCode": { "foreground": "#d2cdd3" }, "basicVariableUndeclared": { "foreground": "#000000" }, "basicFunction": { "foreground": "#000000" }, "basicDeclareFunction": { "foreground": "#000000" }, "basicSub": { "foreground": "#000000" }, "basicDeclareSub": { "foreground": "#000000" }, "basicPropertyGet": { "foreground": "#000000" }, "basicPropertyLet": { "foreground": "#000000" }, "basicPropertySet": { "foreground": "#000000" } } } }, "workbench.colorCustomizations": { "separators.classes.borderColor": "#ffffff54", "separators.constructors.borderColor": "#ffffff54", "separators.enums.borderColor": "#ffffff54", "separators.functions.borderColor": "#ffffff54", "separators.interfaces.borderColor": "#ffffff54", "separators.methods.borderColor": "#ffffff54", "separators.namespaces.borderColor": "#ffffff54", }, "twinbasic.buildConfigurationData": { "buildConfigurations": [ { "configuration.name": "win32", "configuration.inherits": "Defaults", "compiler.target": "win32", "compiler.autoRestart": true, "project.warnings": { "ignored": [], "errors": [] } }, { "configuration.name": "win64", "configuration.inherits": "Defaults", "compiler.target": "win64", "compiler.autoRestart": true } ] }, "twinbasic.projectPaths": [ "\\helloworld.twinproj" ], "workbench.tree.indent": 20, "workbench.iconTheme": "twinbasic", "debug.openDebug": "neverOpen", "twinbasic.hasCheckedOpenDebugSetting": true, "twinbasic.hasCheckedCompactFolders": true, "twinbasic.hasCheckedOpenDebugSetting2": true, "debug.console.historySuggestions": false, "twinbasic.hasSetDebugConsoleHistorySuggestionsOff": true, "editor.formatOnType": true, "twinbasic.hasCheckedFormatOnType": true, "debug.saveBeforeStart": "none", "twinbasic.hasCheckedSaveBeforeStart": true }, "launch": { "version": "0.2.0", "configurations": [ { "type": "twindebug", "request": "launch" } ] } } ================================================ FILE: Ribbon/Ribbon.xml ================================================