[Libreoffice-commits] core.git: wizards/source

Jean-Pierre Ledure jp at ledure.be
Thu Mar 22 11:57:36 UTC 2018


 wizards/source/access2base/DoCmd.xba |   54 +++++++++++++++++++----------------
 wizards/source/access2base/Form.xba  |   52 ++++++++++++++++++++++-----------
 2 files changed, 65 insertions(+), 41 deletions(-)

New commits:
commit 5ca8203ae708504855661a5049084f9e8b5926cf
Author: Jean-Pierre Ledure <jp at ledure.be>
Date:   Thu Mar 22 12:53:49 2018 +0100

    Access2Base - FIX Manage case of form without DrawPage
    
    When a database form is not related to data
    and has no control, then the DatabaseForm object is Null.
    The Null value must be intercepted in many places.

diff --git a/wizards/source/access2base/DoCmd.xba b/wizards/source/access2base/DoCmd.xba
index b52cbbdccde9..507d864eee7c 100644
--- a/wizards/source/access2base/DoCmd.xba
+++ b/wizards/source/access2base/DoCmd.xba
@@ -1139,7 +1139,9 @@ Dim sFilter As String, oForm As Object, oFormsCollection As Object
 		sFilter = "(" & pvFilterName & ") And (" & pvWhereCondition & ")"
 	End If
 	Set oFormsCollection = oOpenForm.DrawPage.Forms
-	If oFormsCollection.hasByName("MainForm") Then
+	If oFormsCollection.Count = 0 Then
+		Set oForm = Nothing
+	ElseIf oFormsCollection.hasByName("MainForm") Then
 		Set oForm = oFormsCollection.getByName("MainForm")
 	ElseIf oFormsCollection.hasByName("Form") Then
 		Set oForm = oFormsCollection.getByName("Form")
@@ -1148,34 +1150,38 @@ Dim sFilter As String, oForm As Object, oFormsCollection As Object
 	Else
 		Goto Trace_Error
 	End If
-	If sFilter <> "" Then
-		oForm.Filter = oDatabase._ReplaceSquareBrackets(sFilter)
-		oForm.ApplyFilter = True
-		oForm.reload()
-	ElseIf oForm.Filter <> "" Then			'	If a filter has been set previously it must be removed
-		oForm.Filter = ""
-		oForm.ApplyFilter = False
-		oForm.reload()
+	If Not IsNull(oForm) Then
+		If sFilter <> "" Then
+			oForm.Filter = oDatabase._ReplaceSquareBrackets(sFilter)
+			oForm.ApplyFilter = True
+			oForm.reload()
+		ElseIf oForm.Filter <> "" Then			'	If a filter has been set previously it must be removed
+			oForm.Filter = ""
+			oForm.ApplyFilter = False
+			oForm.reload()
+		End If
 	End If
 	
 'Housekeeping
 	Set ofForm = Application.AllForms(pvFormName)			'	Redone to reinitialize all properties of ofForm now FormName is open
 	With ofForm
-		Select Case pvDataMode
-			Case acFormAdd
-				.AllowAdditions = True
-				.AllowDeletions = False
-				.AllowEdits = False
-			Case acFormEdit
-				.AllowAdditions = True
-				.AllowDeletions = True
-				.AllowEdits = True
-			Case acFormReadOnly
-				.AllowAdditions = False
-				.AllowDeletions = False
-				.AllowEdits = False
-			Case acFormPropertySettings
-		End Select
+		If Not IsNull(.DatabaseForm) Then
+			Select Case pvDataMode
+				Case acFormAdd
+					.AllowAdditions = True
+					.AllowDeletions = False
+					.AllowEdits = False
+				Case acFormEdit
+					.AllowAdditions = True
+					.AllowDeletions = True
+					.AllowEdits = True
+				Case acFormReadOnly
+					.AllowAdditions = False
+					.AllowDeletions = False
+					.AllowEdits = False
+				Case acFormPropertySettings
+			End Select
+		End If
 		.Visible = ( pvWindowMode <> acHidden )
 		._OpenArgs = pvOpenArgs
 		'To avoid AOO 3,4 bug See http://user.services.openoffice.org/en/forum/viewtopic.php?f=13&t=53751
diff --git a/wizards/source/access2base/Form.xba b/wizards/source/access2base/Form.xba
index 4ae6404e53b4..27c3d4a93133 100644
--- a/wizards/source/access2base/Form.xba
+++ b/wizards/source/access2base/Form.xba
@@ -491,7 +491,7 @@ Dim j As Integer
 	Set ocControl = New Control
 	ocControl._ParentType = CTLPARENTISFORM
 	sParentShortcut = _Shortcut
