| <?xml version="1.0" encoding="UTF-8"?> |
| <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> |
| <!--*********************************************************** |
| * |
| * 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 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| ***********************************************************--> |
| <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 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> |