Seite 1 von 1

Daten aus einer Base Abfrage auslesen wie aus einer Calc-Tabelle

Verfasst: Sa, 09.10.2021 17:49
von saxo
Hallo,
ich habe gefunden, wie man aus einem Formular per Knopfdruck eine Abfrage ausführt. Kann ich denn aus dieser Abfrage keine Werte auslesen wie aus einer Calc-Tabelle mit getCellByPosition?
Oder muss ich aus der Abfrage erst einen Bericht in Tabellenform erstellen und dort dann die Daten auslesen? Das dauert bei großen Tabellen ewig.
Besten Dank

Re: Daten aus einer Base Abfrage auslesen wie aus einer Calc-Tabelle

Verfasst: Sa, 09.10.2021 20:57
von Stephan
ich habe gefunden, wie man aus einem Formular per Knopfdruck eine Abfrage ausführt. Kann ich denn aus dieser Abfrage keine Werte auslesen wie aus einer Calc-Tabelle mit getCellByPosition?
Wenn Du das Resultset(-Objekt) hast kannst Du dort zugreifen per z:b.:

Code: Alles auswählen

Resultset.first
Msgbox Resultset.getString(1)
und damit den Inhalt der ersten Spalte des ersten Datensatzes auslesen.

mit z.B.:

Code: Alles auswählen

Resultset.absolute(5)
Msgbox Resultset.getString(8)
liest Du die 8.Spalte der 5.Zeile des Resultsets.



Gruß
Stephan

Re: Daten aus einer Base Abfrage auslesen wie aus einer Calc-Tabelle

Verfasst: So, 10.10.2021 09:44
von saxo
Mehrere Methoden probiert, die ich so im Netz gefunden habe. Will noch nichts funktionieren. Die Abfrage öffnet sich aber es fehlt die entscheidende Eingebung zur Adressierung des Abfrageobjekts.

SUB Query
Dim sObjType As String, sObjName As String
Dim ResultSet As Object
sObjName = "Abfrage"
sObjType = com.sun.star.sdb.application.DatabaseObject.QUERY
ThisDataBaseDocument.CurrentController.Connect() 'connect to the database'
ResultSet = ThisDatabaseDocument.CurrentController.loadComponent(sObjType, sObjName, FALSE) 'Open the query'
ResultSet.absolute(1)
MsgBox ResultSet.getString(1)
End Sub

Re: Daten aus einer Base Abfrage auslesen wie aus einer Calc-Tabelle

Verfasst: So, 10.10.2021 10:25
von F3K Total
Moin,
deine Frage verstehe ich nicht richtig, in einer Datenbank filtert man die gewünschten Daten, dazu benötigt man kein Makro.
Anbei ein einfaches Beispiel. Im Formular Customer wird per formatiertem Feld der Suchwert F_CUSTOMERNUMBER in die einzeile Tabelle Filter geschrieben.
In der Abfrage qCustomer_gefiltert wird per Unterabfrage das Filterkriterium gesetzt:

Code: Alles auswählen

SELECT "CustomerNumber", "Nachname", "Vorname", "Strasse", "PLZ", "Ort" FROM "Customer" WHERE "CustomerNumber" = ( SELECT "F_CUSTOMNUMBER" FROM "Filter" ) OR ( SELECT "F_CUSTOMNUMBER" FROM "Filter" ) IS NULL
Durch das

Code: Alles auswählen

... OR ... IS NULL
werden alle Datensätze angezeigt, wenn kein Filterwert existiert, Ansonsten wird die Zeile mit der gesuchten CustomerNumber angezeigt.

Gruß R

Re: Daten aus einer Base Abfrage auslesen wie aus einer Calc-Tabelle

Verfasst: So, 10.10.2021 12:00
von Hiker
und wenn es Dir hilft die Ergebnisse in Calc zu haben, kannst Du die Datenquellen-Ansicht im Menü öffnen und die Abfrage aus der Datenbank einfach in die Tabelle ziehen.

Dieser Beteich lässt sich dan via Menü Daten->Bereich aktualisieren jederzeit mit aktuellen Daten aktualisieren...

Mfg, Jörn

Re: Daten aus einer Base Abfrage auslesen wie aus einer Calc-Tabelle

Verfasst: So, 10.10.2021 12:16
von saxo
Danke F3K. Ich möchte einzelne Zellen aus der Abfrage auslesen. Um deren Inhalt weiter zu verarbeiten reicht filtern leider nicht. Im Base Handbuch S.459 wird beschrieben wie man das macht https://wiki.documentfoundation.org/ima ... ig_V72.pdf.
Ich bekomme das aber nicht hin, da ein Abfrage-Objekt anders adressiert wird wie eine Tabelle.

Ich kenne die Methode, die Abfrage in eine Calc-Tabelle zu kopieren. Habe aber nie verstanden, warum man das machen muss, da die Abfrage selbst ja schon in Tabellenform vorliegt. Auch einfach Abspeichern einer Abfrage geht nicht. Die Abfrage wird mit SQL Befehlen gemacht und das Ergebnis scheint nicht kompatibel mit LO Tabellen zu sein.

Re: Daten aus einer Base Abfrage auslesen wie aus einer Calc-Tabelle

Verfasst: So, 10.10.2021 13:48
von Stephan
ich meine ein 'richtiges' mit Starbasic erzzeugtes Resultset und kein Öffnen einer Abfrage.

Code: Alles auswählen

oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource = oBaseContext.getByName(DB_name) 'DB_Name = der Name unter dem die DB in OO angemeldet ist (Extras-Einstellungen)
oCon_all = oDataSource.getConnection(sUser, sPassword)
sql_string = "Select * FROM ""Firma"" ORDER BY ""Firmenname"" ASC, ""Abteilung"" ASC"
oStatement = oCon_all.createStatement()
oStatement.ResultSetType = 1005
Resultset = oStatement.executeQuery(sql_string)
Resultset.absolute(5)
Msgbox Resultset.getString(8)

Gruß
Stephan

Re: Daten aus einer Base Abfrage auslesen wie aus einer Calc-Tabelle

Verfasst: So, 10.10.2021 14:18
von Stephan
In dem Dokument selbst geht z.b. (schnell zusammenkopiert):

Code: Alles auswählen

Sub Main
oDatenquelle = ThisComponent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oCon_all = ThisDataBaseDocument.CurrentController.ActiveConnection
sql_string = "Select * FROM ""qCustomer_gefiltert"""
oStatement = oCon_all.createStatement()
oStatement.ResultSetType = 1005
Resultset = oStatement.executeQuery(sql_string)
Resultset.absolute(11)
Msgbox "Vorname, Name aus 11. Datensatz:" & CHR(13) & CHR(13) & Resultset.getString(2) & ", " &  Resultset.getString(3) ,,""
End Sub
In der anbgehängten DAtei ist das Makro über den Menüeintrag "ZUgriff per StarBasic-Main" startbar.

Gruß
Stephan

Re: Daten aus einer Base Abfrage auslesen wie aus einer Calc-Tabelle

Verfasst: So, 10.10.2021 16:36
von saxo
Es gibt wohl doch noch einen Unterschied zwischen Profis und Wochenendhackern. Es funktioniert - werde noch lernen wie er es gemacht hat.
Danke Stephan und ein schönes Restwochenende