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

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: Daten aus einer Base Abfrage auslesen wie aus einer Calc-Tabelle

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

von saxo » So, 10.10.2021 16:36

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

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

von Stephan » So, 10.10.2021 14:18

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) 120-mal heruntergeladen

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

von Stephan » So, 10.10.2021 13:48

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

von saxo » So, 10.10.2021 12:16

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

von Hiker » So, 10.10.2021 12:00

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

von F3K Total » So, 10.10.2021 10:25

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) 91-mal heruntergeladen

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

von saxo » So, 10.10.2021 09:44

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) 83-mal heruntergeladen

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

von Stephan » Sa, 09.10.2021 20:57

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

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

von saxo » Sa, 09.10.2021 17:49

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

Nach oben