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.:
und damit den Inhalt der ersten Spalte des ersten Datensatzes auslesen.
mit z.B.:
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
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