123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598 |
- <?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="DataDef" 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 -----------------------------------------------------------------------------------------------------------------------
- REM --- CLASS ROOT FIELDS ---
- REM -----------------------------------------------------------------------------------------------------------------------
- Private _Type As String ' Must be TABLEDEF or QUERYDEF
- Private _This As Object ' Workaround for absence of This builtin function
- Private _Parent As Object
- Private _Name As String ' For tables: [[Catalog.]Schema.]Table
- Private _ParentDatabase As Object
- Private _ReadOnly As Boolean
- Private Table As Object ' com.sun.star.sdb.dbaccess.ODBTable
- Private CatalogName As String
- Private SchemaName As String
- Private TableName As String
- Private Query As Object ' com.sun.star.sdb.dbaccess.OQuery
- Private TableDescriptor As Object ' com.sun.star.sdb.dbaccess.ODBTable
- Private TableFieldsCount As Integer
- Private TableKeysCount As Integer
- REM -----------------------------------------------------------------------------------------------------------------------
- REM --- CONSTRUCTORS / DESTRUCTORS ---
- REM -----------------------------------------------------------------------------------------------------------------------
- Private Sub Class_Initialize()
- _Type = ""
- Set _This = Nothing
- Set _Parent = Nothing
- _Name = ""
- Set _ParentDatabase = Nothing
- _ReadOnly = False
- Set Table = Nothing
- CatalogName = ""
- SchemaName = ""
- TableName = ""
- Set Query = Nothing
- Set TableDescriptor = Nothing
- TableFieldsCount = 0
- TableKeysCount = 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 Name() As String
- Name = _PropertyGet("Name")
- End Property ' Name (get)
- REM -----------------------------------------------------------------------------------------------------------------------
- Property Get ObjectType() As String
- ObjectType = _PropertyGet("ObjectType")
- End Property ' ObjectType (get)
- REM -----------------------------------------------------------------------------------------------------------------------
- Property Get SQL() As Variant
- SQL = _PropertyGet("SQL")
- End Property ' SQL (get)
- Property Let SQL(ByVal pvValue As Variant)
- Call _PropertySet("SQL", pvValue)
- End Property ' SQL (set)
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function pType() As Integer
- pType = _PropertyGet("Type")
- End Function ' Type (get)
- REM -----------------------------------------------------------------------------------------------------------------------
- REM --- CLASS METHODS ---
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function CreateField(ByVal Optional pvFieldName As Variant _
- , ByVal optional pvType As Variant _
- , ByVal optional pvSize As Variant _
- , ByVal optional pvAttributes As Variant _
- ) As Object
- 'Return a Field object
- Const cstThisSub = "TableDef.CreateField"
- Utils._SetCalledSub(cstThisSub)
- If _ErrorHandler() Then On Local Error Goto Error_Function
- Dim oTable As Object, oNewField As Object, oKeys As Object, oPrimaryKey As Object, oColumn As Object
- Const cstMaxKeyLength = 30
- CreateField = Nothing
- If _ParentDatabase._DbConnect <> DBCONNECTBASE Then Goto Error_NotApplicable
- If IsMissing(pvFieldName) Then Call _TraceArguments()
- If Not Utils._CheckArgument(pvFieldName, 1, vbString) Then Goto Exit_Function
- If pvFieldName = "" Then Call _TraceArguments()
- If IsMissing(pvType) Then Call _TraceArguments()
- If Not Utils._CheckArgument(pvType, 1, Utils._AddNumeric( _
- dbInteger, dbLong, dbBigInt, dbFloat, vbSingle, dbDouble _
- , dbNumeric, dbDecimal, dbText, dbChar, dbMemo _
- , dbDate, dbTime, dbTimeStamp _
- , dbBinary, dbVarBinary, dbLongBinary, dbBoolean _
- )) Then Goto Exit_Function
- If IsMissing(pvSize) Then pvSize = 0
- If pvSize < 0 Then pvSize = 0
- If Not Utils._CheckArgument(pvSize, 1, Utils._AddNumeric()) Then Goto Exit_Function
- If IsMissing(pvAttributes) Then pvAttributes = 0
- If Not Utils._CheckArgument(pvAttributes, 1, Utils._AddNumeric(), Array(0, dbAutoIncrField)) Then Goto Exit_Function
- If _Type <> OBJTABLEDEF Then Goto Error_NotApplicable
- If IsNull(Table) And IsNull(TableDescriptor) Then Goto Error_NotApplicable
-
- If _ReadOnly Then Goto Error_NoUpdate
- Set oNewField = New Field
- With oNewField
- ._This = oNewField
- ._Name = pvFieldName
- ._ParentName = _Name
- ._ParentType = OBJTABLEDEF
- If IsNull(Table) Then Set oTable = TableDescriptor Else Set oTable = Table
- Set .Column = oTable.Columns.createDataDescriptor()
- End With
- With oNewField.Column
- .Name = pvFieldName
- Select Case pvType
- Case dbInteger : .Type = com.sun.star.sdbc.DataType.TINYINT
- Case dbLong : .Type = com.sun.star.sdbc.DataType.INTEGER
- Case dbBigInt : .Type = com.sun.star.sdbc.DataType.BIGINT
- Case dbFloat : .Type = com.sun.star.sdbc.DataType.FLOAT
- Case dbSingle : .Type = com.sun.star.sdbc.DataType.REAL
- Case dbDouble : .Type = com.sun.star.sdbc.DataType.DOUBLE
- Case dbNumeric, dbCurrency : .Type = com.sun.star.sdbc.DataType.NUMERIC
- Case dbDecimal : .Type = com.sun.star.sdbc.DataType.DECIMAL
- Case dbText : .Type = com.sun.star.sdbc.DataType.CHAR
- Case dbChar : .Type = com.sun.star.sdbc.DataType.VARCHAR
- Case dbMemo : .Type = com.sun.star.sdbc.DataType.LONGVARCHAR
- Case dbDate : .Type = com.sun.star.sdbc.DataType.DATE
- Case dbTime : .Type = com.sun.star.sdbc.DataType.TIME
- Case dbTimeStamp : .Type = com.sun.star.sdbc.DataType.TIMESTAMP
- Case dbBinary : .Type = com.sun.star.sdbc.DataType.BINARY
- Case dbVarBinary : .Type = com.sun.star.sdbc.DataType.VARBINARY
- Case dbLongBinary : .Type = com.sun.star.sdbc.DataType.LONGVARBINARY
- Case dbBoolean : .Type = com.sun.star.sdbc.DataType.BOOLEAN
- End Select
- .Precision = Int(pvSize)
- If pvType = dbNumeric Or pvType = dbDecimal Or pvType = dbCurrency Then .Scale = Int(pvSize * 10) - Int(pvSize) * 10
- .IsNullable = com.sun.star.sdbc.ColumnValue.NULLABLE
- If Utils._hasUNOProperty(oNewField.Column, "CatalogName") Then .CatalogName = CatalogName
- If Utils._hasUNOProperty(oNewField.Column, "SchemaName") Then .SchemaName = SchemaName
- If Utils._hasUNOProperty(oNewField.Column, "TableName") Then .TableName = TableName
- If Not IsNull(TableDescriptor) Then TableFieldsCount = TableFieldsCount + 1
- If pvAttributes = dbAutoIncrField Then
- If Not IsNull(Table) Then Goto Error_Sequence ' Do not accept adding an AutoValue field when table exists
- Set oKeys = oTable.Keys
- Set oPrimaryKey = oKeys.createDataDescriptor()
- Set oColumn = oPrimaryKey.Columns.createDataDescriptor()
- oColumn.Name = pvFieldName
- oColumn.CatalogName = CatalogName
- oColumn.SchemaName = SchemaName
- oColumn.TableName = TableName
- oColumn.IsAutoIncrement = True
- oColumn.IsNullable = com.sun.star.sdbc.ColumnValue.NO_NULLS
- oPrimaryKey.Columns.appendByDescriptor(oColumn)
- oPrimaryKey.Name = Left("PK_" & Join(Split(TableName, " "), "_") & "_" & Join(Split(pvFieldName, " "), "_"), cstMaxKeyLength)
- oPrimaryKey.Type = com.sun.star.sdbcx.KeyType.PRIMARY
- oKeys.appendByDescriptor(oPrimaryKey)
- .IsAutoIncrement = True
- .IsNullable = com.sun.star.sdbc.ColumnValue.NO_NULLS
- oColumn.dispose()
- Else
- .IsAutoIncrement = False
- End If
- End With
- oTable.Columns.appendByDescriptor(oNewfield.Column)
-
- Set CreateField = oNewField
- 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, ERRFIELDCREATION, Utils._CalledSub(), 0, 1, pvFieldName)
- Goto Exit_Function
- Error_NoUpdate:
- TraceError(TRACEFATAL, ERRNOTUPDATABLE, Utils._CalledSub(), 0)
- Goto Exit_Function
- End Function ' CreateField V1.1.0
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function Execute(ByVal Optional pvOptions As Variant) As Boolean
- 'Execute a stored query. The query must be an ACTION query.
- Dim cstThisSub As String
- cstThisSub = Utils._PCase(_Type) & ".Execute"
- Utils._SetCalledSub(cstThisSub)
- On Local Error Goto Error_Function
- Const cstNull = -1
- Execute = False
- If _Type <> OBJQUERYDEF Then Goto Trace_Method
- If IsMissing(pvOptions) Then
- pvOptions = cstNull
- Else
- If Not Utils._CheckArgument(pvOptions, 1, Utils._AddNumeric(), dbSQLPassThrough) Then Goto Exit_Function
- End If
-
- 'Check action query
- Dim oStatement As Object, vResult As Variant
- Dim iType As Integer, sSql As String
- iType = pType
- If ( (iType And DBQAction) = 0 ) And ( (iType And DBQDDL) = 0 ) Then Goto Trace_Action
- 'Execute action query
- Set oStatement = _ParentDatabase.Connection.createStatement()
- sSql = Query.Command
- If pvOptions = dbSQLPassThrough Then oStatement.EscapeProcessing = False _
- Else oStatement.EscapeProcessing = Query.EscapeProcessing
- On Local Error Goto SQL_Error
- vResult = oStatement.executeUpdate(_ParentDatabase._ReplaceSquareBrackets(sSql))
- On Local Error Goto Error_Function
-
- Execute = True
- Exit_Function:
- Utils._ResetCalledSub(cstThisSub)
- Exit Function
- Trace_Method:
- TraceError(TRACEFATAL, ERRMETHOD, cstThisSub, 0, , cstThisSub)
- Goto Exit_Function
- Trace_Action:
- TraceError(TRACEFATAL, ERRNOTACTIONQUERY, cstThisSub, 0, , _Name)
- Goto Exit_Function
- SQL_Error:
- TraceError(TRACEFATAL, ERRSQLSTATEMENT, Utils._CalledSub(), 0, , sSql)
- Goto Exit_Function
- Error_Function:
- TraceError(TRACEABORT, Err, cstThisSub, Erl)
- GoTo Exit_Function
- End Function ' Execute V1.1.0
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function Fields(ByVal Optional pvIndex As Variant) As Object
- If _ErrorHandler() Then On Local Error Goto Error_Function
- Dim cstThisSub As String
- cstThisSub = Utils._PCase(_Type) & ".Fields"
- Utils._SetCalledSub(cstThisSub)
- Set Fields = Nothing
- If Not IsMissing(pvIndex) Then
- If Not Utils._CheckArgument(pvIndex, 1, Utils._AddNumeric(vbString)) Then Goto Exit_Function
- End If
-
- Dim sObjects() As String, sObjectName As String, oObject As Object
- Dim i As Integer, bFound As Boolean, oFields As Object
- If _Type = OBJTABLEDEF Then Set oFields = Table.getColumns() Else Set oFields = Query.getColumns()
- sObjects = oFields.ElementNames()
- Select Case True
- Case IsMissing(pvIndex)
- Set oObject = New Collect
- Set oObject._This = oObject
- oObject._CollType = COLLFIELDS
- Set oObject._Parent = _This
- oObject._Count = UBound(sObjects) + 1
- Goto Exit_Function
- Case VarType(pvIndex) = vbString
- bFound = False
- ' Check existence of object and find its exact (case-sensitive) name
- For i = 0 To UBound(sObjects)
- If UCase(pvIndex) = UCase(sObjects(i)) Then
- sObjectName = sObjects(i)
- bFound = True
- Exit For
- End If
- Next i
- If Not bFound Then Goto Trace_NotFound
- Case Else ' pvIndex is numeric
- If pvIndex < 0 Or pvIndex > UBound(sObjects) Then Goto Trace_IndexError
- sObjectName = sObjects(pvIndex)
- End Select
- Set oObject = New Field
- Set oObject._This = oObject
- oObject._Name = sObjectName
- Set oObject.Column = oFields.getByName(sObjectName)
- oObject._ParentName = _Name
- oObject._ParentType = _Type
- Set oObject._ParentDatabase = _ParentDatabase
- Exit_Function:
- Set Fields = oObject
- Set oObject = Nothing
- Utils._ResetCalledSub(cstThisSub)
- Exit Function
- Error_Function:
- TraceError(TRACEABORT, Err, cstThisSub, Erl)
- GoTo Exit_Function
- Trace_NotFound:
- TraceError(TRACEFATAL, ERROBJECTNOTFOUND, Utils._CalledSub(), 0, , Array(_GetLabel("FIELD"), pvIndex))
- Goto Exit_Function
- Trace_IndexError:
- TraceError(TRACEFATAL, ERRCOLLECTION, Utils._CalledSub(), 0)
- Goto Exit_Function
- End Function ' Fields
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function getProperty(Optional ByVal pvProperty As Variant) As Variant
- ' Return property value of psProperty property name
- Dim cstThisSub As String
- cstThisSub = Utils._PCase(_Type) & ".getProperty"
- Utils._SetCalledSub(cstThisSub)
- If IsMissing(pvProperty) Then Call _TraceArguments()
- getProperty = _PropertyGet(pvProperty)
- Utils._ResetCalledSub(cstThisSub)
-
- 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 !)
- Dim cstThisSub As String
- cstThisSub = Utils._PCase(_Type) & ".hasProperty"
- Utils._SetCalledSub(cstThisSub)
- If IsMissing(pvProperty) Then hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList()) Else hasProperty = PropertiesGet._hasProperty(_Type, _PropertiesList(), pvProperty)
- Utils._ResetCalledSub(cstThisSub)
- Exit Function
-
- End Function ' hasProperty
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function OpenRecordset(ByVal Optional pvType As Variant, ByVal Optional pvOptions As Variant, ByVal Optional pvLockEdit As Variant) As Object
- 'Return a Recordset object based on current table- or querydef object
- Dim cstThisSub As String
- cstThisSub = Utils._PCase(_Type) & ".OpenRecordset"
- Utils._SetCalledSub(cstThisSub)
- Const cstNull = -1
- Dim lCommandType As Long, sCommand As String, oObject As Object,bPassThrough As Boolean
- Dim iType As Integer, iOptions As Integer, iLockEdit As Integer
- Set oObject = Nothing
- If VarType(pvType) = vbError Then
- iType = cstNull
- ElseIf IsMissing(pvType) Then
- iType = cstNull
- Else
- If Not Utils._CheckArgument(pvType, 1, Utils._AddNumeric(), Array(cstNull, dbOpenForwardOnly)) Then Goto Exit_Function
- iType = pvType
- End If
- If VarType(pvOptions) = vbError Then
- iOptions = cstNull
- ElseIf IsMissing(pvOptions) Then
- iOptions = cstNull
- Else
- If Not Utils._CheckArgument(pvOptions, 2, Utils._AddNumeric(), Array(cstNull, dbSQLPassThrough)) Then Goto Exit_Function
- iOptions = pvOptions
- End If
- If VarType(pvLockEdit) = vbError Then
- iLockEdit = cstNull
- ElseIf IsMissing(pvLockEdit) Then
- iLockEdit = cstNull
- Else
- If Not Utils._CheckArgument(pvLockEdit, 3, Utils._AddNumeric(), Array(cstNull, dbReadOnly)) Then Goto Exit_Function
- iLockEdit = pvLockEdit
- End If
- Select Case _Type
- Case OBJTABLEDEF
- lCommandType = com.sun.star.sdb.CommandType.TABLE
- sCommand = _Name
- Case OBJQUERYDEF
- lCommandType = com.sun.star.sdb.CommandType.QUERY
- sCommand = _Name
- If iOptions = dbSQLPassThrough Then bPassThrough = True Else bPassThrough = Not Query.EscapeProcessing
- End Select
-
- Set oObject = New Recordset
- With oObject
- ._CommandType = lCommandType
- ._Command = sCommand
- ._ParentName = _Name
- ._ParentType = _Type
- ._ForwardOnly = ( iType = dbOpenForwardOnly )
- ._PassThrough = bPassThrough
- ._ReadOnly = ( (iLockEdit = dbReadOnly) Or _ReadOnly )
- Set ._ParentDatabase = _ParentDatabase
- Set ._This = oObject
- Call ._Initialize()
- End With
- With _ParentDatabase
- .RecordsetMax = .RecordsetMax + 1
- oObject._Name = Format(.RecordsetMax, "0000000")
- .RecordsetsColl.Add(oObject, UCase(oObject._Name))
- End With
-
- If Not ( oObject._BOF And oObject._EOF ) Then oObject.MoveFirst() ' Do nothing if resultset empty
- Exit_Function:
- Set OpenRecordset = oObject
- Set oObject = Nothing
- Utils._ResetCalledSub(cstThisSub)
- Exit Function
- Error_Function:
- TraceError(TRACEABORT, Err, cstThisSub, Erl)
- Set oObject = Nothing
- GoTo Exit_Function
- End Function ' OpenRecordset V1.1.0
- 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
- Dim cstThisSub As String
- cstThisSub = Utils._PCase(_Type) & ".Properties"
- Utils._SetCalledSub(cstThisSub)
- vPropertiesList = _PropertiesList()
- sObject = Utils._PCase(_Type)
- If IsMissing(pvIndex) Then
- vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList)
- Else
- vProperty = PropertiesGet._Properties(sObject, _This, vPropertiesList, pvIndex)
- vProperty._Value = _PropertyGet(vPropertiesList(pvIndex))
- End If
- Set vProperty._ParentDatabase = _ParentDatabase
-
- Exit_Function:
- Set Properties = vProperty
- Utils._ResetCalledSub(cstThisSub)
- Exit Function
- End Function ' Properties
- REM -----------------------------------------------------------------------------------------------------------------------
- Public Function setProperty(ByVal Optional psProperty As String, ByVal Optional pvValue As Variant) As Boolean
- ' Return True if property setting OK
- Dim cstThisSub As String
- cstThisSub = Utils._PCase(_Type) & ".setProperty"
- Utils._SetCalledSub(cstThisSub)
- setProperty = _PropertySet(psProperty, pvValue)
- Utils._ResetCalledSub(cstThisSub)
- End Function
- REM -----------------------------------------------------------------------------------------------------------------------
- REM --- PRIVATE FUNCTIONS ---
- REM -----------------------------------------------------------------------------------------------------------------------
- REM -----------------------------------------------------------------------------------------------------------------------
- Private Function _PropertiesList() As Variant
- Select Case _Type
- Case OBJTABLEDEF
- _PropertiesList = Array("Name", "ObjectType")
- Case OBJQUERYDEF
- _PropertiesList = Array("Name", "ObjectType", "SQL", "Type")
- Case Else
- End Select
- 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
- Dim cstThisSub As String
- cstThisSub = Utils._PCase(_Type)
- Utils._SetCalledSub(cstThisSub & ".get" & psProperty)
- Dim sSql As String, sVerb As String, iType As Integer
- _PropertyGet = EMPTY
- If Not hasProperty(psProperty) Then Goto Trace_Error
-
- Select Case UCase(psProperty)
- Case UCase("Name")
- _PropertyGet = _Name
- Case UCase("ObjectType")
- _PropertyGet = _Type
- Case UCase("SQL")
- _PropertyGet = Query.Command
- Case UCase("Type")
- iType = 0
- sSql = Utils._Trim(UCase(Query.Command))
- sVerb = Split(sSql, " ")(0)
- If sVerb = "SELECT" Then iType = iType + dbQSelect
- If sVerb = "SELECT" And InStr(sSql, " INTO ") > 0 _
- Or sVerb = "CREATE" And InStr(sSql, " TABLE ") > 0 _
- Then iType = iType + dbQMakeTable
- If sVerb = "SELECT" And InStr(sSql, " UNION ") > 0 Then iType = iType + dbQSetOperation
- If Not Query.EscapeProcessing Then iType = iType + dbQSQLPassThrough
- If sVerb = "INSERT" Then iType = iType + dbQAppend
- If sVerb = "DELETE" Then iType = iType + dbQDelete
- If sVerb = "UPDATE" Then iType = iType + dbQUpdate
- If sVerb = "CREATE" _
- Or sVerb = "ALTER" _
- Or sVerb = "DROP" _
- Or sVerb = "RENAME" _
- Or sVerb = "TRUNCATE" _
- Then iType = iType + dbQDDL
- ' dbQAction implied by dbQMakeTable, dbQAppend, dbQDelete and dbQUpdate
- ' To check Type use: If (iType And dbQxxx) <> 0 Then ...
- _PropertyGet = iType
- Case Else
- Goto Trace_Error
- End Select
-
- Exit_Function:
- Utils._ResetCalledSub(cstThisSub & ".get" & psProperty)
- Exit Function
- Trace_Error:
- TraceError(TRACEWARNING, ERRPROPERTY, Utils._CalledSub(), 0, , psProperty)
- _PropertyGet = EMPTY
- Goto Exit_Function
- Error_Function:
- TraceError(TRACEABORT, Err, cstThisSub & "._PropertyGet", Erl)
- _PropertyGet = EMPTY
- GoTo Exit_Function
- End Function ' _PropertyGet
- REM -----------------------------------------------------------------------------------------------------------------------
- Private Function _PropertySet(ByVal psProperty As String, ByVal pvValue As Variant) As Boolean
- ' Return True if property setting OK
- If _ErrorHandler() Then On Local Error Goto Error_Function
- Dim cstThisSub As String
- cstThisSub = Utils._PCase(_Type)
- Utils._SetCalledSub(cstThisSub & ".set" & psProperty)
- 'Execute
- Dim iArgNr As Integer
- _PropertySet = True
- Select Case UCase(_A2B_.CalledSub)
- Case UCase("setProperty") : iArgNr = 3
- Case UCase(cstThisSub & ".setProperty") : iArgNr = 2
- Case UCase(cstThisSub & ".set" & psProperty) : iArgNr = 1
- End Select
-
- If Not hasProperty(psProperty) Then Goto Trace_Error
-
- If _ReadOnly Then Goto Error_NoUpdate
- Select Case UCase(psProperty)
- Case UCase("SQL")
- If Not Utils._CheckArgument(pvValue, iArgNr, vbString, , False) Then Goto Trace_Error_Value
- Query.Command = pvValue
- Case Else
- Goto Trace_Error
- End Select
-
- Exit_Function:
- Utils._ResetCalledSub(cstThisSub & ".set" & psProperty)
- Exit Function
- Trace_Error:
- TraceError(TRACEFATAL, ERRPROPERTY, Utils._CalledSub(), 0, , psProperty)
- _PropertySet = False
- Goto Exit_Function
- Trace_Error_Value:
- TraceError(TRACEFATAL, ERRPROPERTYVALUE, Utils._CalledSub(), 0, 1, Array(pvValue, psProperty))
- _PropertySet = False
- Goto Exit_Function
- Error_NoUpdate:
- TraceError(TRACEFATAL, ERRNOTUPDATABLE, Utils._CalledSub(), 0)
- Goto Exit_Function
- Error_Function:
- TraceError(TRACEABORT, Err, cstThisSub & "._PropertySet", Erl)
- _PropertySet = False
- GoTo Exit_Function
- End Function ' _PropertySet
- </script:module>
|