Successstory: Fortschrittsbalken für Massendatenverarbeitung

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Successstory: Fortschrittsbalken für Massendatenverarbeitung

Successstory: Fortschrittsbalken für Massendatenverarbeitung

von stw » Di, 16.06.2009 21:18

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!

Nach oben