Hallo zusammen,
nachdem ich nun eine lauffähige Version habe, möchte ich Euch mit meiner Lösung beglücken. Vielleicht fällt es dann anderen leichter, auch mit Fortschrittsbalken zu arbeiten. Es gibt dieses Thema zwar schon öfters in diesem Forum, aber ich habe nur Detail-Hinweise und Bastelanleitungen gefunden. Fertige Module (Prozeduren) und eine Benutzungsanleitung habe ich nicht gefunden. Deswegen diesesThema.
Aufgabenstellung: Eine Tabelle mit Mitgliedern soll abgearbeitet werden. Dazu soll ein Fortschrittsbalken angezeigt werden, der auf die tatsächliche Anzahl der Datensätze referiert. Dazu muß der Fortschrittsbalken zweimal angezeigt werden: Erst für das Feststellen der Anzahl der betreffenden Datensätze, dann für die Abarbeitung der selektierten Datensätze.
Modularisierung für Wiederverwendung: Es gibt ein Modul, um das Fortschrittsbalken-Fenster zu initialisieren (Zwei Parameter: Fenstertitel und Anzahl der durchzuführenden Schritte), ein Modul zum Aktualisieren des Balkens (Parameter: Aktuelle Schrittnummer) und ein Modul zum Schließen des Fortschrittsbalken-Fensters. Hier der Basic-Sourcecode, abzulegen z. Bsp. unter Openoffice.org-Basic Makros -> <Datenbank-Name> -> Standard -> Module1:
Code: Alles auswählen
Global goProgressBarDialog as Object
Global goProgressBarModel as Object
'=========================================================================
SUB s_ProgressBar_Init(i_Title as String, i_Max as Integer)
'=========================================================================
Dim oDialogModel as Object
Dim k as integer
oDialogModel = createUnoService( "com.sun.star.awt.UnoControlDialogModel")
oDialogModel.PositionX = 100
oDialogModel.PositionY = 100
oDialogModel.Width = 200
oDialogModel.Height = 20
oDialogModel.Title = i_Title
goProgressBarModel = oDialogModel.createInstance( "com.sun.star.awt.UnoControlProgressBarModel" )
goProgressBarModel.PositionX = 0
goProgressBarModel.PositionY = 0
goProgressBarModel.Width = 200
goProgressBarModel.Height = 20
goProgressBarModel.ProgressValueMin = 0
goProgressBarModel.ProgressValueMax = i_Max
goProgressBarModel.ProgressValue = 50
oDialogModel.insertByName( "myProgressBarName", goProgressBarModel )
goProgressBarDialog = createUnoService( "com.sun.star.awt.UnoControlDialog")
goProgressBarDialog.setModel( oDialogModel )
goProgressBarDialog.setVisible( true )
End Sub
'=========================================================================
SUB s_ProgressBar_AktStep(i_Akt as Integer)
'=========================================================================
goProgressBarModel.ProgressValue = i_Akt
End Sub
'=========================================================================
SUB s_ProgressBar_Dispose
'=========================================================================
goProgressBarDialog.dispose()
End Sub
Im ausführenden Makro wird das Fortschrittsbalkenfenster zuerst aufgerufen, um den Select-Befehl zu signalisieren (der Select-Befehl ist nur rudimentär dargestellt):
Code: Alles auswählen
Dim l_SelCmd_Mgl As String
Dim l_Statement As Object
Dim l_ResultSet As Object
Dim l_AnzMgl As Integer
Dim l_AktMgl As Integer
Call s_ProgressBar_Init("Suche nach Datensätzen...", 20)
Call s_ProgressBar_AktStep(10)
...
' Feststellen der Anzahl der Datensätze, Ergebnis in der Variablen l_AnzMgl
l_SelCmd_Mgl = "SELECT ...
l_Statement = goConnection.createStatement()
l_Statement.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_INSENSITIVE ' 1004
l_ResultSet = l_Statement.executeQuery(l_SelCmd_Mgl)
l_ResultSet.Last
l_AnzMgl = l_ResultSet.getrow()
Call s_ProgressBar_Dispose
Nun die tatsächliche Selektion mit Abarbeiten der Datensätze:
Code: Alles auswählen
Call s_ProgressBar_Init("Mitgliederliste abarbeiten...", l_AnzMgl)
l_AktMgl = 0
l_ResultSet.First
While l_ResultSet.next
l_AktMgl = l_AktMgl + 1
Call s_ProgressBar_AktStep(l_AktMgl)
' ... Tatsächlich durchzuführende Aktionen
Wend
Call s_ProgressBar_Dispose
Gefällt Euch die Lösung? Ist die Lösung ausreichend klar beschrieben?
Viel Spaß beim Ausprobieren!