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

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

Moderator: Moderatoren

saxo
**
Beiträge: 47
Registriert: Do, 01.04.2010 00:45

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

Beitrag 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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

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

Beitrag 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
saxo
**
Beiträge: 47
Registriert: Do, 01.04.2010 00:45

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

Beitrag 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
Dateianhänge
Query.odb
(14.69 KiB) 76-mal heruntergeladen
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

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

Beitrag 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
Dateianhänge
Query.odb
(71.65 KiB) 83-mal heruntergeladen
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

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

Beitrag 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
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
saxo
**
Beiträge: 47
Registriert: Do, 01.04.2010 00:45

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

Beitrag 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.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

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

Beitrag 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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

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

Beitrag 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
Dateianhänge
Query.odb
(73.8 KiB) 112-mal heruntergeladen
saxo
**
Beiträge: 47
Registriert: Do, 01.04.2010 00:45

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

Beitrag 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
Antworten