f55a0a54b2
Redesign of CurrentDb, CurrentDoc interfaces. Creation of new Root_.xba class module. Console logs, TempVars and Dialog collections are unchanged. Change-Id: I573a75e8fb54b277aef84d4518cc8e5cc21d7270
410 lines
No EOL
16 KiB
XML
410 lines
No EOL
16 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
|
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Collect" script:language="StarBasic">REM =======================================================================================================================
|
|
REM === The Access2Base library is a part of the LibreOffice project. ===
|
|
REM === Full documentation is available on http://www.access2base.com ===
|
|
REM =======================================================================================================================
|
|
|
|
Option Compatible
|
|
Option ClassModule
|
|
|
|
Option Explicit
|
|
|
|
REM MODULE NAME <> COLLECTION (seems a reserved name ?)
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
REM --- CLASS ROOT FIELDS ---
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
|
|
Private _Type As String ' Must be COLLECTION
|
|
Private _CollType As String
|
|
Private _ParentType As String
|
|
Private _ParentName As String ' Name or shortcut
|
|
Private _ParentDatabase As Object
|
|
Private _Count As Long
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
REM --- CONSTRUCTORS / DESTRUCTORS ---
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Private Sub Class_Initialize()
|
|
_Type = OBJCOLLECTION
|
|
_CollType = ""
|
|
_ParentType = ""
|
|
_ParentName = ""
|
|
Set _ParentDatabase = Nothing
|
|
_Count = 0
|
|
End Sub ' Constructor
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Private Sub Class_Terminate()
|
|
On Local Error Resume Next
|
|
Call Class_Initialize()
|
|
End Sub ' Destructor
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Public Sub Dispose()
|
|
Call Class_Terminate()
|
|
End Sub ' Explicit destructor
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
REM --- CLASS GET/LET/SET PROPERTIES ---
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
|
|
Property Get Count() As Long
|
|
Count = _PropertyGet("Count")
|
|
End Property ' Count (get)
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Property Get Item(ByVal Optional pvItem As Variant) As Variant
|
|
'Return property value.
|
|
'pvItem either numeric index or property name
|
|
|
|
Const cstThisSub = "Collection.getItem"
|
|
Utils._SetCalledSub(cstThisSub)
|
|
If IsMissing(pvItem) Then Goto Exit_Function ' To allow object watching in Basic IDE, do not generate error
|
|
If Not Utils._CheckArgument(pvItem, 1, Utils._AddNumeric(vbString)) Then Goto Exit_Function
|
|
|
|
Dim vNames() As Variant, oProperty As Object
|
|
|
|
Set Item = Nothing
|
|
Select Case _CollType
|
|
Case COLLALLDIALOGS
|
|
Set Item = Application.AllDialogs(pvItem)
|
|
Case COLLALLFORMS
|
|
Set Item = Application.AllForms(pvItem)
|
|
Case COLLCONTROLS
|
|
Select Case _ParentType
|
|
Case OBJCONTROL, OBJSUBFORM
|
|
Set Item = getObject(_ParentName).Controls(pvItem)
|
|
Case OBJDIALOG
|
|
Set Item = Application.AllDialogs(_ParentName).Controls(pvItem)
|
|
Case OBJFORM
|
|
Set Item = Application.Forms(_ParentName).Controls(pvItem)
|
|
Case OBJOPTIONGROUP
|
|
' NOT SUPPORTED
|
|
End Select
|
|
Case COLLFORMS
|
|
Set Item = Application.Forms(pvItem)
|
|
Case COLLFIELDS
|
|
Select Case _ParentType
|
|
Case OBJQUERYDEF
|
|
Set Item = _ParentDatabase.QueryDefs(_ParentName).Fields(pvItem)
|
|
Case OBJRECORDSET
|
|
Set Item = _ParentDatabase.Recordsets(_ParentName).Fields(pvItem)
|
|
Case OBJTABLEDEF
|
|
Set Item = _ParentDatabase.TableDefs(_ParentName).Fields(pvItem)
|
|
End Select
|
|
Case COLLPROPERTIES
|
|
Select Case _ParentType
|
|
Case OBJCONTROL, OBJSUBFORM
|
|
Set Item = getObject(_ParentName).Properties(pvItem)
|
|
Case OBJDATABASE
|
|
Set Item = _ParentDatabase.Properties(pvItem)
|
|
Case OBJDIALOG
|
|
Set Item = Application.AllDialogs(_ParentName).Properties(pvItem)
|
|
Case OBJFIELD
|
|
vNames() = Split(_ParentName, "/")
|
|
Select Case vNames(0)
|
|
Case OBJQUERYDEF
|
|
Set Item = _ParentDatabase.QueryDefs(vNames(1)).Fields(vNames(2)).Properties(pvItem)
|
|
Case OBJRECORDSET
|
|
Set Item = _ParentDatabase.Recordsets(vNames(1)).Fields(vNames(2)).Properties(pvItem)
|
|
Case OBJTABLEDEF
|
|
Set Item = _ParentDatabase.TableDefs(vNames(1)).Fields(vNames(2)).Properties(pvItem)
|
|
End Select
|
|
Case OBJFORM
|
|
Set Item = Application.Forms(_ParentName).Properties(pvItem)
|
|
Case OBJQUERYDEF
|
|
Set Item = _ParentDatabase.QueryDefs(_ParentName).Properties(pvItem)
|
|
Case OBJRECORDSET
|
|
Set Item = _ParentDatabase.Recordsets(_ParentName).Properties(pvItem)
|
|
Case OBJTABLEDEF
|
|
Set Item = _ParentDatabase.TableDefs(_ParentName).Properties(pvItem)
|
|
Case OBJCOLLECTION, OBJEVENT, OBJOPTIONGROUP, OBJPROPERTY
|
|
' NOT SUPPORTED
|
|
End Select
|
|
Case COLLQUERYDEFS
|
|
Set Item = _ParentDatabase.QueryDefs(pvItem)
|
|
Case COLLRECORDSETS
|
|
Set Item = _ParentDatabase.Recordsets(pvItem)
|
|
Case COLLTABLEDEFS
|
|
Set Item = _ParentDatabase.TableDefs(pvItem)
|
|
Case COLLTEMPVARS
|
|
Set Item = Application.TempVars(pvItem)
|
|
Case Else
|
|
End Select
|
|
|
|
Exit_Function:
|
|
Utils._ResetCalledSub(cstThisSub)
|
|
Exit Property
|
|
Error_Function:
|
|
TraceError(TRACEABORT, Err, Utils._CalledSub(), Erl)
|
|
Set Item = Nothing
|
|
GoTo Exit_Function
|
|
End Property ' V1.1.0
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Property Get ObjectType() As String
|
|
ObjectType = _PropertyGet("ObjectType")
|
|
End Property ' ObjectType (get)
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Public Function Properties(ByVal Optional pvIndex As Variant) As Variant
|
|
' Return
|
|
' a Collection object if pvIndex absent
|
|
' a Property object otherwise
|
|
|
|
Dim vProperty As Variant, vPropertiesList() As Variant, sObject As String
|
|
vPropertiesList = _PropertiesList()
|
|
sObject = Utils._PCase(_Type)
|
|
If IsMissing(pvIndex) Then
|
|
vProperty = PropertiesGet._Properties(sObject, _ParentName, vPropertiesList)
|
|
Else
|
|
vProperty = PropertiesGet._Properties(sObject, _ParentName, vPropertiesList, pvIndex)
|
|
vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
|
|
End If
|
|
|
|
Exit_Function:
|
|
Set Properties = vProperty
|
|
Exit Function
|
|
End Function ' Properties
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
REM --- CLASS METHODS ---
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
|
|
Public Function Add(Optional pvNew As Variant, Optional pvValue As Variant) As Boolean
|
|
' Append a new TableDef or TempVar object to the TableDefs/TempVars collections
|
|
|
|
Const cstThisSub = "Collection.Add"
|
|
Utils._SetCalledSub(cstThisSub)
|
|
If _ErrorHandler() Then On Local Error Goto Error_Function
|
|
|
|
Dim odbDatabase As Object, oConnection As Object, oTables As Object, oTable As Object
|
|
Dim vObject As Variant, oTempVar As Object
|
|
Add = False
|
|
If IsMissing(pvNew) Then Call _TraceArguments()
|
|
|
|
Select Case _CollType
|
|
Case COLLTABLEDEFS
|
|
If Not Utils._CheckArgument(pvNew, 1, vbObject) Then Goto Exit_Function
|
|
Set vObject = pvNew
|
|
With vObject
|
|
Set odbDatabase = ._ParentDatabase
|
|
If odbDatabase._DbConnect <> DBCONNECTBASE Then Goto Error_NotApplicable
|
|
Set oConnection = odbDatabase.Connection
|
|
If IsNull(.TableDescriptor) Or .TableFieldsCount = 0 Then Goto Error_Sequence
|
|
Set oTables = oConnection.getTables()
|
|
oTables.appendByDescriptor(.TableDescriptor)
|
|
Set .Table = oTables.getByName(._Name)
|
|
.TableDescriptor.dispose()
|
|
Set .TableDescriptor = Nothing
|
|
.TableFieldsCount = 0
|
|
.TableKeysCount = 0
|
|
End With
|
|
Case COLLTEMPVARS
|
|
If Not Utils._CheckArgument(pvNew, 1, vbString) Then Goto Exit_Function
|
|
If pvNew = "" Then Goto Error_Name
|
|
If IsMissing(pvValue) Then Call _TraceArguments()
|
|
If _A2B_.hasItem(COLLTEMPVARS, pvNew) Then Goto Error_Name
|
|
Set oTempVar = New TempVar
|
|
oTempVar._Name = pvNew
|
|
oTempVar._Value = pvValue
|
|
_A2B_.TempVars.Add(oTempVar, UCase(pvNew))
|
|
Case Else
|
|
Goto Error_NotApplicable
|
|
End Select
|
|
|
|
_Count = _Count + 1
|
|
Add = True
|
|
|
|
Exit_Function:
|
|
Utils._ResetCalledSub(cstThisSub)
|
|
Exit Function
|
|
Error_Function:
|
|
TraceError(TRACEABORT, Err, cstThisSub, Erl)
|
|
GoTo Exit_Function
|
|
Error_NotApplicable:
|
|
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, 1, cstThisSub)
|
|
Goto Exit_Function
|
|
Error_Sequence:
|
|
TraceError(TRACEFATAL, ERRTABLECREATION, Utils._CalledSub(), 0, 1, vObject._Name)
|
|
Goto Exit_Function
|
|
Error_Name:
|
|
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), False, ,Array(1, pvNew))
|
|
AddItem = False
|
|
Goto Exit_Function
|
|
End Function ' Add V1.1.0
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Public Function Delete(ByVal Optional pvName As Variant) As Boolean
|
|
' Delete a TableDef or QueryDef object in the TableDefs/QueryDefs collections
|
|
|
|
Const cstThisSub = "Collection.Delete"
|
|
Utils._SetCalledSub(cstThisSub)
|
|
If _ErrorHandler() Then On Local Error Goto Error_Function
|
|
|
|
Dim odbDatabase As Object, oColl As Object, vName As Variant
|
|
Delete = False
|
|
If IsMissing(pvName) Then pvName = ""
|
|
If Not Utils._CheckArgument(pvName, 1, vbString) Then Goto Exit_Function
|
|
If pvName = "" Then Call _TraceArguments()
|
|
|
|
Select Case _CollType
|
|
Case COLLTABLEDEFS, COLLQUERYDEFS
|
|
If _A2B_.CurrentDocIndex() <> 0 Then Goto Error_NotApplicable
|
|
Set odbDatabase = Application._CurrentDb()
|
|
If odbDatabase._DbConnect <> DBCONNECTBASE Then Goto Error_NotApplicable
|
|
If _CollType = COLLTABLEDEFS Then Set oColl = odbDatabase.Connection.getTables() Else Set oColl = odbDatabase.Connection.getQueries()
|
|
With oColl
|
|
vName = _InList(pvName, .getElementNames(), True)
|
|
If vName = False Then Goto trace_NotFound
|
|
.dropByName(vName)
|
|
End With
|
|
odbDatabase.Document.store()
|
|
Case Else
|
|
Goto Error_NotApplicable
|
|
End Select
|
|
|
|
_Count = _Count - 1
|
|
Delete = True
|
|
|
|
Exit_Function:
|
|
Utils._ResetCalledSub(cstThisSub)
|
|
Exit Function
|
|
Error_Function:
|
|
TraceError(TRACEABORT, Err, cstThisSub, Erl)
|
|
GoTo Exit_Function
|
|
Error_NotApplicable:
|
|
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, 1, cstThisSub)
|
|
Goto Exit_Function
|
|
Trace_NotFound:
|
|
TraceError(TRACEFATAL, ERROBJECTNOTFOUND, Utils._CalledSub(), 0, , Array(_GetLabel(Left(_CollType, 5)), pvName))
|
|
Goto Exit_Function
|
|
End Function ' Delete V1.1.0
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
|
|
' Return property value of psProperty property name
|
|
|
|
Utils._SetCalledSub("Collection.getProperty")
|
|
If IsMissing(pvProperty) Then Call _TraceArguments()
|
|
getProperty = _PropertyGet(pvProperty)
|
|
Utils._ResetCalledSub("Collection.getProperty")
|
|
|
|
End Function ' getProperty
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Public Function hasProperty(ByVal Optional pvProperty As Variant) As Boolean
|
|
' Return True if object has a valid property called pvProperty (case-insensitive comparison !)
|
|
|
|
If IsMissing(pvProperty) Then hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList()) Else hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList(), pvProperty)
|
|
Exit Function
|
|
|
|
End Function ' hasProperty
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Public Function Remove(ByVal Optional pvName As Variant) As Boolean
|
|
' Remove a TempVar from the TempVars collection
|
|
|
|
Const cstThisSub = "Collection.Remove"
|
|
Utils._SetCalledSub(cstThisSub)
|
|
If _ErrorHandler() Then On Local Error Goto Error_Function
|
|
|
|
Dim oColl As Object, vName As Variant
|
|
Remove = False
|
|
If IsMissing(pvName) Then pvName = ""
|
|
If Not Utils._CheckArgument(pvName, 1, vbString) Then Goto Exit_Function
|
|
If pvName = "" Then Call _TraceArguments()
|
|
|
|
Select Case _CollType
|
|
Case COLLTEMPVARS
|
|
If Not _A2B_.hasItem(COLLTEMPVARS, pvName) Then Goto Error_Name
|
|
_A2B_.TempVars.Remove(UCase(pvName))
|
|
Case Else
|
|
Goto Error_NotApplicable
|
|
End Select
|
|
|
|
_Count = _Count - 1
|
|
Remove = True
|
|
|
|
Exit_Function:
|
|
Utils._ResetCalledSub(cstThisSub)
|
|
Exit Function
|
|
Error_Function:
|
|
TraceError(TRACEABORT, Err, cstThisSub, Erl)
|
|
GoTo Exit_Function
|
|
Error_NotApplicable:
|
|
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, 1, cstThisSub)
|
|
Goto Exit_Function
|
|
Error_Name:
|
|
TraceError(TRACEFATAL, ERRWRONGARGUMENT, Utils._CalledSub(), False, ,Array(1, pvName))
|
|
AddItem = False
|
|
Goto Exit_Function
|
|
End Function ' Remove V1.2.0
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Public Function RemoveAll() As Boolean
|
|
' Remove the whole TempVars collection
|
|
|
|
Const cstThisSub = "Collection.Remove"
|
|
Utils._SetCalledSub(cstThisSub)
|
|
If _ErrorHandler() Then On Local Error Goto Error_Function
|
|
|
|
Select Case _CollType
|
|
Case COLLTEMPVARS
|
|
Set _A2B_.TempVars = New Collection
|
|
_Count = 0
|
|
Case Else
|
|
Goto Error_NotApplicable
|
|
End Select
|
|
|
|
Exit_Function:
|
|
Utils._ResetCalledSub(cstThisSub)
|
|
Exit Function
|
|
Error_Function:
|
|
TraceError(TRACEABORT, Err, cstThisSub, Erl)
|
|
GoTo Exit_Function
|
|
Error_NotApplicable:
|
|
TraceError(TRACEFATAL, ERRMETHOD, Utils._CalledSub(), 0, 1, cstThisSub)
|
|
Goto Exit_Function
|
|
End Function ' RemoveAll V1.2.0
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
REM --- PRIVATE FUNCTIONS ---
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Private Function _PropertiesList() As Variant
|
|
_PropertiesList = Array("Count", "Item", "ObjectType")
|
|
End Function ' _PropertiesList
|
|
|
|
REM -----------------------------------------------------------------------------------------------------------------------
|
|
Private Function _PropertyGet(ByVal psProperty As String) As Variant
|
|
' Return property value of the psProperty property name
|
|
|
|
If _ErrorHandler() Then On Local Error Goto Error_Function
|
|
Utils._SetCalledSub("Collection.get" & psProperty)
|
|
_PropertyGet = Nothing
|
|
|
|
Select Case UCase(psProperty)
|
|
Case UCase("Count")
|
|
_PropertyGet = _Count
|
|
Case UCase("Item")
|
|
Case UCase("ObjectType")
|
|
_PropertyGet = _Type
|
|
Case Else
|
|
Goto Trace_Error
|
|
End Select
|
|
|
|
Exit_Function:
|
|
Utils._ResetCalledSub("Collection.get" & psProperty)
|
|
Exit Function
|
|
Trace_Error:
|
|
TraceError(TRACEWARNING, ERRPROPERTY, Utils._CalledSub(), 0, , psProperty)
|
|
_PropertyGet = Nothing
|
|
Goto Exit_Function
|
|
Error_Function:
|
|
TraceError(TRACEABORT, Err, "Collection._PropertyGet", Erl)
|
|
_PropertyGet = Nothing
|
|
GoTo Exit_Function
|
|
End Function ' _PropertyGet
|
|
</script:module> |