-	iControlCount = DatabaseForm.getCount()
+	If IsNull(DatabaseForm) Then iControlCount = 0 Else iControlCount = DatabaseForm.getCount()
 	
 	If IsMissing(pvIndex) Then					'	No argument, return Collection pseudo-object
 		Set oCounter = New Collect
@@ -777,7 +777,9 @@ Dim oDoc As Object, oFormsCollection As Object, oDatabase As Object
 				If Not IsNull(Component.CurrentController) Then		'	A form opened then closed afterwards keeps a Component attribute
 					Set ContainerWindow = Component.CurrentController.Frame.ContainerWindow
 					Set oFormsCollection = Component.getDrawPage.Forms
-					If oFormsCollection.hasByName("MainForm") Then
+					If oFormsCollection.Count = 0 Then
+						Set DatabaseForm = Nothing
+					ElseIf oFormsCollection.hasByName("MainForm") Then
 						Set DatabaseForm = oFormsCollection.getByName("MainForm")
 					ElseIf oFormsCollection.hasByName("Form") Then
 						Set DatabaseForm = oFormsCollection.getByName("Form")
@@ -801,7 +803,7 @@ Dim oDoc As Object, oFormsCollection As Object, oDatabase As Object
 					End If
 				End With
 		End Select
-		_OrderBy = DatabaseForm.Order
+		If IsNull(DatabaseForm) Then _OrderBy = "" Else _OrderBy = DatabaseForm.Order
 	Else
 		Set Component = Nothing
 		Set ContainerWindow = Nothing
@@ -857,17 +859,21 @@ Dim i As Integer, oObject As Object
 
 	Select Case UCase(psProperty)
 		Case UCase("AllowAdditions")
-			_PropertyGet = DatabaseForm.AllowInserts
+			If IsNull(DatabaseForm) Then _PropertyGet = False Else _PropertyGet = DatabaseForm.AllowInserts
 		Case UCase("AllowDeletions")
-			_PropertyGet = DatabaseForm.AllowDeletes
+			If IsNull(DatabaseForm) Then _PropertyGet = False Else _PropertyGet = DatabaseForm.AllowDeletes
 		Case UCase("AllowEdits")
-			_PropertyGet = DatabaseForm.AllowUpdates
+			If IsNull(DatabaseForm) Then _PropertyGet = False Else _PropertyGet = DatabaseForm.AllowUpdates
 		Case UCase("Bookmark")
-			On Local Error Resume Next			'	Disable error handler because bookmarking does not always react well in events ...
-			If DatabaseForm.IsBookmarkable Then vBookmark = DatabaseForm.getBookmark() Else vBookmark = Nothing
-			If _ErrorHandler() Then On Local Error Goto Error_Function Else On Local Error Goto 0
-			If IsNull(vBookmark) Then Goto Trace_Error
-			_PropertyGet = vBookmark
+			If IsNull(DatabaseForm) Then
+				_PropertyGet = 0
+			Else
+				On Local Error Resume Next			'	Disable error handler because bookmarking does not always react well in events ...
+				If DatabaseForm.IsBookmarkable Then vBookmark = DatabaseForm.getBookmark() Else vBookmark = Nothing
+				If _ErrorHandler() Then On Local Error Goto Error_Function Else On Local Error Goto 0
+				If IsNull(vBookmark) Then Goto Trace_Error
+				_PropertyGet = vBookmark
+			End If
 		Case UCase("Caption")
 			Set odatabase = Application._CurrentDb(_DocEntry, _DbEntry)
 			Select Case oDatabase._DbConnect
@@ -875,11 +881,11 @@ Dim i As Integer, oObject As Object
 				Case DBCONNECTBASE		:	_PropertyGet = Component.CurrentController.Frame.Title
 			End Select
 		Case UCase("CurrentRecord")
-			_PropertyGet = DatabaseForm.Row
+			If IsNull(DatabaseForm) Then _PropertyGet = 0 Else _PropertyGet = DatabaseForm.Row
 		Case UCase("Filter")
-			_PropertyGet = DatabaseForm.Filter
+			If IsNull(DatabaseForm) Then _PropertyGet = "" Else _PropertyGet = DatabaseForm.Filter
 		Case UCase("FilterOn")
-			_PropertyGet = DatabaseForm.ApplyFilter
+			If IsNull(DatabaseForm) Then _PropertyGet = False Else _PropertyGet = DatabaseForm.ApplyFilter
 		Case UCase("Height")
 			_PropertyGet = ContainerWindow.getPosSize().Height
 		Case UCase("IsLoaded")		'	Only for indirect access from property object
@@ -892,14 +898,15 @@ Dim i As Integer, oObject As Object
 					, UCase("OnApproveSubmit"), UCase("OnConfirmDelete"), UCase("OnCursorMoved"), UCase("OnErrorOccurred") _
 					, UCase("OnLoaded"), UCase("OnReloaded"), UCase("OnReloading"), UCase("OnResetted"), UCase("OnRowChanged") _
 					, UCase("OnUnloaded"), UCase("OnUnloading")
