Mit Makro auf Inhalte vorhandener Abfragen zugreifen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

keyboard-billy
***
Beiträge: 53
Registriert: Mo, 27.11.2006 15:17
Wohnort: Nürnberg
Kontaktdaten:

Mit Makro auf Inhalte vorhandener Abfragen zugreifen

Beitrag von keyboard-billy »

Hallo zusammen,

ich habe eine Datenbank names "Repertoire"; sie ist auch in OO angemeldet.

In dieser Datenbank gibt es 3 Abfragen:
qryGenre - eine einfache Auswahlabfrage
qryAlleTitelPart1 - eine UNION SELECT Abfrage
qryAlleTitelPart2 - eine auswahlabfrage Abfrage, die auf die Abfrage qryAlleTitelPart1 und eine Tabelle Flaggen zugreift.

Die Abfrage qryAlleTitelPart2 enthält die Felder (alle vom Typ 'Text'):
"Titel", "Interpret", "Erscheinungsjahr", "Author/Country", "Genre", "URL".

Ich möchte nun alle Datensätze mit dem Kriterium "Genre" = "70er" aus der Abfrage qryAlleTitelPart2 ermitteln und jeden der ermittelten Datensätze z.b. in eine Datei schreiben (... glücklicherweise weiss ich zwischenzeitlich wie man Inhalte von z.B. Variablen in eine sequentielle datei schreibt :wink: ).

Das Suchkriterium z.B. "70er" wird in einer Laufvariable abgelegt werden,
sodass man als nächstes nach z.b. "80er" suchen kann u.s.w.

Ich habe mich durch die Doku des SDK durchgewühlt und komm damit leider nicht ganz klar.

Das Anmelden der Datenbank und das ermitteln einer Abfrage geht schon.
Ich weiß aber nicht, wie ich die Abfrage ausführen kann. Weiter weiß ich nicht wie ich Kriterien in das Ergebnis einbringen kann und wie ich durch die Ergebnisse (RowSet ???) navigieren kann.
Ich habe hier meinen bisherigen Code als Listing:

Code: Alles auswählen

Option Explicit

Sub DatabaseAccess
  Dim databaseContext As Object, dataSource As Object
  Dim connection As Object, interactionHandler As Object
  Dim query As Object
  Dim resultSet
  
  databaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")  'oberstes Datenbankobjekt
  dataSource = databaseContext.getByName("Repertoire")                    'Datenquelle (Datenbankname) auswählen
  
  If Not dataSource.IsPasswordRequired Then                               'Datenbank passwortgeschützt?
    connection = dataSource.GetConnection("","")                          'Nein: Verbindung zur Datenbank herstellen
  Else                                                                    'Ja: Benutzer nach Anmeldedaten abfragen
    interactionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
    connection = dataSource.ConnectWithCompletion(interactionHandler)
  End If
  
  query = dataSource.getQueryDefinitions().getByName("qryGenres")         'Abfrage auswählen
  
MsgBox query.Command REM Hier wird SQL-String der Abfrage angezeigt; das funktioniert soweit auch.

REM hier sollte nun die Abfrage ausgeführt werden und alles das stehen, was ich oben bereits beschrieben habe.
  
  connection.close()                                                      'Datenbankverbindung wird automatisch nach
'beenden des Makros geschlossen
End Sub
Ich bin - zugegebener Maßen - hier etwas "planlos", weil ich die Struktur der Doku (SDK) von Sun einfach nicht kapiere :cry:.

Ich bin am verzweifeln, darum bitte ich um kompetente Hilfe.

Danke in voraus!
keyboard-billy
keyboard-billy
***
Beiträge: 53
Registriert: Mo, 27.11.2006 15:17
Wohnort: Nürnberg
Kontaktdaten:

... Problem gelöst!

Beitrag von keyboard-billy »

Hallo,

ich hab noch ein paar Stündchen getüftelt und hab eine Lösung :D .

Für alle die's interessiert hier der Code:

Code: Alles auswählen

Option Explicit

Sub executeSQLMore_2

    Dim RowSet As Object
    Dim DataSettings As Object

    RowSet = createUnoService("com.sun.star.sdb.RowSet")
    RowSet.DataSourceName = "Repertoire"                        'Datenquelle auswählen
    RowSet.CommandType = com.sun.star.sdb.CommandType.QUERY
    RowSet.Command = "qryAlleTitelPart2"                        'Abfrage auswählen
    RowSet.Filter =  """Genre"" LIKE '70er'"                    'Filter setzen
    RowSet.ApplyFilter = True                                   'Filter aktivieren
    RowSet.execute()

    'Alle gefundenen Datensätze anzeigen
    If Not IsNull(RowSet)Then
    While RowSet.next
      MsgBox RowSet.getString(1)
    Wend
    End If
End Sub
Greets,
keyboard-billy
Antworten