diff --git a/.gitignore b/.gitignore
index c6f3b71..c516368 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,19 @@
-/*.accdb
+# 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
diff --git a/source/Export.log b/source/Export.log
deleted file mode 100644
index 642c7c8..0000000
--- a/source/Export.log
+++ /dev/null
@@ -1,216 +0,0 @@
--------------------------------------
-Beginning Export of Source Files
-ACLibImportWizard.accdb
-VCS Version 4.1.2-jp.2
-Full Path: C:\Daten\Projekte\CodeLib\ACLibImportWizard\ACLibImportWizard.accdb
-Export Folder: C:\Daten\Projekte\CodeLib\ACLibImportWizard\source\
-Performing Full Export
-09.06.2025 13:22:32
-Running VcsRunBeforeExport...
--------------------------------------
-Scanning source files...
-No db connections found in this database.
-No vbe forms found in this database.
-No saved specs found in this database.
-No commandbars found in this database.
-No shared images found in this database.
-No imex specs found in this database.
-No queries found in this database.
-No reports found in this database.
-No table data macros found in this database.
-No relations found in this database.
--------------------------------------
-Exporting project...
- ACLibImportWizard.accdb
-[1]
--------------------------------------
-Exporting vb project...
- ACLibImportWizard
-[1]
--------------------------------------
-Exporting vbe references...
- VBIDE
-[3]
--------------------------------------
-Exporting proj properties...
- Current Project Properties (Access)
-[1]
--------------------------------------
-Exporting modules...
- AccUnit_TestClassFactory
- ApplicationHandler_DirTextbox
- WinApiToolsFactory
- _config_Application
- ACLibConfiguration
- modWizardTools
- WinApiFileInfo
- StringTools
- ApplicationHandler_ExtensionCollection
- L10nDict
- FileTools
- _initApplication
- CodeModuleProcedure
- StringCollection
- CodeModuleHeaderItem
- ACLibFileManager
- modErrorHandler
- ApplicationHandler
- CodeModuleReader
- DaoHandler
- TempDbHandler
- GitHubTreeNodeTests
- AccessProgressBar
- L10nTools
- WinApiLayoutTools
- WinApiShellTools
- WinApiTools
- ACLibGitHubImporter
- defGlobal_ACLibImportWizard
- _AccessCodeLib_license
- ApplicationHandler_AppFile
- modApplication
- WinApiWindowTools
- JsonProperties
- DaoTools
- SqlTools
- WinApiImageTools
- WinApiShortcutMenu
- GitHubTreeJsonConverter
- JsonProperty
- GitHubTreeNode
- AccUnit_Factory
- modMSAccessVcsSupport
-[43]
--------------------------------------
-Exporting themes...
- Office
-[1]
--------------------------------------
-Exporting db properties...
- Database Properties (DAO)
-[56]
--------------------------------------
-Exporting tables...
- L10n_Dict
- Sanitized in 0,001 seconds.
- L10n_Dict (SQL)
- tab1DS
- Sanitized in 0,001 seconds.
- tab1DS (SQL)
- USys_AppFiles
- Sanitized in 0,001 seconds.
- USys_AppFiles (SQL)
- USysRegInfo
- Sanitized in 0,001 seconds.
- USysRegInfo (SQL)
-[4]
--------------------------------------
-Exporting forms...
- ACLibRepositoryTreeForm
- Sanitized in 0,003 seconds.
- ACLibImportWizardForm
- Sanitized in 0,009 seconds.
-[2]
--------------------------------------
-Exporting macros...
- Autoexec
- Sanitized in 0,000 seconds.
-[1]
--------------------------------------
-Exporting table data...
- L10n_Dict
- Sanitized in 0,002 seconds.
- tab1DS
- Sanitized in 0,001 seconds.
- USys_AppFiles
- Sanitized in 0,001 seconds.
- USysRegInfo
- Sanitized in 0,001 seconds.
-[4]
--------------------------------------
-Exporting doc properties...
- Database Documents
-[6]
--------------------------------------
-Exporting nav pane groups...
- Groups
-[1]
--------------------------------------
-Exporting hidden attributes...
- Database hidden attributes
-[3]
--------------------------------------
-Done. (1,55 seconds)
-
---------------------------------------------------
- PERFORMANCE REPORTS
---------------------------------------------------
-Category Count Seconds
---------------------------------------------------
-Modules 43 0,80
-Forms 2 0,19
-Table Data 4 0,13
-Tables 4 0,06
-DB Properties 56 0,05
-Doc Properties 6 0,04
-Themes 1 0,04
-Project 1 0,03
-Nav Pane Groups 1 0,03
-Hidden Attributes 3 0,03
-VBE References 3 0,02
-Proj Properties 1 0,02
-Macros 1 0,02
-VB Project 1 0,02
-CommandBars 0 0,02
-DB Connections 0 0,00
-Shared Images 0 0,00
-Table Data Macros 0 0,00
-Relations 0 0,00
-IMEX Specs 0 0,00
-Queries 0 0,00
-VBE Forms 0 0,00
-Saved Specs 0 0,00
-Reports 0 0,00
---------------------------------------------------
-TOTALS: 127 1,49
---------------------------------------------------
-
---------------------------------------------------
-Operations Count Seconds
---------------------------------------------------
-Read File Bytes 55 0,31
-Increment Progress 126 0,28
-Read File 54 0,23
-Export VBE Module 43 0,14
-App.ExportXML() 8 0,06
-Convert to JSON 430 0,06
-Console Updates 4 0,05
-Scan DB Objects 1 0,04
-App.SaveAsText() 3 0,03
-Write File 68 0,03
-Sanitize VBA Code 45 0,02
-Get VBA Hash 45 0,02
-Get File Property Hash 59 0,02
-Delete File 51 0,01
-Sanitize File 3 0,01
-Compute SHA256 174 0,01
-modFileAccess.VerifyPath 80 0,01
-Get Modified Date 112 0,00
-Sanitize XML 8 0,00
-Format XML 8 0,00
-RunBeforeExport 1 0,00
-Save Table SQL 4 0,00
-Read File DevMode 2 0,00
-Check for linked table 4 0,00
-Quick Count Objects 1 0,00
-Export Theme 1 0,00
-Quick Count Files 1 0,00
-Clear Orphaned Files 9 0,00
-Close Open Objects 1 0,00
-Clear Files by Ext 6 0,00
-modFileAccess.GetUncPath 1 0,00
---------------------------------------------------
-Other Operations 0,19
---------------------------------------------------
-
-
diff --git a/source/dbs-properties.json b/source/dbs-properties.json
index 2c0b734..b70bfe3 100644
--- a/source/dbs-properties.json
+++ b/source/dbs-properties.json
@@ -52,6 +52,10 @@
"Value": 1,
"Type": 4
},
+ "Clear Cache on Close": {
+ "Value": 0,
+ "Type": 4
+ },
"CollatingOrder": {
"Value": 1033,
"Type": 3
@@ -64,10 +68,6 @@
"Value": 0,
"Type": 4
},
- "DefaultBackupLocation": {
- "Value": "\u0000",
- "Type": 10
- },
"DesignMasterID": {
"Value": "",
"Type": 15
@@ -101,7 +101,15 @@
"Type": 4
},
"NavPane Width": {
- "Value": 719,
+ "Value": 215,
+ "Type": 4
+ },
+ "Never Cache": {
+ "Value": 0,
+ "Type": 4
+ },
+ "Option to enable Monaco SQL Editor": {
+ "Value": 1,
"Type": 4
},
"Perform Name AutoCorrect": {
@@ -133,7 +141,7 @@
"Type": 4
},
"Show Navigation Pane Search Bar": {
- "Value": 0,
+ "Value": 1,
"Type": 4
},
"Show Values in Indexed": {
@@ -208,6 +216,10 @@
"Value": 0,
"Type": 4
},
+ "Use Microsoft Access 2007 compatible cache": {
+ "Value": 0,
+ "Type": 4
+ },
"UseAppIconForFrmRpt": {
"Value": true,
"Type": 1
@@ -217,7 +229,7 @@
"Type": 2
},
"Version": {
- "Value": "14.0",
+ "Value": "12.0",
"Type": 12
},
"WebDesignMode": {
diff --git a/source/forms/ACLibImportWizardForm.bas b/source/forms/ACLibImportWizardForm.bas
index 9895b35..5baa5fa 100644
--- a/source/forms/ACLibImportWizardForm.bas
+++ b/source/forms/ACLibImportWizardForm.bas
@@ -17,10 +17,10 @@ Begin Form
Width =10214
DatasheetFontHeight =11
ItemSuffix =91
- Left =1560
- Top =2933
- Right =14280
- Bottom =12743
+ Left =3255
+ Top =2940
+ Right =15975
+ Bottom =12750
OnUnload ="[Event Procedure]"
RecSrcDt = Begin
0x212b6fd80e9ce340
@@ -174,6 +174,7 @@ Begin Form
Tag ="LANG:"
ControlTipText ="Select local root directory"
HorizontalAnchor =1
+
LayoutCachedLeft =9698
LayoutCachedTop =548
LayoutCachedWidth =10095
@@ -208,6 +209,7 @@ Begin Form
ControlTipText ="Attach file(s) with selection dialog"
UnicodeAccessKey =83
HorizontalAnchor =1
+
LayoutCachedLeft =9695
LayoutCachedTop =1350
LayoutCachedWidth =10092
@@ -230,6 +232,7 @@ Begin Form
BeforeUpdate ="[Event Procedure]"
AfterUpdate ="[Event Procedure]"
HorizontalAnchor =2
+
LayoutCachedLeft =4709
LayoutCachedTop =593
LayoutCachedWidth =9605
@@ -266,6 +269,7 @@ Begin Form
OnGotFocus ="[Event Procedure]"
UnicodeAccessKey =65
HorizontalAnchor =2
+
LayoutCachedLeft =120
LayoutCachedTop =1375
LayoutCachedWidth =9141
@@ -303,6 +307,7 @@ Begin Form
Tag ="LANG:"
ControlTipText ="Attach file from text line"
HorizontalAnchor =1
+
LayoutCachedLeft =9202
LayoutCachedTop =1350
LayoutCachedWidth =9599
@@ -333,6 +338,7 @@ Begin Form
UnicodeAccessKey =102
HorizontalAnchor =2
VerticalAnchor =2
+
LayoutCachedLeft =120
LayoutCachedTop =2114
LayoutCachedWidth =10099
@@ -370,6 +376,7 @@ Begin Form
UnicodeAccessKey =73
HorizontalAnchor =1
VerticalAnchor =1
+
LayoutCachedLeft =7042
LayoutCachedTop =7456
LayoutCachedWidth =9247
@@ -389,6 +396,7 @@ Begin Form
UnicodeAccessKey =109
HorizontalAnchor =2
VerticalAnchor =1
+
LayoutCachedLeft =120
LayoutCachedTop =5520
LayoutCachedWidth =10102
@@ -416,6 +424,7 @@ Begin Form
OptionValue =0
Name ="Option17"
VerticalAnchor =1
+
LayoutCachedLeft =359
LayoutCachedTop =6350
LayoutCachedWidth =619
@@ -445,6 +454,7 @@ Begin Form
OptionValue =2
Name ="Option19"
VerticalAnchor =1
+
LayoutCachedLeft =359
LayoutCachedTop =6740
LayoutCachedWidth =619
@@ -474,6 +484,7 @@ Begin Form
OptionValue =1
Name ="Option21"
VerticalAnchor =1
+
LayoutCachedLeft =359
LayoutCachedTop =7595
LayoutCachedWidth =619
@@ -542,6 +553,7 @@ Begin Form
Tag ="LANG:"
HorizontalAnchor =1
VerticalAnchor =1
+
LayoutCachedLeft =7042
LayoutCachedTop =6196
LayoutCachedWidth =9967
@@ -575,6 +587,7 @@ Begin Form
Width =0
Height =0
Name ="sysFirst"
+
End
Begin CheckBox
OverlapFlags =215
@@ -589,6 +602,7 @@ Begin Form
UnicodeAccessKey =116
HorizontalAnchor =1
VerticalAnchor =1
+
LayoutCachedLeft =7042
LayoutCachedTop =5640
LayoutCachedWidth =7302
@@ -623,6 +637,7 @@ Begin Form
Name ="cmdClose"
Caption ="Schließen"
OnClick ="[Event Procedure]"
+
End
Begin TextBox
Locked = NotDefault
@@ -637,6 +652,7 @@ Begin Form
TabIndex =16
BorderColor =0
Name ="txtCodeModuleDescription"
+
LayoutCachedLeft =6986
LayoutCachedTop =2436
LayoutCachedWidth =10106
@@ -656,6 +672,7 @@ Begin Form
TabIndex =15
BorderColor =0
Name ="txtCodeModuleName"
+
LayoutCachedLeft =6986
LayoutCachedTop =2114
LayoutCachedWidth =10106
@@ -676,6 +693,7 @@ Begin Form
Caption ="Show description"
Tag ="LANG:"
HorizontalAnchor =1
+
LayoutCachedLeft =6982
LayoutCachedTop =1800
LayoutCachedWidth =10087
@@ -695,6 +713,7 @@ Begin Form
ControlTipText ="Other actions ..."
HorizontalAnchor =1
VerticalAnchor =1
+
LayoutCachedLeft =9364
LayoutCachedTop =7456
LayoutCachedWidth =9919
@@ -727,6 +746,7 @@ Begin Form
HorizontalAnchor =1
AllowValueListEdits =0
InheritValueList =0
+
LayoutCachedLeft =9581
LayoutCachedTop =56
LayoutCachedWidth =10142
@@ -751,6 +771,7 @@ Begin Form
TabIndex =3
Name ="ogRepositorySource"
AfterUpdate ="[Event Procedure]"
+
LayoutCachedLeft =113
LayoutCachedTop =105
LayoutCachedWidth =8443
@@ -762,6 +783,7 @@ Begin Form
Top =203
OptionValue =1
Name ="Option56"
+
LayoutCachedLeft =3855
LayoutCachedTop =203
LayoutCachedWidth =4115
@@ -789,6 +811,7 @@ Begin Form
TabIndex =1
OptionValue =2
Name ="Option58"
+
LayoutCachedLeft =6292
LayoutCachedTop =203
LayoutCachedWidth =6552
@@ -838,6 +861,7 @@ Begin Form
Name ="txtGitHubAuthPersonalAccessToken"
AfterUpdate ="[Event Procedure]"
HorizontalAnchor =2
+
LayoutCachedLeft =5212
LayoutCachedTop =593
LayoutCachedWidth =10085
@@ -887,6 +911,7 @@ Begin Form
GroupTable =1
BottomPadding =150
HorizontalAnchor =2
+
LayoutCachedLeft =6135
LayoutCachedTop =960
LayoutCachedWidth =7838
@@ -902,7 +927,7 @@ Begin Form
Begin Label
OverlapFlags =85
TextAlign =3
- Left =5363
+ Left =5370
Top =960
Width =705
Height =293
@@ -910,9 +935,9 @@ Begin Form
Caption ="Name:"
GroupTable =1
BottomPadding =150
- LayoutCachedLeft =5363
+ LayoutCachedLeft =5370
LayoutCachedTop =960
- LayoutCachedWidth =6068
+ LayoutCachedWidth =6075
LayoutCachedHeight =1253
ColumnStart =3
ColumnEnd =3
@@ -937,6 +962,7 @@ Begin Form
DefaultValue ="\"AccessCodeLib\""
GroupTable =1
BottomPadding =150
+
LayoutCachedLeft =3600
LayoutCachedTop =960
LayoutCachedWidth =5303
@@ -951,7 +977,7 @@ Begin Form
Begin Label
OverlapFlags =85
TextAlign =3
- Left =2723
+ Left =2730
Top =960
Width =810
Height =293
@@ -959,9 +985,9 @@ Begin Form
Caption ="Owner:"
GroupTable =1
BottomPadding =150
- LayoutCachedLeft =2723
+ LayoutCachedLeft =2730
LayoutCachedTop =960
- LayoutCachedWidth =3533
+ LayoutCachedWidth =3540
LayoutCachedHeight =1253
ColumnStart =1
ColumnEnd =1
@@ -975,7 +1001,7 @@ Begin Form
Begin Label
OverlapFlags =215
TextAlign =3
- Left =1418
+ Left =1425
Top =960
Width =1245
Height =293
@@ -984,9 +1010,9 @@ Begin Form
Caption ="Repository:"
GroupTable =1
BottomPadding =150
- LayoutCachedLeft =1418
+ LayoutCachedLeft =1425
LayoutCachedTop =960
- LayoutCachedWidth =2663
+ LayoutCachedWidth =2670
LayoutCachedHeight =1253
LayoutGroup =1
GridlineThemeColorIndex =1
@@ -1008,6 +1034,7 @@ Begin Form
GroupTable =1
BottomPadding =150
HorizontalAnchor =2
+
LayoutCachedLeft =8805
LayoutCachedTop =960
LayoutCachedWidth =10095
@@ -1023,7 +1050,7 @@ Begin Form
Begin Label
OverlapFlags =85
TextAlign =3
- Left =7898
+ Left =7905
Top =960
Width =840
Height =293
@@ -1031,9 +1058,9 @@ Begin Form
Caption ="Branch:"
GroupTable =1
BottomPadding =150
- LayoutCachedLeft =7898
+ LayoutCachedLeft =7905
LayoutCachedTop =960
- LayoutCachedWidth =8738
+ LayoutCachedWidth =8745
LayoutCachedHeight =1253
ColumnStart =5
ColumnEnd =5
diff --git a/source/forms/ACLibImportWizardForm.cls b/source/forms/ACLibImportWizardForm.cls
index 6230aa3..6a934d8 100644
--- a/source/forms/ACLibImportWizardForm.cls
+++ b/source/forms/ACLibImportWizardForm.cls
@@ -13,20 +13,6 @@ Attribute VB_Exposed = False
'
'---------------------------------------------------------------------------------------
-'---------------------------------------------------------------------------------------
-'
-' %AppFolder%/source/ACLibImportWizardForm.frm
-' Maske für Import-Wizard
-'
-'
-'
-'
-'
-'
-'
-'
-'---------------------------------------------------------------------------------------
-'
Option Compare Database
Option Explicit
diff --git a/source/forms/ACLibRepositoryTreeForm.bas b/source/forms/ACLibRepositoryTreeForm.bas
index d2e0385..e1ed02f 100644
--- a/source/forms/ACLibRepositoryTreeForm.bas
+++ b/source/forms/ACLibRepositoryTreeForm.bas
@@ -123,7 +123,6 @@ Begin Form
Width =5385
Height =6803
AutoActivate =1
- BorderColor =10921638
Name ="tvRepositoryTree"
OleData = Begin
0x00120000d0cf11e0a1b11ae1000000000000000000000000000000003e000300 ,
@@ -276,7 +275,6 @@ Begin Form
OnLostFocus ="[Event Procedure]"
OLEClass ="TreeCtrl"
Class ="MSComctlLib.TreeCtrl.2"
- GridlineColor =10921638
HorizontalAnchor =2
VerticalAnchor =2
@@ -291,23 +289,15 @@ Begin Form
Top =113
Height =340
TabIndex =1
- ForeColor =4210752
Name ="cmdCommit"
Caption ="Commit"
OnClick ="[Event Procedure]"
- GridlineColor =10921638
HorizontalAnchor =1
LayoutCachedLeft =5555
LayoutCachedTop =113
LayoutCachedWidth =7256
LayoutCachedHeight =453
- BackColor =14461583
- BorderColor =14461583
- HoverColor =15189940
- PressedColor =9917743
- HoverForeColor =4210752
- PressedForeColor =4210752
End
Begin CommandButton
Cancel = NotDefault
@@ -316,23 +306,15 @@ Begin Form
Top =850
Height =340
TabIndex =2
- ForeColor =4210752
Name ="cmdCancel"
Caption ="Cancel"
OnClick ="[Event Procedure]"
- GridlineColor =10921638
HorizontalAnchor =1
LayoutCachedLeft =5555
LayoutCachedTop =850
LayoutCachedWidth =7256
LayoutCachedHeight =1190
- BackColor =14461583
- BorderColor =14461583
- HoverColor =15189940
- PressedColor =9917743
- HoverForeColor =4210752
- PressedForeColor =4210752
End
Begin Label
OverlapFlags =247
@@ -342,10 +324,9 @@ Begin Form
Width =5214
Height =1981
FontSize =14
- BorderColor =8355711
+ ForeColor =0
Name ="labStartInfo"
Caption ="Loading ..."
- GridlineColor =10921638
LayoutCachedLeft =110
LayoutCachedTop =283
LayoutCachedWidth =5324
diff --git a/source/forms/ACLibRepositoryTreeForm.cls b/source/forms/ACLibRepositoryTreeForm.cls
index d75fe68..c9e5578 100644
--- a/source/forms/ACLibRepositoryTreeForm.cls
+++ b/source/forms/ACLibRepositoryTreeForm.cls
@@ -13,13 +13,6 @@ Attribute VB_Exposed = False
'
'---------------------------------------------------------------------------------------
-'---------------------------------------------------------------------------------------
-'
-' %AppFolder%/source/ACLibRepositoryTreeForm.frm
-' Treeview for repository files
-'
-'---------------------------------------------------------------------------------------
-'
Option Compare Database
Option Explicit
diff --git a/source/modules/ACLibFileManager.cls b/source/modules/ACLibFileManager.cls
index b3e53cf..f509693 100644
--- a/source/modules/ACLibFileManager.cls
+++ b/source/modules/ACLibFileManager.cls
@@ -25,27 +25,12 @@ Attribute VB_Description = "Import/Export der Access-Objekte in/aus lokaler Code
'| Reason: Type could not be used and an extra class is (still) too cumbersome
'---------------------------------------------------------------------------------------
'
-'---------------------------------------------------------------------------------------
-
-'---------------------------------------------------------------------------------------
-'
-' %AppFolder%/source/ACLibFileManager.cls
-' Import/export of Access objects to/from local code library
-' _codelib/license.bas
-'
-'
-'
-'
-'
-'
-'---------------------------------------------------------------------------------------
-'
Option Compare Text
Option Explicit
Private Const EXTENSION_KEY As String = "ACLibFileManager"
-' Integrierte Erweiterungen
+' Integrated extensions
Private Const EXTENSION_KEY_ACLIBCONFIG As String = "ACLibConfiguration"
Private Const EXTENSION_PROPNAME_LOCALREPOSITORYROOT As String = "LocalRepositoryRoot"
Private Const EXTENSION_PROPNAME_PRIVATEREPOSITORYROOT As String = "PrivateRepositoryRoot"
@@ -231,7 +216,7 @@ Public Sub ExportAllModules(Optional ExportComponentsWithoutCodeLibInfo As Boole
Next
#If DEBUGMODE Then
- Debug.Print "Module-Export abgeschlossen"
+ Debug.Print "Module export completed"
#End If
End Sub
@@ -248,7 +233,7 @@ Public Sub ExportAllForms()
Next
#If DEBUGMODE Then
- Debug.Print "Formular-Export abgeschlossen"
+ Debug.Print "Form export completed"
#End If
End Sub
@@ -652,7 +637,7 @@ Public Function GetRepositoryFullPath(ByVal ReleativPath As String) As String
ElseIf Left(ReleativPath, Len(REPOSTITORY_ROOT_CODE_PRIVATEROOT)) = REPOSTITORY_ROOT_CODE_PRIVATEROOT Then
RepPath = PrivateRepositoryRootDirectory
If Len(RepPath) = 0 Then
- Err.Raise vbObjectError, "getRepositoryFullPath", "Wert für privates Root-Verzeichnise fehlt (PrivateRepositoryRootDirectory = '')."
+ Err.Raise vbObjectError, "getRepositoryFullPath", "Wert für privates Root-Verzeichnis fehlt (PrivateRepositoryRootDirectory = '')."
Exit Function
End If
ReleativPath = Mid$(ReleativPath, Len(REPOSTITORY_ROOT_CODE_PRIVATEROOT) + 1)
@@ -665,7 +650,7 @@ Public Function GetRepositoryFullPath(ByVal ReleativPath As String) As String
End If
If Len(RepPath) = 0 Then
- Err.Raise vbObjectError, "getRepositoryFullPath", "Wert für lokales Root-Verzeichnise fehlt (LocalRepositoryRootDirectory = '')."
+ Err.Raise vbObjectError, "getRepositoryFullPath", "Wert für lokales Root-Verzeichnis fehlt (LocalRepositoryRootDirectory = '')."
Exit Function
End If
diff --git a/source/modules/ApplicationHandler_AppFile.cls b/source/modules/ApplicationHandler_AppFile.cls
index 7b142aa..49979eb 100644
--- a/source/modules/ApplicationHandler_AppFile.cls
+++ b/source/modules/ApplicationHandler_AppFile.cls
@@ -134,13 +134,20 @@ End Property
' Boolean
'
'---------------------------------------------------------------------------------------
-Public Function CreateAppFile(ByVal FileID As String, ByVal FileName As String) As Boolean
+Public Function CreateAppFile(ByVal FileID As String, ByVal FileName As String, _
+ Optional ByVal ExtFilterFieldName As String, Optional ExtFilterValue As Variant) As Boolean
Dim Binfile() As Byte
Dim FieldSize As Long
Dim fld As DAO.Field
+ Dim SelectSql As String
+
+ SelectSql = "select " & TABLE_FIELD_FILE & " from " & TABLE_APPFILES & " where " & TABLE_FIELD_ID & "='" & Replace(FileID, "'", "''") & "'"
+ If Len(ExtFilterFieldName) > 0 Then
+ SelectSql = SelectSql & " and " & ExtFilterFieldName & " = '" & Replace(ExtFilterValue, "'", "''") & "'"
+ End If
- With CodeDb.OpenRecordset("select " & TABLE_FIELD_FILE & " from " & TABLE_APPFILES & " where " & TABLE_FIELD_ID & "='" & Replace(FileID, "'", "''") & "'")
+ With CodeDb.OpenRecordset(SelectSql)
If Not .EOF Then
Set fld = .Fields(0)
diff --git a/source/modules/FileTools.bas b/source/modules/FileTools.bas
index 9fd2547..d5bf826 100644
--- a/source/modules/FileTools.bas
+++ b/source/modules/FileTools.bas
@@ -58,7 +58,7 @@ Private Declare PtrSafe Function API_GetTempFilename Lib "kernel32" Alias "GetTe
ByVal wUnique As Long, _
ByVal lpTempFileName As String) As Long
-Private Declare PtrSafe Function API_ShellExecuteA Lib "shell32.dll" ( _
+Private Declare PtrSafe Function API_ShellExecuteA Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal Hwnd As LongPtr, _
ByVal lOperation As String, _
ByVal lpFile As String, _
@@ -81,7 +81,7 @@ Private Declare Function API_GetTempFilename Lib "kernel32" Alias "GetTempFileNa
ByVal wUnique As Long, _
ByVal lpTempFileName As String) As Long
-Private Declare Function API_ShellExecuteA Lib "shell32.dll" ( _
+Private Declare Function API_ShellExecuteA Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal Hwnd As Long, _
ByVal lOperation As String, _
ByVal lpFile As String, _
@@ -848,26 +848,60 @@ End Function
' Boolean
'
'---------------------------------------------------------------------------------------
-Public Function OpenFile(ByVal FilePath As String, Optional ByVal ReadOnlyMode As Boolean = False) As Boolean
+Public Function OpenFile(ByVal FilePath As String, Optional ByVal ReadOnlyMode As Boolean = False, _
+ Optional ByVal DefaultFileFolderIfFileNameOnly As String = vbNullString) As Boolean
Const FileNotFoundErrorTextTemplate As String = "File '{FilePath}' not found."
Dim FileNotFoundErrorText As String
+ Dim FilePath2Open As String
- If Len(VBA.Dir(FilePath)) = 0 Then
+ If Len(DefaultFileFolderIfFileNameOnly) > 0 Then
+ FilePath2Open = BuildFullFileName(FilePath, DefaultFileFolderIfFileNameOnly)
+ Else
+ FilePath2Open = FilePath
+ End If
+
+ If Len(VBA.Dir(FilePath2Open)) = 0 Then
#If USELOCALIZATION = 1 Then
- FileNotFoundErrorText = Replace(L10n.Text(FileNotFoundErrorTextTemplate), "{FilePath}", FilePath)
+ FileNotFoundErrorText = Replace(L10n.Text(FileNotFoundErrorTextTemplate), "{FilePath}", FilePath2Open)
#Else
- FileNotFoundErrorText = Replace(FileNotFoundErrorTextTemplate, "{FilePath}", FilePath)
+ FileNotFoundErrorText = Replace(FileNotFoundErrorTextTemplate, "{FilePath}", FilePath2Open)
#End If
Err.Raise VbaErrNo_FileNotFound, "FileTools.OpenFile", FileNotFoundErrorText
Exit Function
End If
- OpenFile = ShellExecute(FilePath, "open")
+ OpenFile = ShellExecute(FilePath2Open, "open")
End Function
+Public Function BuildFullFileName(ByVal FileName As String, ByVal DefaultFileFolderIfFileNameOnly As String) As String
+
+ If Len(DefaultFileFolderIfFileNameOnly) = 0 Then
+ BuildFullFileName = FileName
+ Exit Function
+ End If
+
+ If Left(FileName, 2) = "\\" Then 'Win-Share
+ BuildFullFileName = FileName
+ Exit Function
+ End If
+
+ If Mid(FileName, 2, 1) = ":" Then 'Laufwerksbuchstabe
+ BuildFullFileName = FileName
+ Exit Function
+ End If
+
+ If Left(FileName, 1) <> "\" And Right(DefaultFileFolderIfFileNameOnly, 1) <> "\" Then
+ DefaultFileFolderIfFileNameOnly = DefaultFileFolderIfFileNameOnly & "\"
+ End If
+
+ BuildFullFileName = DefaultFileFolderIfFileNameOnly & FileName
+
+End Function
+
+
'---------------------------------------------------------------------------------------
' Function: OpenFilePath
'---------------------------------------------------------------------------------------
diff --git a/source/modules/SqlTools.cls b/source/modules/SqlTools.cls
index fd3546b..997606c 100644
--- a/source/modules/SqlTools.cls
+++ b/source/modules/SqlTools.cls
@@ -10,6 +10,7 @@ Attribute VB_Exposed = False
'---------------------------------------------------------------------------------------
' Class: data.sql.SqlTools
'---------------------------------------------------------------------------------------
+'
' Functions to build sql strings
'
' Author:
@@ -54,9 +55,13 @@ Private Const SQL_DEFAULT_WILDCARD As String = "%" ' % = default value,
Private Const SqlAndConcatString As String = " And "
Private Const SqlOrConcatString As String = " Or "
-Private m_SqlDateFormat As String
-Private m_SqlBooleanTrueString As String
-Private m_SqlWildCardString As String
+Private Type SqlFormatSettings
+ SqlDateFormat As String
+ SqlBooleanTrueString As String
+ SqlWildCardString As String
+End Type
+
+Private m_SqlFormat As SqlFormatSettings
Private Const ResultTextIfNull As String = "Null"
@@ -90,9 +95,61 @@ Public Enum SqlLogicalOperator
SQL_CommaSeparator = 3
End Enum
+Public Enum SqlDialect
+ SQL_Custom = 0
+ SQL_DAO = 1
+ SQL_TSQL = 2
+End Enum
+
'##################################
' Group: Class support
+'---------------------------------------------------------------------------------------
+' Function: SelectDialect
+'---------------------------------------------------------------------------------------
+'
+' Create a new instance with basic settings of the selected dialect
+'
+' Parameters:
+'
+' UseDialect - use setting of dialect (as base)
+' NewSqlDateFormat - use this date format instead of base dialect
+' NewSqlBooleanTrueString - use this text for true instead of base dialect
+' NewSqlWildCardString - use this wildcard string instead of base dialect
+'
+' Returns:
+'
+' SqlTools instance with config form base
+'
+' See Also:
+' NewInstance
+'
+'---------------------------------------------------------------------------------------
+Public Function FromDialect(ByVal UseDialect As SqlDialect, _
+ Optional ByVal NewSqlDateFormat As String = SQL_DEFAULT_DATEFORMAT, _
+ Optional ByVal NewSqlBooleanTrueString As String = SQL_DEFAULT_BOOLTRUESTRING, _
+ Optional ByVal NewSqlWildCardString As String = SQL_DEFAULT_WILDCARD) As SqlTools
+
+ Dim NewSlqToolsInstance As SqlTools
+
+ Select Case UseDialect
+ Case SqlDialect.SQL_DAO
+ Set NewSlqToolsInstance = Me.DAO
+ Case SqlDialect.SQL_TSQL
+ Set NewSlqToolsInstance = Me.TSql
+ Case Else
+ Set NewSlqToolsInstance = Me.Clone
+ End Select
+
+ If Len(NewSqlDateFormat) > 0 Then NewSlqToolsInstance.SqlDateFormat = NewSqlDateFormat
+ If Len(NewSqlBooleanTrueString) > 0 Then NewSlqToolsInstance.SqlBooleanTrueString = NewSqlBooleanTrueString
+ If Len(NewSqlWildCardString) > 0 Then NewSlqToolsInstance.SqlWildCardString = NewSqlWildCardString
+
+ Set FromDialect = NewSlqToolsInstance
+
+End Function
+
+
'---------------------------------------------------------------------------------------
' Function: Clone
'---------------------------------------------------------------------------------------
@@ -117,7 +174,6 @@ Public Function Clone(Optional ByVal NewSqlDateFormat As String = SQL_DEFAULT_DA
Optional ByVal NewSqlBooleanTrueString As String = SQL_DEFAULT_BOOLTRUESTRING, _
Optional ByVal NewSqlWildCardString As String = SQL_DEFAULT_WILDCARD) As SqlTools
-
If Len(NewSqlDateFormat) = 0 Then NewSqlDateFormat = Me.SqlDateFormat
If Len(NewSqlBooleanTrueString) = 0 Then NewSqlBooleanTrueString = Me.SqlBooleanTrueString
If Len(NewSqlWildCardString) = 0 Then NewSqlWildCardString = Me.SqlWildCardString
@@ -150,6 +206,66 @@ Public Function NewInstance(ByVal NewSqlDateFormat As String, _
End Function
+'---------------------------------------------------------------------------------------
+' Function: InitSqlDialect
+'---------------------------------------------------------------------------------------
+'
+' Config sql text output format for specific sql dialect
+'
+' Parameters:
+'
+' SqlDateFormat - output string format for date values
+' SqlBooleanTrueString - output string format for boolean values
+' SqlWildCardString - wildcard string (e.g. * .. dao, % .. T-SQL)
+'
+'---------------------------------------------------------------------------------------
+Friend Sub InitSqlDialect(ByVal UseDialect As SqlDialect, _
+ Optional ByVal NewSqlDateFormat As String = SQL_DEFAULT_DATEFORMAT, _
+ Optional ByVal NewSqlBooleanTrueString As String = SQL_DEFAULT_BOOLTRUESTRING, _
+ Optional ByVal NewSqlWildCardString As String = SQL_DEFAULT_WILDCARD)
+
+ Dim SqlFormat As SqlFormatSettings
+
+ Select Case UseDialect
+ Case SqlDialect.SQL_DAO
+ SqlFormat = DaoSqlFormat
+ Case SqlDialect.SQL_TSQL
+ SqlFormat = TSqlSqlFormat
+ Case Else
+ ' set nothing => use NewSql* parameter
+ End Select
+
+ If Len(NewSqlDateFormat) > 0 Then SqlFormat.SqlDateFormat = NewSqlDateFormat
+ If Len(NewSqlBooleanTrueString) > 0 Then SqlFormat.SqlBooleanTrueString = NewSqlBooleanTrueString
+ If Len(NewSqlWildCardString) > 0 Then SqlFormat.SqlWildCardString = NewSqlWildCardString
+
+ InitSqlFormat SqlFormat.SqlDateFormat, SqlFormat.SqlBooleanTrueString, SqlFormat.SqlWildCardString
+
+
+End Sub
+
+'---------------------------------------------------------------------------------------
+' Function: InitSqlFormat
+'---------------------------------------------------------------------------------------
+'
+' Config sql text output format for specific sql dialect
+'
+' Parameters:
+'
+' SqlDateFormat - output string format for date values
+' SqlBooleanTrueString - output string format for boolean values
+' SqlWildCardString - wildcard string (e.g. * .. dao, % .. T-SQL)
+'
+'---------------------------------------------------------------------------------------
+Friend Sub InitSqlFormat(ByVal SqlDateFormat As String, _
+ ByVal SqlBooleanTrueString As String, _
+ ByVal SqlWildCardString As String)
+
+ Me.SqlDateFormat = SqlDateFormat
+ Me.SqlBooleanTrueString = SqlBooleanTrueString
+ Me.SqlWildCardString = SqlWildCardString
+
+End Sub
'##################################
' Group: SQL dialect preferences
@@ -162,7 +278,21 @@ End Function
'
'---------------------------------------------------------------------------------------
Public Property Get DAO() As SqlTools
- Set DAO = Me.NewInstance("\#yyyy-mm-dd hh:nn:ss\#", "True", "*")
+ With DaoSqlFormat
+ Set DAO = Me.NewInstance(.SqlDateFormat, .SqlBooleanTrueString, .SqlWildCardString)
+ End With
+End Property
+
+Private Property Get DaoSqlFormat() As SqlFormatSettings
+
+ Dim SqlFormat As SqlFormatSettings
+
+ SqlFormat.SqlDateFormat = "\#yyyy-mm-dd hh:nn:ss\#"
+ SqlFormat.SqlBooleanTrueString = "True"
+ SqlFormat.SqlWildCardString = "*"
+
+ DaoSqlFormat = SqlFormat
+
End Property
'---------------------------------------------------------------------------------------
@@ -173,7 +303,21 @@ End Property
'
'---------------------------------------------------------------------------------------
Public Property Get TSql() As SqlTools
- Set TSql = Me.NewInstance("'yyyymmdd hh:nn:ss'", "1", "%")
+ With TSqlSqlFormat
+ Set TSql = Me.NewInstance(.SqlDateFormat, .SqlBooleanTrueString, .SqlWildCardString)
+ End With
+End Property
+
+Private Property Get TSqlSqlFormat() As SqlFormatSettings
+
+ Dim SqlFormat As SqlFormatSettings
+
+ SqlFormat.SqlDateFormat = "'yyyymmdd hh:nn:ss'"
+ SqlFormat.SqlBooleanTrueString = "1"
+ SqlFormat.SqlWildCardString = "%"
+
+ TSqlSqlFormat = SqlFormat
+
End Property
' Configuration for SQL dialect
@@ -186,15 +330,15 @@ End Property
'
'---------------------------------------------------------------------------------------
Public Property Get SqlWildCardString() As String
- If Len(m_SqlWildCardString) > 0 Then
- SqlWildCardString = m_SqlWildCardString
+ If Len(m_SqlFormat.SqlWildCardString) > 0 Then
+ SqlWildCardString = m_SqlFormat.SqlWildCardString
Else
SqlWildCardString = SQL_DEFAULT_WILDCARD
End If
End Property
Public Property Let SqlWildCardString(ByVal NewValue As String)
- m_SqlWildCardString = NewValue
+ m_SqlFormat.SqlWildCardString = NewValue
End Property
'---------------------------------------------------------------------------------------
@@ -205,15 +349,15 @@ End Property
'
'---------------------------------------------------------------------------------------
Public Property Get SqlDateFormat() As String
- If Len(m_SqlDateFormat) > 0 Then
- SqlDateFormat = m_SqlDateFormat
+ If Len(m_SqlFormat.SqlDateFormat) > 0 Then
+ SqlDateFormat = m_SqlFormat.SqlDateFormat
Else
SqlDateFormat = SQL_DEFAULT_DATEFORMAT
End If
End Property
Public Property Let SqlDateFormat(ByVal NewValue As String)
- m_SqlDateFormat = NewValue
+ m_SqlFormat.SqlDateFormat = NewValue
End Property
'---------------------------------------------------------------------------------------
@@ -224,15 +368,15 @@ End Property
'
'---------------------------------------------------------------------------------------
Public Property Get SqlBooleanTrueString() As String
- If Len(m_SqlBooleanTrueString) > 0 Then
- SqlBooleanTrueString = m_SqlBooleanTrueString
+ If Len(m_SqlFormat.SqlBooleanTrueString) > 0 Then
+ SqlBooleanTrueString = m_SqlFormat.SqlBooleanTrueString
Else
SqlBooleanTrueString = SQL_DEFAULT_BOOLTRUESTRING
End If
End Property
Public Property Let SqlBooleanTrueString(ByVal NewValue As String)
- m_SqlBooleanTrueString = NewValue
+ m_SqlFormat.SqlBooleanTrueString = NewValue
End Property
'##################################
@@ -308,17 +452,15 @@ Public Function BuildCriteria(ByVal FieldName As String, ByVal FieldDataType As
Exit Function
End If
- If (RelationalOperator And SQL_SplitValueToArray) = SQL_SplitValueToArray Then
- If InStr(1, FilterValue, ";") > 0 Then
- FilterValue = Split(CharTrim(FilterValue, ";"), ";")
- End If
- RelationalOperator = RelationalOperator Xor SQL_SplitValueToArray
+ If TryBuildSplitToArrayCriteria(FieldName, FieldDataType, RelationalOperator, FilterValue, IgnoreValue, Criteria) Then
+ BuildCriteria = Criteria
+ Exit Function
End If
'Special cases (part 2):
If Not IsArray(FilterValue) Then
- If FieldDataType = SQL_Numeric Then
+ If FieldDataType = SQL_Numeric Or FieldDataType = SQL_Date Then
If FilterValue = "*" And RelationalOperator = SQL_Equal Then
BuildCriteria = BuildCriteria(FieldName, FieldDataType, SQL_Not, Null, Null, 0, True)
@@ -353,7 +495,7 @@ Public Function BuildCriteria(ByVal FieldName As String, ByVal FieldDataType As
Exit Function
End If
- If (RelationalOperator And SQL_Like) = SQL_Like Then
+ If (RelationalOperator And SQL_Like) = SQL_Like Or (RelationalOperator And SQL_UseLikeBehavior) = SQL_UseLikeBehavior Then
If SqlWildCardString <> "*" Then
If InStr(1, FilterValue, "*") > 0 Then
FilterValue = Replace(FilterValue, "[*]", "@@@|||STAR|||@@@")
@@ -371,7 +513,7 @@ Public Function BuildCriteria(ByVal FieldName As String, ByVal FieldDataType As
End If
If (RelationalOperator And SQL_Add_WildCardPrefix) = SQL_Add_WildCardPrefix Then
- If (RelationalOperator And SQL_Like) = SQL_Like Then
+ If (RelationalOperator And SQL_Like) = SQL_Like Or (RelationalOperator And SQL_UseLikeBehavior) = SQL_UseLikeBehavior Then
FilterValue = SqlWildCardString & FilterValue
End If
End If
@@ -654,20 +796,20 @@ Private Function ConfigNumericSpecials( _
End Function
-Private Function GetNextDigitNumber(ByVal Z As Variant, Optional AddToAbsoluteValue As Boolean = False) As Double
+Private Function GetNextDigitNumber(ByVal NumValue As Variant, Optional AddToAbsoluteValue As Boolean = False) As Double
Dim TestString As String
- Dim KommaPos As Long
- Dim digits As Long
+ Dim DecSignPos As Long
+ Dim Digits As Long
Dim IsNegativ As Boolean
Const AdditionalDecDigit As String = "1"
Const AdditionalDecDigitKorr As Double = 0.1
- TestString = Trim(CStr(ConvertToNumeric(Replace(CStr(Z), "*", AdditionalDecDigit))))
+ TestString = Trim(CStr(ConvertToNumeric(Replace(CStr(NumValue), "*", AdditionalDecDigit))))
If Left(TestString, 1) = "-" And (Not AddToAbsoluteValue) Then
- GetNextDigitNumber = CDbl(Replace(CStr(Z), "*", vbNullString))
+ GetNextDigitNumber = CDbl(Replace(CStr(NumValue), "*", vbNullString))
Exit Function
End If
@@ -675,26 +817,26 @@ Private Function GetNextDigitNumber(ByVal Z As Variant, Optional AddToAbsoluteVa
IsNegativ = True
End If
- KommaPos = InStrRev(TestString, DecimalMarker)
- If KommaPos = 0 Then ' next integer
+ DecSignPos = InStrRev(TestString, DecimalMarker)
+ If DecSignPos = 0 Then ' next integer
If AddToAbsoluteValue And IsNegativ Then
- GetNextDigitNumber = CDbl(Replace(CStr(Z), "*", vbNullString)) - 1
+ GetNextDigitNumber = CDbl(Replace(CStr(NumValue), "*", vbNullString)) - 1
Else
- GetNextDigitNumber = CDbl(Replace(CStr(Z), "*", vbNullString)) + 1
+ GetNextDigitNumber = CDbl(Replace(CStr(NumValue), "*", vbNullString)) + 1
End If
Exit Function
End If
- digits = Len(TestString) - KommaPos - 1
+ Digits = Len(TestString) - DecSignPos - 1
If Left(TestString, 1) = "-" Then
IsNegativ = True
End If
If AddToAbsoluteValue And IsNegativ Then
- GetNextDigitNumber = CDbl(TestString) + AdditionalDecDigitKorr / 10 ^ digits - AdditionalDecDigitKorr / 10 ^ (digits - 1)
+ GetNextDigitNumber = CDbl(TestString) + AdditionalDecDigitKorr / 10 ^ Digits - AdditionalDecDigitKorr / 10 ^ (Digits - 1)
Else
- GetNextDigitNumber = CDbl(TestString) + (1 - AdditionalDecDigitKorr) / 10 ^ digits
+ GetNextDigitNumber = CDbl(TestString) + (1 - AdditionalDecDigitKorr) / 10 ^ Digits
End If
End Function
@@ -702,11 +844,11 @@ End Function
Private Property Get DecimalMarker() As String
Static DecChar As String
- Dim X As String
+ Dim CheckString As String
If Len(DecChar) = 0 Then
- X = Trim(CStr(1.2))
- DecChar = Mid(X, 2, 1)
+ CheckString = Trim(CStr(1.2))
+ DecChar = Mid(CheckString, 2, 1)
End If
DecimalMarker = DecChar
@@ -797,16 +939,16 @@ Private Function TryBuildWildCardSuffixOrPreBuildParams(ByVal FieldName As Strin
Dim Criteria1 As String
Dim Criteria2 As String
- If (RelationalOperator And SQL_Like) = SQL_Like Then
+ If (RelationalOperator And SQL_Like) = SQL_Like Or (RelationalOperator And SQL_UseLikeBehavior) = SQL_UseLikeBehavior Then
FilterValue = FilterValue & SqlWildCardString
- ElseIf (FieldDataType And SQL_Date) = SQL_Date Then
+ ElseIf FieldDataType = SQL_Date Then
If (RelationalOperator And SQL_LessThan) = 0 Then ' no < therefore: >, >= or only =
If (RelationalOperator And SQL_GreaterThan) = SQL_GreaterThan Then
' change nothing ... >= DataValue / SQL_Add_WildCardSuffix is not logical
Else ' Consider the whole day ... FieldName >= DateValue and FieldName < DateAdd("d", 1, FilterValue))
Criteria = BuildCriteria(FieldName, FieldDataType, SQL_GreaterThan + SQL_Equal, FilterValue, , , False) & _
SqlAndConcatString & _
- BuildCriteria(FieldName, FieldDataType, SQL_LessThan, DateAdd("d", 1, CDate(CLng(FilterValue))), , , False)
+ BuildCriteria(FieldName, FieldDataType, SQL_LessThan, DateAdd("d", 1, CDate(CLng(CDate(FilterValue)))), , , False)
TryBuildWildCardSuffixOrPreBuildParams = True
Exit Function
End If
@@ -814,9 +956,9 @@ Private Function TryBuildWildCardSuffixOrPreBuildParams(ByVal FieldName As Strin
If (RelationalOperator And SQL_Equal) = SQL_Equal Then
RelationalOperator = RelationalOperator - SQL_Equal
End If
- FilterValue = DateAdd("d", 1, CDate(CLng(FilterValue)))
+ FilterValue = DateAdd("d", 1, CDate(CLng(CDate(FilterValue))))
End If
- ElseIf (FieldDataType And SQL_Numeric) = SQL_Numeric Then
+ ElseIf FieldDataType = SQL_Numeric Then
If (RelationalOperator And SQL_LessThan) = 0 Then ' no < daher: >, >= or only =
If (RelationalOperator And SQL_GreaterThan) = SQL_GreaterThan Then
If FilterValue Like "*[,.]*[*]" Then
@@ -864,7 +1006,9 @@ Private Function TryBuildNumericSpecialCasesCriteria(ByRef FieldName As String,
Const FilterValue2 As Variant = Null
- FilterValue = Trim(FilterValue)
+ If VarType(FilterValue) = vbString Then
+ FilterValue = Trim(FilterValue)
+ End If
If FilterValue Like "[0-9]*..*[0-9]*" Or FilterValue Like "[+-][0-9]*..*[0-9]*" Then
TempArr = Split(FilterValue, "..")
@@ -894,11 +1038,63 @@ Private Function TryBuildNumericSpecialCasesCriteria(ByRef FieldName As String,
End Function
-Private Function TryBuildArrayCriteria(ByRef FieldName As String, ByVal FieldDataType As SqlFieldDataType, _
+
+Private Function TryBuildSplitToArrayCriteria(ByRef FieldName As String, ByVal FieldDataType As SqlFieldDataType, _
ByRef RelationalOperator As SqlRelationalOperators, _
ByRef FilterValue As Variant, _
ByRef IgnoreValue As Variant, _
ByRef Criteria As String) As Boolean
+
+ Dim ValueSplitted As Boolean
+ Dim CriteriaConcatString As String
+
+ If (RelationalOperator And SQL_SplitValueToArray) = SQL_SplitValueToArray Then
+
+ RelationalOperator = RelationalOperator Xor SQL_SplitValueToArray
+
+ If InStr(1, FilterValue, SqlOrConcatString, vbTextCompare) > 0 Then
+ FilterValue = Replace(FilterValue, SqlOrConcatString, ";")
+ End If
+
+ If InStr(1, FilterValue, SqlAndConcatString, vbTextCompare) > 0 Then
+ FilterValue = Replace(FilterValue, SqlAndConcatString, "+")
+ End If
+
+ If InStr(1, FilterValue, ";") > 0 Then
+ If InStr(1, FilterValue, "+") > 0 Then
+ RelationalOperator = RelationalOperator Or SQL_SplitValueToArray
+ End If
+ CriteriaConcatString = SqlOrConcatString
+ FilterValue = Split(CharTrim(FilterValue, ";"), ";")
+ ValueSplitted = True
+ ElseIf InStr(1, FilterValue, "+") > 0 Then
+ CriteriaConcatString = SqlAndConcatString
+ FilterValue = Split(CharTrim(FilterValue, "+"), "+")
+ ValueSplitted = True
+ End If
+ End If
+
+ If ValueSplitted Then
+
+ If CriteriaConcatString = SqlOrConcatString Then
+ If TryBuildInCriteria(FieldName, FieldDataType, RelationalOperator, FilterValue, IgnoreValue, Criteria) Then
+ Exit Function
+ End If
+ End If
+
+ TryBuildSplitToArrayCriteria = TryBuildArrayCriteria(FieldName, FieldDataType, RelationalOperator, FilterValue, IgnoreValue, Criteria, CriteriaConcatString)
+
+ End If
+
+End Function
+
+
+Private Function TryBuildArrayCriteria(ByRef FieldName As String, ByVal FieldDataType As SqlFieldDataType, _
+ ByRef RelationalOperator As SqlRelationalOperators, _
+ ByRef FilterValue As Variant, _
+ ByRef IgnoreValue As Variant, _
+ ByRef Criteria As String, _
+ Optional ByVal CriteriaConcatString As String = SqlOrConcatString) As Boolean
Dim itm As Variant
Dim ItmCriteria As String
@@ -912,11 +1108,11 @@ Private Function TryBuildArrayCriteria(ByRef FieldName As String, ByVal FieldDat
For Each itm In FilterValue
ItmCriteria = BuildCriteria(FieldName, FieldDataType, RelationalOperator, itm, , IgnoreValue, False)
If Len(ItmCriteria) > 0 Then
- Criteria = Criteria & SqlOrConcatString & ItmCriteria
+ Criteria = Criteria & CriteriaConcatString & ItmCriteria
End If
Next
If Len(Criteria) > 0 Then
- Criteria = Mid(Criteria, Len(SqlOrConcatString) + 1) ' 1. Or wegschneiden
+ Criteria = Mid(Criteria, Len(CriteriaConcatString) + 1) ' 1. Or wegschneiden
End If
TryBuildArrayCriteria = True
diff --git a/source/modules/StringCollection.cls b/source/modules/StringCollection.cls
index c8a0755..34133ec 100644
--- a/source/modules/StringCollection.cls
+++ b/source/modules/StringCollection.cls
@@ -11,7 +11,7 @@ Attribute VB_Exposed = False
' Class: text.StringCollection
'---------------------------------------------------------------------------------------
'
-' Collection-Funktionen für Strings
+' Collection for strings
'
' Author:
' Josef Poetzl
@@ -39,27 +39,85 @@ Private Sub Class_Terminate()
Set m_Items = Nothing
End Sub
+'---------------------------------------------------------------------------------------
+' Property: Self
+'---------------------------------------------------------------------------------------
+'
+' Reference to self (Me)
+'
+' Remarks:
+' Useful for with-block
+'
+' Returns:
+' Database.StringCollection
+'
+'---------------------------------------------------------------------------------------
Public Property Get Self() As StringCollection
Set Self = Me
End Property
+'---------------------------------------------------------------------------------------
+' Property: Items
+'---------------------------------------------------------------------------------------
+'
+' Collection with items
+'
+' Returns:
+' VBA.Collection
+'
+'---------------------------------------------------------------------------------------
Public Property Get Items() As Collection
Set Items = m_Items
End Property
+'---------------------------------------------------------------------------------------
+' Property: Item
+'---------------------------------------------------------------------------------------
+'
+' Item of Collection
+'
+' Parameters:
+' Index - (Variant)
+'
+' Returns:
+' Item string - (String)
+'
+'---------------------------------------------------------------------------------------
Public Property Get Item(ByVal Index As Variant) As String
Item = m_Items.Item(Index)
End Property
Public Property Let Item(ByVal Index As Variant, ByVal NewValue As String)
+Attribute Item.VB_UserMemId = 0
m_Items.Add NewValue, , , Index
m_Items.Remove Index
End Property
+'---------------------------------------------------------------------------------------
+' Sub: Add
+'---------------------------------------------------------------------------------------
+'
+' Add string to collection
+'
+' Parameters:
+' Item to add - (String)
+'
+'---------------------------------------------------------------------------------------
Public Sub Add(ByVal Item As String)
m_Items.Add Item
End Sub
+'---------------------------------------------------------------------------------------
+' Sub: AddFromArray
+'---------------------------------------------------------------------------------------
+'
+' Add items form an array to collection
+'
+' Parameters:
+' ArrayToAdd - (Variant)
+' ItemStringFormat - (String) Format each item of Array with ItemStringFormat before add to collection
+'
+'---------------------------------------------------------------------------------------
Public Sub AddFromArray(ByRef ArrayToAdd As Variant, Optional ByVal ItemStringFormat As String = vbNullString)
Dim i As Long
@@ -70,17 +128,44 @@ Public Sub AddFromArray(ByRef ArrayToAdd As Variant, Optional ByVal ItemStringFo
End Sub
-Public Sub AddFromCollection(ByVal CollectionRef As Object, Optional ByVal ItemStringFormat As String = vbNullString)
-'Object, damit alle Collections mit Enumarable- u. Item(index)-Interface durchlaufen werden können
+'---------------------------------------------------------------------------------------
+' Sub: AddFromCollection
+'---------------------------------------------------------------------------------------
+'
+' Add items form a collection to string collection
+'
+' Parameters:
+' CollectionToAppend - (Object) .. so that all collections with Enumarable and Item(index) interface can be run through
+' ItemStringFormat - (String) Format each item of collection with ItemStringFormat before add to collection
+'
+'---------------------------------------------------------------------------------------
+Public Sub AddFromCollection(ByVal CollectionToAppend As Object, Optional ByVal ItemStringFormat As String = vbNullString)
Dim itm As Variant
- For Each itm In CollectionRef
+ For Each itm In CollectionToAppend
m_Items.Add Format(itm, ItemStringFormat)
Next
End Sub
+'---------------------------------------------------------------------------------------
+' Function: ToString
+'---------------------------------------------------------------------------------------
+'
+' Return Collection items as joined String
+'
+' Parameters:
+' Delimiter - (String) Example: ", " => "Item1, Item2, Item3"
+' ItemPrefix - (String) Prefix for each item
+' ItemSuffix - (String) Suffix for each item
+' IgnoreEmptyValue - (Boolean) don't output an empty item
+' IgnoreDuplicateValues - (Boolean) True = don't output duplicate items
+'
+' Returns:
+' String
+'
+'---------------------------------------------------------------------------------------
Public Function ToString(Optional ByVal Delimiter As String = ", ", _
Optional ByVal ItemPrefix As String = vbNullString, _
Optional ByVal ItemSuffix As String = vbNullString, _
@@ -96,6 +181,20 @@ Public Function ToString(Optional ByVal Delimiter As String = ", ", _
End Function
+'---------------------------------------------------------------------------------------
+' Function: ToStringArray
+'---------------------------------------------------------------------------------------
+'
+' Return Collection items as String array
+'
+' Parameters:
+' IgnoreEmptyValue - (Boolean) don't output an empty item
+' IgnoreDuplicateValues - (Boolean) True = don't output duplicate items
+'
+' Returns:
+' String array
+'
+'---------------------------------------------------------------------------------------
Public Function ToStringArray(Optional ByVal IgnoreEmptyValue As Boolean = False, _
Optional ByVal IgnoreDuplicateValues As Boolean = False) As String()
diff --git a/source/modules/WinApiShortcutMenu.cls b/source/modules/WinApiShortcutMenu.cls
index 9aa31a8..d2c52a3 100644
--- a/source/modules/WinApiShortcutMenu.cls
+++ b/source/modules/WinApiShortcutMenu.cls
@@ -42,7 +42,7 @@ Private Type POINTAPI
Y As Long
End Type
-Private Type RECT
+Private Type Rect
Left As Long
Top As Long
Right As Long
@@ -130,7 +130,7 @@ Private Declare PtrSafe Function TranslateMessage _
Private Declare PtrSafe Function GetWindowRect _
Lib "user32.dll" ( _
ByVal Hwnd As LongPtr, _
- ByRef lpRect As RECT _
+ ByRef lpRect As Rect _
) As LongPtr
Private Declare PtrSafe Function SetMenuDefaultItem _
@@ -431,14 +431,14 @@ Public Function OpenMenu(Optional ByVal X As Single = 0, Optional ByVal Y As Sin
#End If
Dim Message As APIMSG
- Dim RcHelper As RECT
+ Dim RcHelper As Rect
Dim ButtonLeft As Long
Dim ButtonTop As Long
Dim XPos As Long
Dim YPos As Long
Dim ParentObj As Object
- Dim AccFormRect As RECT
+ Dim AccFormRect As Rect
'Otherwise, nothing is displayed when ENTER is pressed:
DoEvents
diff --git a/source/modules/_config_Application.bas b/source/modules/_config_Application.bas
index ff58366..eb08ce0 100644
--- a/source/modules/_config_Application.bas
+++ b/source/modules/_config_Application.bas
@@ -9,29 +9,11 @@
' Josef Poetzl
'
'---------------------------------------------------------------------------------------
-
-'---------------------------------------------------------------------------------------
-'
-' %AppFolder%/source/_config_Application.bas
-' base/_config_Application.bas 'dieses Modul ersetzt base/_config_Application.bas
-' _codelib/license.bas
-'
-'
-'
-'
-'
-'
-'
-'
-'
-'
-'---------------------------------------------------------------------------------------
-'
Option Compare Database
Option Explicit
'Versionsnummer
-Private Const APPLICATION_VERSION As String = "1.3.2"
+Private Const APPLICATION_VERSION As String = "1.3.3"
#Const USE_CLASS_ApplicationHandler_AppFile = 1
#Const USE_CLASS_ApplicationHandler_DirTextbox = 1
diff --git a/source/modules/defGlobal_ACLibImportWizard.bas b/source/modules/defGlobal_ACLibImportWizard.bas
index 9744460..05eef30 100644
--- a/source/modules/defGlobal_ACLibImportWizard.bas
+++ b/source/modules/defGlobal_ACLibImportWizard.bas
@@ -9,14 +9,6 @@
' Josef Poetzl
'
'---------------------------------------------------------------------------------------
-'
-' %AppFolder%/source/defGlobal_ACLibImportWizard.bas
-' _codelib/license.bas
-'
-'
-'
-'---------------------------------------------------------------------------------------
-'
Option Compare Database
Option Explicit
diff --git a/source/tbldefs/tab1DS.xml b/source/tbldefs/tab1DS.xml
index a30e918..3ad0246 100644
--- a/source/tbldefs/tab1DS.xml
+++ b/source/tbldefs/tab1DS.xml
@@ -32,7 +32,7 @@
-
+
@@ -47,7 +47,7 @@
-
+
diff --git a/source/vcs-index.json b/source/vcs-index.json
deleted file mode 100644
index 589b97d..0000000
--- a/source/vcs-index.json
+++ /dev/null
@@ -1,446 +0,0 @@
-{
- "Info": {
- "Class": "clsVCSIndex",
- "Description": "Version Control System Index"
- },
- "Items": {
- "MergeBuildDate": null,
- "FullBuildDate": null,
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "FullExportDate": "2025-06-09T11:22:33.000Z",
- "OptionsHash": "1f1da84",
- "LastMergedCommit": "",
- "Components": {
- "DB Connections": {
- "db-connection.json": {
- }
- },
- "DB Properties": {
- "dbs-properties.json": {
- "FileHash": "6d703d0",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "5032152"
- }
- },
- "Doc Properties": {
- "documents.json": {
- "FileHash": "4e47d4f",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "d1c18af"
- }
- },
- "Forms": {
- "ACLibImportWizardForm.bas": {
- "FileHash": "fbe769c",
- "OtherHash": "b3a2c5e",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "51acba0"
- },
- "ACLibRepositoryTreeForm.bas": {
- "FileHash": "7a42d27",
- "OtherHash": "0be362c",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "7584e48"
- }
- },
- "Hidden Attributes": {
- "hidden-attributes.json": {
- "FileHash": "ac5bf84",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "50e2f00"
- }
- },
- "Macros": {
- "Autoexec.bas": {
- "FileHash": "6c32cc4",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "5ed8c97"
- }
- },
- "Modules": {
- "_AccessCodeLib_license.bas": {
- "FileHash": "7c0f496",
- "OtherHash": "a68defd",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "132992f"
- },
- "_config_Application.bas": {
- "FileHash": "cc46796",
- "OtherHash": "b067395",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "fd9eb74"
- },
- "_initApplication.bas": {
- "FileHash": "c6f8a48",
- "OtherHash": "fe44679",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "405ab23"
- },
- "AccessProgressBar.cls": {
- "FileHash": "2ef8f04",
- "OtherHash": "8b66945",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "aa1213d"
- },
- "AccUnit_Factory.bas": {
- "FileHash": "83ffe57",
- "OtherHash": "f9a5b0f",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "64902c5"
- },
- "AccUnit_TestClassFactory.bas": {
- "FileHash": "f51fb88",
- "OtherHash": "bb8c34d",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "644c199"
- },
- "ACLibConfiguration.cls": {
- "FileHash": "ed519aa",
- "OtherHash": "d78bb12",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "79d91a4"
- },
- "ACLibFileManager.cls": {
- "FileHash": "0fc519d",
- "OtherHash": "03a11ab",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "40c2858"
- },
- "ACLibGitHubImporter.cls": {
- "FileHash": "5ef5d57",
- "OtherHash": "1ddae9a",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "7319337"
- },
- "ApplicationHandler.cls": {
- "FileHash": "5742bd4",
- "OtherHash": "ddfcd8e",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "3f7033a"
- },
- "ApplicationHandler_AppFile.cls": {
- "FileHash": "016cace",
- "OtherHash": "08f467a",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "7df1c6f"
- },
- "ApplicationHandler_DirTextbox.cls": {
- "FileHash": "f7d2b15",
- "OtherHash": "70a2c6e",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "1150661"
- },
- "ApplicationHandler_ExtensionCollection.cls": {
- "FileHash": "837f1be",
- "OtherHash": "6d46a38",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "d1f0222"
- },
- "CodeModuleHeaderItem.cls": {
- "FileHash": "6348d6d",
- "OtherHash": "13e11aa",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "cbb5dd3"
- },
- "CodeModuleProcedure.cls": {
- "FileHash": "5406953",
- "OtherHash": "0456677",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "1f50232"
- },
- "CodeModuleReader.cls": {
- "FileHash": "bb790c7",
- "OtherHash": "b502be3",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "e2e71ac"
- },
- "DaoHandler.cls": {
- "FileHash": "aa2c03b",
- "OtherHash": "60dbf3e",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "bc87640"
- },
- "DaoTools.bas": {
- "FileHash": "9b0e56b",
- "OtherHash": "85d7321",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "1e3143f"
- },
- "defGlobal_ACLibImportWizard.bas": {
- "FileHash": "0d48461",
- "OtherHash": "115488f",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "41ed86d"
- },
- "FileTools.bas": {
- "FileHash": "a035ffb",
- "OtherHash": "e9be8f0",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "0769a59"
- },
- "GitHubTreeJsonConverter.cls": {
- "FileHash": "ee843b0",
- "OtherHash": "4dbce11",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "e6bbd97"
- },
- "GitHubTreeNode.cls": {
- "FileHash": "0de385f",
- "OtherHash": "6ede307",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "a3dc57c"
- },
- "GitHubTreeNodeTests.cls": {
- "FileHash": "c2edd01",
- "OtherHash": "804b51f",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "0bde974"
- },
- "JsonProperties.cls": {
- "FileHash": "59246e5",
- "OtherHash": "45c42ef",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "2989105"
- },
- "JsonProperty.cls": {
- "FileHash": "3b09160",
- "OtherHash": "2eacd4d",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "70cd0d9"
- },
- "L10nDict.cls": {
- "FileHash": "0e46824",
- "OtherHash": "c9ca078",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "a19d138"
- },
- "L10nTools.bas": {
- "FileHash": "aaacee8",
- "OtherHash": "4e51413",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "08e4b15"
- },
- "modApplication.bas": {
- "FileHash": "95c1184",
- "OtherHash": "56a90d2",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "cbe5b28"
- },
- "modErrorHandler.bas": {
- "FileHash": "ba47251",
- "OtherHash": "779080c",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "0c2bc4e"
- },
- "modMSAccessVcsSupport.bas": {
- "FileHash": "6bd5525",
- "OtherHash": "2191c37",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "67e2391"
- },
- "modWizardTools.bas": {
- "FileHash": "2ed5f90",
- "OtherHash": "e78d15d",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "5dd7404"
- },
- "SqlTools.cls": {
- "FileHash": "e90f419",
- "OtherHash": "a88866d",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "f47237d"
- },
- "StringCollection.cls": {
- "FileHash": "b91760b",
- "OtherHash": "8cbca25",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "cac4f52"
- },
- "StringTools.bas": {
- "FileHash": "b57f403",
- "OtherHash": "a0d3023",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "559019f"
- },
- "TempDbHandler.cls": {
- "FileHash": "365b816",
- "OtherHash": "ea22dd0",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "385a0e7"
- },
- "WinApiFileInfo.cls": {
- "FileHash": "cc2c259",
- "OtherHash": "6767bcd",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "39d5353"
- },
- "WinApiImageTools.cls": {
- "FileHash": "a80059c",
- "OtherHash": "56e5d15",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "2caebb8"
- },
- "WinApiLayoutTools.cls": {
- "FileHash": "d197441",
- "OtherHash": "0653333",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "f6763a1"
- },
- "WinApiShellTools.cls": {
- "FileHash": "977ff01",
- "OtherHash": "919e448",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "866ee8c"
- },
- "WinApiShortcutMenu.cls": {
- "FileHash": "a1a7a39",
- "OtherHash": "8696942",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "adc06f7"
- },
- "WinApiTools.cls": {
- "FileHash": "e7c873a",
- "OtherHash": "b4ac726",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "444a928"
- },
- "WinApiToolsFactory.bas": {
- "FileHash": "b7072e4",
- "OtherHash": "83cf4b9",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "6419564"
- },
- "WinApiWindowTools.cls": {
- "FileHash": "eb41ea3",
- "OtherHash": "f76af6d",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "0c40a81"
- }
- },
- "Nav Pane Groups": {
- "nav-pane-groups.json": {
- "FileHash": "4634b1b",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "93ade4c"
- }
- },
- "Proj Properties": {
- "proj-properties.json": {
- "FileHash": "edd3f81",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "240d383"
- }
- },
- "Project": {
- "project.json": {
- "FileHash": "9fe41ad",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "204dd78"
- }
- },
- "Tables": {
- "L10n_Dict.xml": {
- "FileHash": "9a17b18",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "e795b6c"
- },
- "tab1DS.xml": {
- "FileHash": "89a2276",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "4d1f67e"
- },
- "USys_AppFiles.xml": {
- "FileHash": "ec82189",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "ac6b969"
- },
- "USysRegInfo.xml": {
- "FileHash": "4d784f9",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "5f3f0f2"
- }
- },
- "Themes": {
- "Office.thmx": {
- "FileHash": "9fc4290",
- "OtherHash": "f07a104",
- "ExportDate": "2025-06-09T11:22:33.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "ff2b2fb"
- }
- },
- "VB Project": {
- "vbe-project.json": {
- "FileHash": "3b4e080",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "e1968d6"
- }
- },
- "VBE References": {
- "vbe-references.json": {
- "FileHash": "97282f9",
- "ExportDate": "2025-06-09T11:22:32.000Z",
- "SourceModified": null,
- "FilePropertiesHash": "352ee20"
- }
- }
- }
- }
-}