-			_PropertyGet = Utils._GetEventScriptCode(DatabaseForm, psProperty, _Name, True)
+			If IsNull(DatabaseForm) Then _PropertyGet = "" Else _PropertyGet = Utils._GetEventScriptCode(DatabaseForm, psProperty, _Name, True)
 		Case UCase("OpenArgs")
 			_PropertyGet = _OpenArgs
 		Case UCase("OrderBy")
 			_PropertyGet = _OrderBy
 		Case UCase("OrderByOn")
-			If DatabaseForm.Order = "" Then _PropertyGet = False Else _PropertyGet = True
+			If IsNull(DatabaseForm) Then _PropertyGet = False Else _PropertyGet = ( DatabaseForm.Order <> "" )
 		Case UCase("Recordset")
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			If DatabaseForm.Command = "" Then Goto Trace_Error		'	No underlying data ??
 			Set oObject = New Recordset
 			With DatabaseForm
@@ -923,7 +930,7 @@ Dim i As Integer, oObject As Object
 			If Not ( oObject._BOF And oObject._EOF ) Then oObject.MoveFirst()		'	Do nothing if resultset empty
 			Set _PropertyGet = oObject
 		Case UCase("RecordSource")
-			_PropertyGet = DatabaseForm.Command
+			If IsNull(DatabaseForm) Then _PropertyGet = "" Else _PropertyGet = DatabaseForm.Command
 		Case UCase("Visible")
 			_PropertyGet = ContainerWindow.IsVisible()
 		Case UCase("Width")
@@ -966,19 +973,23 @@ Dim oDatabase As Object
 	Select Case UCase(psProperty)
 		Case UCase("AllowAdditions")
 			If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			DatabaseForm.AllowInserts = pvValue
 			DatabaseForm.reload()
 		Case UCase("AllowDeletions")
 			If Not Utils._CheckArgument(pvValue,iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			DatabaseForm.AllowDeletes = pvValue
 			DatabaseForm.reload()
 		Case UCase("AllowEdits")
 			If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			DatabaseForm.AllowUpdates = pvValue
 			DatabaseForm.reload()
 		Case UCase("Bookmark")
 			If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(vbObject), , False) Then Goto Trace_Error_Value
 			If IsNull(pvValue) Then Goto Trace_Error_Value
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			DatabaseForm.MoveToBookmark(pvValue)
 		Case UCase("Caption")
 			If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
@@ -990,12 +1001,15 @@ Dim oDatabase As Object
 		Case UCase("CurrentRecord")
 			If Not Utils._CheckArgument(pvValue, iArgNr, Utils._AddNumeric(), , False) Then Goto Trace_Error_Value
 			If pvValue < 1 Then Goto Trace_Error_Value
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			DatabaseForm.absolute(pvValue)
 		Case UCase("Filter")
 			If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			DatabaseForm.Filter = Application._CurrentDb(_DocEntry, _DbEntry)._ReplaceSquareBrackets(pvValue)
 		Case UCase("FilterOn")
 			If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			DatabaseForm.ApplyFilter = pvValue
 			DatabaseForm.reload()
 		Case UCase("Height")
@@ -1010,6 +1024,7 @@ Dim oDatabase As Object
 					, UCase("OnLoaded"), UCase("OnReloaded"), UCase("OnReloading"), UCase("OnResetted"), UCase("OnRowChanged") _
 					, UCase("OnUnloaded"), UCase("OnUnloading")
 			If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			If Not Utils._RegisterEventScript(DatabaseForm _
 						, psProperty _
 						, _GetListener(psProperty) _
@@ -1017,13 +1032,16 @@ Dim oDatabase As Object
 						) Then GoTo Trace_Error
 		Case UCase("OrderBy")
 			If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			_OrderBy = Application._CurrentDb(_DocEntry, _DbEntry)._ReplaceSquareBrackets(pvValue)
 		Case UCase("OrderByOn")
 			If Not Utils._CheckArgument(pvValue, iArgNr, vbBoolean, , False) Then Goto Trace_Error_Value
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			If pvValue Then DatabaseForm.Order = _OrderBy Else DatabaseForm.Order = ""
 			DatabaseForm.reload()
 		Case UCase("RecordSource")
 			If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
+			If IsNull(DatabaseForm) Then Goto Trace_Error
 			DatabaseForm.Command = Application._CurrentDb(_DocEntry, _DbEntry)._ReplaceSquareBrackets(pvValue)
 			DatabaseForm.CommandType = com.sun.star.sdb.CommandType.COMMAND
 			DatabaseForm.Filter = ""


More information about the Libreoffice-commits mailing list