123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
- <!--
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- -->
- <script:module xmlns:script="http://openoffice.org/2000/script" script:name="DBMeta" script:language="StarBasic">REM ***** BASIC *****
- Option Explicit
- Public iCommandTypes() as Integer
- Public CurCommandType as Integer
- Public oDataSource as Object
- Public bEnableBinaryOptionGroup as Boolean
- 'Public bSelectContent as Boolean
- Function GetDatabaseNames(baddFirstListItem as Boolean)
- Dim sDatabaseList()
- If oDBContext.HasElements Then
- Dim LocDBList() as String
- Dim MaxIndex as Integer
- Dim i as Integer
- LocDBList = oDBContext.ElementNames()
- MaxIndex = Ubound(LocDBList())
- If baddfirstListItem Then
- ReDim Preserve sDatabaseList(MaxIndex + 1)
- sDatabaseList(0) = sSelectDatasource
- a = 1
- Else
- ReDim Preserve sDatabaseList(MaxIndex)
- a = 0
- End If
- For i = 0 To MaxIndex
- sDatabaseList(a) = oDBContext.ElementNames(i)
- a = a + 1
- Next i
- End If
- GetDatabaseNames() = sDatabaseList()
- End Function
- Sub GetSelectedDBMetaData(sDBName as String)
- Dim OldsDBname as String
- Dim DBIndex as Integer
- Dim LocList() as String
- ' If bStartUp Then
- ' bStartUp = false
- ' Exit Sub
- ' End Sub
- ToggleDatabasePage(False)
- With DialogModel
- If GetConnection(sDBName) Then
- If GetDBMetaData() Then
- LocList() = AddListToList(Array(sSelectDBTable), TableNames())
- .lstTables.StringItemList() = AddListToList(LocList(), QueryNames())
- ' bSelectContent = True
- .lstTables.SelectedItems() = Array(0)
- iCommandTypes() = CreateCommandTypeList()
- EmptyFieldsListboxes()
- End If
- End If
- bEnableBinaryOptionGroup = False
- .lstTables.Enabled = True
- .lblTables.Enabled = True
- ' Else
- ' DialogModel.lstTables.StringItemList = Array(sSelectDBTable)
- ' EmptyFieldsListboxes()
- ' End If
- ToggleDatabasePage(True)
- End With
- End Sub
- Function GetConnection(sDBName as String)
- Dim oInteractionHandler as Object
- Dim bExitLoop as Boolean
- Dim bGetConnection as Boolean
- Dim iMsg as Integer
- Dim Nulllist()
- If Not IsNull(oDBConnection) Then
- oDBConnection.Dispose()
- End If
- oDataSource = oDBContext.GetByName(sDBName)
- ' If Not oDBContext.hasbyName(sDBName) Then
- ' GetConnection() = False
- ' Exit Function
- ' End If
- If Not oDataSource.IsPasswordRequired Then
- oDBConnection = oDBContext.GetByName(sDBName).GetConnection("","")
- GetConnection() = True
- Else
- oInteractionHandler = createUnoService("com.sun.star.task.InteractionHandler")
- oDataSource = oDBContext.GetByName(sDBName)
- On Local Error Goto NOCONNECTION
- Do
- bExitLoop = True
- oDBConnection = oDataSource.ConnectWithCompletion(oInteractionHandler)
- NOCONNECTION:
- bGetConnection = Err = 0
- If bGetConnection Then
- bGetConnection = Not IsNull(oDBConnection)
- If Not bGetConnection Then
- Exit Do
- End If
- End If
- If Not bGetConnection Then
- iMsg = Msgbox (sMsgNoConnection,32 + 2, sMsgWizardName)
- bExitLoop = iMsg = SBCANCEL
- Resume CLERROR
- CLERROR:
- End If
- Loop Until bExitLoop
- On Local Error Goto 0
- If Not bGetConnection Then
- DialogModel.lstTables.StringItemList() = Array(sSelectDBTable)
- DialogModel.lstFields.StringItemList() = NullList()
- DialogModel.lstSelFields.StringItemList() = NullList()
- End If
- GetConnection() = bGetConnection
- End If
- End Function
- Function GetDBMetaData()
- If oDBContext.HasElements Then
- Tablenames() = oDBConnection.Tables.ElementNames()
- Querynames() = oDBConnection.Queries.ElementNames()
- GetDBMetaData = True
- Else
- MsgBox(sMsgErrNoDatabase, 64, sMsgWizardName)
- GetDBMetaData = False
- End If
- End Function
- Sub GetTableMetaData()
- Dim iType as Long
- Dim m as Integer
- Dim Found as Boolean
- Dim i as Integer
- Dim sFieldName as String
- Dim n as Integer
- Dim WidthIndex as Integer
- Dim oField as Object
- MaxIndex = Ubound(DialogModel.lstSelFields.StringItemList())
- Dim ColumnMap(MaxIndex)as Integer
- FieldNames() = DialogModel.lstSelFields.StringItemList()
- ' Build a structure which maps the position of a selected field (within the selection) to the column position within
- ' the table. So we ensure that the controls are placed in the same order the according fields are selected.
- For i = 0 To Ubound(FieldNames())
- sFieldName = FieldNames(i)
- Found = False
- n = 0
- While (n< MaxIndex And (Not Found))
- If (FieldNames(n) = sFieldName) Then
- Found = True
- ColumnMap(n) = i
- End If
- n = n + 1
- Wend
- Next i
- For n = 0 to MaxIndex
- sFieldname = FieldNames(n)
- oField = oColumns.GetByName(sFieldName)
- iType = oField.Type
- FieldMetaValues(n,0) = oField.Type
- FieldMetaValues(n,1) = AssignFieldLength(oField.Precision)
- FieldMetaValues(n,2) = GetValueoutofList(iType, WidthList(),1, WidthIndex)
- FieldMetaValues(n,3) = WidthList(WidthIndex,3)
- FieldMetaValues(n,4) = oField.FormatKey
- FieldMetaValues(n,5) = oField.DefaultValue
- FieldMetaValues(n,6) = oField.IsCurrency
- FieldMetaValues(n,7) = oField.Scale
- ' If oField.Description <> "" Then
- '' Todo: What's wrong with this line?
- ' Msgbox oField.Helptext
- ' End If
- FieldMetaValues(n,8) = oField.Description
- Next
- ReDim oDBShapeList(MaxIndex) as Object
- ReDim oTCShapeList(MaxIndex) as Object
- ReDim oDBModelList(MaxIndex) as Object
- ReDim oGroupShapeList(MaxIndex) as Object
- End Sub
- Function GetSpecificFieldNames() as Integer
- Dim n as Integer
- Dim m as Integer
- Dim s as Integer
- Dim iType as Integer
- Dim oField as Object
- Dim MaxIndex as Integer
- Dim EmptyList()
- If Ubound(DialogModel.lstTables.StringItemList()) > -1 Then
- FieldNames() = oColumns.GetElementNames()
- MaxIndex = Ubound(FieldNames())
- If MaxIndex <> -1 Then
- Dim ResultFieldNames(MaxIndex)
- ReDim ImgFieldNames(MaxIndex)
- m = 0
- For n = 0 To MaxIndex
- oField = oColumns.GetByName(FieldNames(n))
- iType = oField.Type
- If GetIndexInMultiArray(WidthList(), iType, 0) <> -1 Then
- ResultFieldNames(m) = FieldNames(n)
- m = m + 1
- End If
- If GetIndexInMultiArray(ImgWidthList(), iType, 0) <> -1 Then
- ImgFieldNames(s) = FieldNames(n)
- s = s + 1
- End If
- Next n
- If s <> 0 Then
- Redim Preserve ImgFieldNames(s-1)
- bEnableBinaryOptionGroup = True
- Else
- bEnableBinaryOptionGroup = False
- End If
- If (DialogModel.optBinariesasGraphics.State = 1) And (s <> 0) Then
- ResultFieldNames() = AddListToList(ResultFieldNames(), ImgFieldNames())
- Else
- Redim Preserve ResultFieldNames(m-1)
- End If
- FieldNames() = ResultFieldNames()
- DialogModel.lstFields.StringItemList = FieldNames()
- InitializeListboxProcedures(DialogModel, DialogModel.lstFields, DialogModel.lstSelFields)
- End If
- GetSpecificFieldNames = MaxIndex
- Else
- GetSpecificFieldNames = -1
- End If
- End Function
- Sub CreateDBForm()
- If oDrawPage.Forms.Count = 0 Then
- oDBForm = oDocument.CreateInstance("com.sun.star.form.component.Form")
- oDrawpage.Forms.InsertByIndex (0, oDBForm)
- Else
- oDBForm = oDrawPage.Forms.GetByIndex(0)
- End If
- oDBForm.Name = "Standard"
- oDBForm.DataSourceName = sDBName
- oDBForm.Command = TableName
- oDBForm.CommandType = CurCommandType
- End Sub
- Sub AddOrRemoveBinaryFieldsToWidthList()
- Dim LocWidthList()
- Dim MaxIndex as Integer
- Dim OldMaxIndex as Integer
- Dim s as Integer
- Dim n as Integer
- Dim m as Integer
- If Not bDebug Then
- On Local Error GoTo WIZARDERROR
- End If
- If DialogModel.optBinariesasGraphics.State = 1 Then
- OldMaxIndex = Ubound(WidthList(),1)
- If OldMaxIndex = 15 Then
- MaxIndex = Ubound(WidthList(),1) + Ubound(ImgWidthList(),1) + 1
- ReDim Preserve WidthList(MaxIndex,4)
- s = 0
- For n = OldMaxIndex + 1 To MaxIndex
- For m = 0 To 3
- WidthList(n,m) = ImgWidthList(s,m)
- Next m
- s = s + 1
- Next n
- MergeList(DialogModel.lstFields, ImgFieldNames())
- End If
- Else
- ReDim Preserve WidthList(15, 4)
- RemoveListItems(DialogModel.lstFields(), DialogModel.lstSelFields(), ImgFieldNames())
- End If
- DialogModel.lstSelFields.Tag = True
- WIZARDERROR:
- If Err <> 0 Then
- Msgbox(sMsgErrMsg, 16, GetProductName())
- Resume LOCERROR
- LOCERROR:
- End If
- End Sub
- Function CreateCommandTypeList()
- Dim MaxTableIndex as Integer
- Dim MaxQueryIndex as Integer
- Dim MaxIndex as Integer
- Dim i as Integer
- Dim a as Integer
- MaxTableIndex = Ubound(TableNames())
- MaxQueryIndex = Ubound(QueryNames())
- MaxIndex = MaxTableIndex + MaxQueryIndex + 1
- If MaxIndex > -1 Then
- Dim LocCommandTypes(MaxIndex) as Integer
- For i = 0 To MaxTableIndex
- LocCommandTypes(i) = com.sun.star.sdb.CommandType.TABLE
- Next i
- a = i
- For i = 0 To MaxQueryIndex
- LocCommandTypes(a) = com.sun.star.sdb.CommandType.QUERY
- a = a + 1
- Next i
- End If
- CreateCommandTypeList() = LocCommandTypes()
- End Function
- Sub GetCurrentMetaValues(Index as Integer)
- CurFieldType = FieldMetaValues(Index,0)
- CurFieldLength = FieldMetaValues(Index,1)
- CurControlType = FieldMetaValues(Index,2)
- CurControlName = FieldMetaValues(Index,3)
- CurFormatKey = FieldMetaValues(Index,4)
- CurDefaultValue = FieldMetaValues(Index,5)
- CurIsCurrency = FieldMetaValues(Index,6)
- CurScale = FieldMetaValues(Index,7)
- CurHelpText = FieldMetaValues(Index,8)
- CurFieldName = FieldNames(Index)
- End Sub
- Function AssignFieldLength(FieldLength as Long) as Integer
- If FieldLength >= 65535 Then
- AssignFieldLength() = -1
- Else
- AssignFieldLength() = FieldLength
- End If
- End Function
- </script:module>
|