von hpott » So, 02.05.2010 11:22
Hallo,
durch
http://www.oooforum.de/viewtopic.php?f= ... 2174d0c1c7 bin ich auf
http://members.aon.at/schardinger/openoffice/index.html aufmerksam geworden.
Dort findet sich ein Codeschnipsel, mit dessen Hilfe Formulare via Makro aufgerufen werden können. Meine Abwandlung zum Aufruf eines Berichtes (mit SRB erstellt) ist die folgende:
Code: Alles auswählen
sub evCtl_OpenReport_Rechnungen
dim oController as object
oController = ThisDatabaseDocument.CurrentController
If ( Not oController.isConnected() ) Then
oController.connect()
End If
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_1", FALSE ) 'FALSE non-Edit mode
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_2", FALSE ) 'FALSE non-Edit mode
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_3", FALSE ) 'FALSE non-Edit mode
end sub
Das funktioniert auch. Allerdings kann es vorkommen, dass der Aufruf eines dieser Berichte (ber_1, ber_2 oder ber_3) nicht sinnvoll ist. Diesen nicht sinnvollen Fall möchte ich gerne in dem Makro abfangen.
Nicht sinnvoll ist ein Aufruf dann, wenn die Abfrage, auf welcher der Bericht beruht, kein Ergebnis liefert - also leer ist. Dies kann je nach Datenlage in den Basistabellen auftreten.
Wie muss ich also das folgende Codeschnipsel ändern:
Code: Alles auswählen
sub evCtl_OpenReport_Rechnungen
dim oController as object
oController = ThisDatabaseDocument.CurrentController
If ( Not oController.isConnected() ) Then
oController.connect()
End If
If (nicht leer <Abfrage_1-in-ber_1>) Then
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_1", FALSE ) 'FALSE non-Edit mode
endif
If (nicht leer <Abfrage_2-in-ber_2>) Then
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_2", FALSE ) 'FALSE non-Edit mode
endif
If (nicht leer <Abfrage_3-in-ber_3>) Then
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_3", FALSE ) 'FALSE non-Edit mode
endif
end sub
Bei <Abfrage_x-in-ber_x> handelt es sich um eigenständige Abfragen, d.h. sie sind nicht nur als SQL-Befehl direkt im Bericht hinterlegt.
Vielen Dank im voraus.
HPott
Hallo,
durch [url]http://www.oooforum.de/viewtopic.php?f=8&t=38032&sid=d5d4b929bc40537a57e9de2174d0c1c7[/url] bin ich auf [url]http://members.aon.at/schardinger/openoffice/index.html[/url] aufmerksam geworden.
Dort findet sich ein Codeschnipsel, mit dessen Hilfe Formulare via Makro aufgerufen werden können. Meine Abwandlung zum Aufruf eines Berichtes (mit SRB erstellt) ist die folgende:
[code]
sub evCtl_OpenReport_Rechnungen
dim oController as object
oController = ThisDatabaseDocument.CurrentController
If ( Not oController.isConnected() ) Then
oController.connect()
End If
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_1", FALSE ) 'FALSE non-Edit mode
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_2", FALSE ) 'FALSE non-Edit mode
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_3", FALSE ) 'FALSE non-Edit mode
end sub
[/code]
Das funktioniert auch. Allerdings kann es vorkommen, dass der Aufruf eines dieser Berichte (ber_1, ber_2 oder ber_3) nicht sinnvoll ist. Diesen nicht sinnvollen Fall möchte ich gerne in dem Makro abfangen.
Nicht sinnvoll ist ein Aufruf dann, wenn die Abfrage, auf welcher der Bericht beruht, kein Ergebnis liefert - also leer ist. Dies kann je nach Datenlage in den Basistabellen auftreten.
Wie muss ich also das folgende Codeschnipsel ändern:
[code]
sub evCtl_OpenReport_Rechnungen
dim oController as object
oController = ThisDatabaseDocument.CurrentController
If ( Not oController.isConnected() ) Then
oController.connect()
End If
If (nicht leer <Abfrage_1-in-ber_1>) Then
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_1", FALSE ) 'FALSE non-Edit mode
endif
If (nicht leer <Abfrage_2-in-ber_2>) Then
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_2", FALSE ) 'FALSE non-Edit mode
endif
If (nicht leer <Abfrage_3-in-ber_3>) Then
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.REPORT, "ber_3", FALSE ) 'FALSE non-Edit mode
endif
end sub
[/code]
Bei <Abfrage_x-in-ber_x> handelt es sich um eigenständige Abfragen, d.h. sie sind nicht nur als SQL-Befehl direkt im Bericht hinterlegt.
Vielen Dank im voraus.
HPott