von sarotti » So, 04.01.2009 22:04
Hallo Georg,
ein Datenbankformular ist mit einem Titel versehen, der sich wie folgt zusammensetzt:
[DBName].odt : [Formulartitel] (schreibgeschützt)
Somit mußt Du, um den Namen eines geöffneten Formulars einer Datenbank auszulesen erst einmal den Namen "isolieren":
Code: Alles auswählen
Sub Titel_aus_DB_Form
DIM dbName as String : dbName="TEST_DB"
DIM sFormName as String : sFormName="Formular1"
DIM sFormName, sDocTitel as String
DIM iDbName, iFormName as integer
DIM
sdocTitel=ThisComponent.Title
iDbName=len(dbName)
iFormName=len(sFormName)
sFormName=mid(sdocTitel,iDbName+9,iFormName)
msgBox sFormName
End Sub
So, nun kannst Du mit Hilfe der anderen Codeteile, die Du bereits hast das Formular aus den geöffneten Dokumenten heraussuchen. Bei nicht vorhanden muss es eben neu geöffnet werden...
Dazu kannst Du den folgenden Code benutzen:
Code: Alles auswählen
SUB OPEN_Formular_aus_Datenbank
DIM str_dbname AS STRING: str_dbname = "TEST_DB" 'Name der Datenbank
DIM str_frmname AS STRING: str_frmname = "Formular1" 'Name des Formulars
REM ***Datenbankkontext erzeugen
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
REM *** Prüfung: Ist die erwartete Datenbank angemeldet?
IF DatabaseContext.hasByName(str_dbname)=false THEN
MSGBOX "Datenbank nicht gefunden: " & str_dbname: EXIT SUB
END IF
Datenquelle = DatabaseContext.getByName(str_dbname)
REM *** Übergabe der Parameter zum Öffnen
DIM args(2) AS NEW com.sun.star.beans.PropertyValue
args(1).name = "OpenMode"
args(1).value = "open"
args(0).name = "ActiveConnection"
args(0).value = Datenquelle.getConnection("","")
args(2).Name = "MacroExecutionMode"
args(2).Value = 4 'entspricht "ALWAYS_EXECUTE"
DIM obj_Forms AS OBJECT: obj_Forms = Datenquelle.DataBaseDocument.getFormDocuments
REM *** Grösse (vom Bildschirmrand aus gesehen) und Position des zu öffnenden Formulars definieren
posx=350
posy=100
sizeX=600
sizeY=800
REM *** Öffnen des Formulars
oForm=obj_Forms.loadComponentFromURL(str_frmname, "_self", 0, args())
With oForm.getCurrentController().getFrame().getContainerWindow()
.setPosSize(posx, posy, sizeX, sizeY, com.sun.star.awt.PosSize.POSSIZE)
End With
END SUB
Gruss
sarotti
Hallo Georg,
ein Datenbankformular ist mit einem Titel versehen, der sich wie folgt zusammensetzt:
[quote][[i]DBName[/i]].odt : [[i]Formulartitel[/i]] (schreibgeschützt)[/quote]
Somit mußt Du, um den Namen eines geöffneten Formulars einer Datenbank auszulesen erst einmal den Namen "isolieren":
[code]Sub Titel_aus_DB_Form
DIM dbName as String : dbName="TEST_DB"
DIM sFormName as String : sFormName="Formular1"
DIM sFormName, sDocTitel as String
DIM iDbName, iFormName as integer
DIM
sdocTitel=ThisComponent.Title
iDbName=len(dbName)
iFormName=len(sFormName)
sFormName=mid(sdocTitel,iDbName+9,iFormName)
msgBox sFormName
End Sub[/code]
So, nun kannst Du mit Hilfe der anderen Codeteile, die Du bereits hast das Formular aus den geöffneten Dokumenten heraussuchen. Bei nicht vorhanden muss es eben neu geöffnet werden...
Dazu kannst Du den folgenden Code benutzen:
[code]SUB OPEN_Formular_aus_Datenbank
DIM str_dbname AS STRING: str_dbname = "TEST_DB" 'Name der Datenbank
DIM str_frmname AS STRING: str_frmname = "Formular1" 'Name des Formulars
REM ***Datenbankkontext erzeugen
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
REM *** Prüfung: Ist die erwartete Datenbank angemeldet?
IF DatabaseContext.hasByName(str_dbname)=false THEN
MSGBOX "Datenbank nicht gefunden: " & str_dbname: EXIT SUB
END IF
Datenquelle = DatabaseContext.getByName(str_dbname)
REM *** Übergabe der Parameter zum Öffnen
DIM args(2) AS NEW com.sun.star.beans.PropertyValue
args(1).name = "OpenMode"
args(1).value = "open"
args(0).name = "ActiveConnection"
args(0).value = Datenquelle.getConnection("","")
args(2).Name = "MacroExecutionMode"
args(2).Value = 4 'entspricht "ALWAYS_EXECUTE"
DIM obj_Forms AS OBJECT: obj_Forms = Datenquelle.DataBaseDocument.getFormDocuments
REM *** Grösse (vom Bildschirmrand aus gesehen) und Position des zu öffnenden Formulars definieren
posx=350
posy=100
sizeX=600
sizeY=800
REM *** Öffnen des Formulars
oForm=obj_Forms.loadComponentFromURL(str_frmname, "_self", 0, args())
With oForm.getCurrentController().getFrame().getContainerWindow()
.setPosSize(posx, posy, sizeX, sizeY, com.sun.star.awt.PosSize.POSSIZE)
End With
END SUB[/code]
Gruss
sarotti