diff options
author | Jean-Pierre Ledure <jp@ledure.be> | 2017-06-11 17:42:11 +0200 |
---|---|---|
committer | Jean-Pierre Ledure <jp@ledure.be> | 2017-06-11 17:42:11 +0200 |
commit | cc6f5af10725f16c659d639857eb80b771f44b9c (patch) | |
tree | 01ba39fcf7aa846beeea00d989d65abdf853555a /wizards | |
parent | 756e090b7fb618402d2e8d25f13acba5416536d4 (diff) |
Access2Base - Correct handling of empty arrays in UtilProperty
Avoid runtime error when storing an empty array
(undocumented API)
Change-Id: I3f8d31300dec365d7028dcd6bd9de2b24b2e0c4c
Diffstat (limited to 'wizards')
-rw-r--r-- | wizards/source/access2base/UtilProperty.xba | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/wizards/source/access2base/UtilProperty.xba b/wizards/source/access2base/UtilProperty.xba index 88c8aa9bc756..e17b10374441 100644 --- a/wizards/source/access2base/UtilProperty.xba +++ b/wizards/source/access2base/UtilProperty.xba @@ -217,8 +217,10 @@ Dim cstLF As String Case < vbArray ' Scalar sResult = sResult & sName & " = " & Utils._CStr(vValue, False) & cstLF Case Else ' Vector or matrix + If uBound(vValue, 1) < 0 Then + sResult = sResult & sName & " = (0)" & cstLF ' 1-dimension but vector of vectors must also be considered - If VarType(vValue(0)) >= vbArray Then + ElseIf VarType(vValue(0)) >= vbArray Then sResult = sResult & sName & " = (" & UBound(vValue) + 1 & "," & UBound(vValue(0)) + 1 & ")" & cstLF For j = 0 To UBound(vValue) sResult = sResult & Utils._CStr(vValue(j), False) & cstLF @@ -263,19 +265,24 @@ Const cstEqualArray = " = (", cstEqual = " = " If InStr(vString(i), cstEqualArray) = lPosition + Len(sName) Then ' Start array processing lSearch = lPosition + Len(sName) + Len(cstEqualArray) - 1 sDim = Utils._RegexSearch(vString(i), "\([0-9]+\)", lSearch) ' e.g. (10) - If sDim <> "" Then + If sDim = "(0)" Then ' Empty array + iRows = -1 + vValue = Array() + _SetPropertyValue(vResult, sName, vValue) + ElseIf sDim <> "" Then ' Vector with content iCols = CInt(Mid(sDim, 2, Len(sDim) - 2)) iRows = 0 ReDim vValue(0 To iCols - 1) - Else + iArray = 0 + Else ' Matrix with content lSearch = lPosition + Len(sName) + Len(cstEqualArray) - 1 sDim = Utils._RegexSearch(vString(i), "\([0-9]+,", lSearch) ' e.g. (10, iRows = CInt(Mid(sDim, 2, Len(sDim) - 2)) sDim = Utils._RegexSearch(vString(i), ",[0-9]+\)", lSearch) ' e.g. ,20) iCols = CInt(Mid(sDim, 2, Len(sDim) - 2)) ReDim vValue(0 To iRows - 1) + iArray = 0 End If - iArray = 0 ElseIf InStr(vString(i), cstEqual) = lPosition + Len(sName) Then vValue = Utils._CVar(Mid(vString(i), Len(sName) + Len(cstEqual) + 1)) _SetPropertyValue(vResult, sName, vValue) |