8
Juni
2023
Wie frage ich eine MySQL-Datenbank aus LibreOffice Calc ab?
17:33

Wie frage ich eine MySQL-Datenbank aus LibreOffice Calc ab?

8 Juni 2023 17:33

In diesem Artikel erkläre ich Ihnen, wie Sie das Füllen von LibreOffice Calc-Tabellenzellen mit Daten mithilfe einer mit MySQL verknüpften Abfrage an LibreOffice Base implementieren.

Vorwort

Wie ich Ihnen bereits gesagt habe, muss ich bei der Arbeit etwa einmal im Monat einen Abgleich zwischen einer MS-Excel-Tabelle und einer MySQL-Datenbank durchführen. Ein Zwischenlink, der verknüpfte (externe) Tabellen implementiert, ist LibreOffice Base. Die Implementierung der Verbindung zwischen Base und MySQL wird beschrieben im vorherigen Artikel, alle Punkte davon müssen abgeschlossen sein, bevor Calc-Makros mit Zugriff auf die Datenbank verwendet werden können.

Zweck dieses Artikels- Zeigen Sie, wie Sie mithilfe von Makros von Calc nach Base abfragen und Zellen füllen. Dieser Artikel ist der „Office-Programmierung“ in der LibreOffice Calc-Tabelle gewidmet und richtet sich an das Niveau eines unerfahrenen Programmierers. Softwaretools sind im LibreOffice-Paket integriert. Es wird davon ausgegangen, dass die in den beiden vorherigen Artikeln erwähnten zusätzlichen Komponenten MySQL, Base und Connector konfiguriert sind.

Verbindungsdiagramm für Programme für den Zugriff von LibreOffice Calc auf die MySQL-Datenbank

Shema

DBMS MySql <-> MySQL ODBC/JDBC-Connector <-> LibreOffice Base <-> Libreoffice Calc

  • Die Installation des MySQL-DBMS wird im Artikel besprochen So installieren Sie den MySQL-Server neu
  • Einrichten einer MySQL-Verbindung Stecker ODBC/JDBC und LibreOffice-Basis im Artikel beschrieben So verknüpfen Sie LibreOffice Base mit MySQL
  • In diesem Artikel wird die Verbindung von in Betracht gezogen Libreoffice-Rechner zu LibreOffice-Basis und Ausführung SQL-Abfrage mit Füllung Abfrageergebnis zelle elektronisch Tische.

1. Einführung in die LibreOffice Calc-Programmierung

Das LibreOffice-Benutzerhandbuch befindet sich auf Ihrem lokalen PC im Ordner
SCalc-Dokumentation (Datei main0000.html)

cd /usr/share/libreoffice/help/ru/text/scalc/
xdg-open main0000.html

Die in der Hilfe vorgeschlagene Methode Methode zum Einfügen externer Daten, siehe Datei webquery.html

cd /usr/share/libreoffice/help/ru/text/scalc/guide
xdg-open webquery.html

Ohne Programmierung geht es nicht, denn... es geht um die Arbeit mit flachen Tabellen aus denselben Calc-/Excel-Dateien, die uns in der Datenbank interessieren LibreOffice-Basis. Deshalb habe ich mich an die Programmierdokumentation von LibreOffice Basic gewandt

help.libreoffice.org/latest/ru/text/sbasic/shared/main0601.html

Um die Daten in die Zelle zu übertragen, schreiben Sie eine Funktion, zum Beispiel:

Function WorkDay()
Dim sDay as String
sDay="Arbeitstag"
If WeekDay(Now) = 1 OR WeekDay(Now) = 7 then
sDay="Ruhetag"
End If
WorkDay=sDay
End Funktion

Menüpunkt Extras – Makros – Makros verwalten – Basic- Wählen Sie links unsere Datei aus und klicken Sie rechts auf die Schaltfläche Erstellen:
Wählen Sie alles aus und löschen Sie es. Text einfügen – Speichern, schließen. Lassen Sie uns einen Dateinamen finden:
1) create_macro1
2) create_macro2
3) create_macro3
4) create_macro4

Auf dem Blatt schreiben wir in einer Zelle den Namen der Funktion in Klammern (in der Eingabeparameter übergeben werden können),
vor dem Namen der Funktion setzen wir das Gleichheitszeichen ("=")
Blatt1
Beispiel:
=WorkDay()
und drücken Sie die Eingabetaste. Ergebnis:
Blatt2

2. Programmierung mit Datenbanken

2.1 Anzeigen der Namen der im System registrierten LibreOffice Base-Datenbanken

Registrierte Datenbanken können im Menü jedes Programms aus dem LibreOffice-Paket angezeigt werden:
*Service - Optionen ->*
LibreOffice Base -> Datenbanken**
registriert

Ergänzung diese Liste erscheint in LibreOffice Base beim Erstellen einer neuen Datenbank: Am Ende des Assistenten werden Sie gefragt, ob die Datenbank im System registriert werden soll (standardmäßig -registrieren):
Registrieren einer Datenbank im LibreOffice Base-Assistenten

Datenbankbeispiele:

Pfad/home/user/.config/libreoffice/4/user/database/biblio.odb
Name bibliographie

In meinem Fall habe ich eine Calc-Datenbank mit dem gleichen Namen „Primer“ erstellt.

Pfad/home/user/primer.odb
Name grundierung

Der Datenbankname kann hier auf Russisch angegeben werden. Außerdem kann der Datenbankname für LibreOffice Base vom MySQL-Datenbanknamen des ODBC/JDBC-Connectors abweichen.

Die LibreOffice Base-Datenbank ist nun im System registriert. Sie können es über eine LibreOffice Calc-Tabelle abfragen.

2.2. Mit LibreOffice Calc auf eine Datenbank zugreifen – Basismakro

Function SELPRICE(id)
On Error GoTo ErrorHandler
Dim dbContext, oDataSource, db, pstmt, oResult, s
s=""
If Not IsMissing(id) Then
dbContext=createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource=dbContext.getByName("primer")
db=oDataSource.getConnection("","")
sql=buildSelectPrice(id)
if sql<>"" Then
pstmt=db.prepareStatement(sql)
oResult=pstmt.executeQuery()
Do while oResult.Next
If (s<>"") then
s=s + ","
End If
s=s+oResult.getString(1)
Loop

db.Close
db.dispose()
EndIf
Endif
SELPRICE=s
Return
ErrorHandler:
End Function

Function buildSelectPrice(id)
Dim sql
sql=""
If Not IsMissing(id) Then
sql = "SELECT price FROM offers WHERE offer_id= " + id
EndIf
buildSelectPrice=sql
End Function

2.3. Verwenden eines Makros in einem Calc-Arbeitsblatt

In Zelle B2 schreiben wir einen Makroaufruf:
=SELPRICE(A2)

Zelle A2 enthält die Datensatz-ID (Zum Beispiel 1). Zelle B2 in Calc zeigt den Preis aus der LibreOffice-Basisdatenbank an, die mit der MySQL-Datenbank verknüpft ist.
Ergebnis beim Ausführen einer SELECT-Abfrage mit einem Eingabeparameter

2.4 Verwendung mehrerer Felder in einer SELECT-Abfrage

Code:

Function buildSelectOfferPrice(id, status)
Dim sql
sql=""
If Not IsMissing(id) and Not IsMissing(status) Then
sql = "SELECT price FROM offers WHERE offer_id = " + id + " AND display = " + status
EndIf
buildSelectOfferPrice=sql
End Function

Function SELECTACTUALPRICE(id, status)
on error goto label
Dim dbContext, oDataSource, db, pstmt, oResult, s
s=""
If Not IsMissing(id) and Not IsMissing(status) Then
dbContext=createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource=dbContext.getByName("primer")
db=oDataSource.getConnection("","")

sql=buildSelectOfferPrice(id, status)

if sql<>"" Then
pstmt=db.prepareStatement(sql)
oResult=pstmt.executeQuery()
Do while oResult.Next
If (s<>"") then
s=s + ","
End If
s=s+oResult.getString(1)
Loop

db.Close
db.dispose()
EndIf
Endif
SELECTACTUALPRICE=s
label:
End Function

Das Ergebnis wird unten angezeigt (in der ersten Spalte ist der Funktionsparameter display=1 und in der zweiten display=0):
Das Ergebnis bei der Ausführung einer SELECT-Abfrage mit zwei Eingabeparametern

Debuggen eines Makros

Bei Bedarf können Sie einen Haltepunkt im Makrocode setzen und Daten > Zellinhalt > Neu berechnen (F9) ausführen. Der Cursor hält am Haltepunkt an. Anschließend können Sie die Anweisungen Zeile für Zeile mit F8 (Schrittweiser Aufruf) oder Shift+F8 (Schrittweiser Aufruf) durchgehen. Um den Fehler anzuzeigen, fügen Sie ein Kommentarzeichen (einen Apostroph) ein, wenn die Funktion die Zeile 'on error goto label' enthält, und speichern Sie das Makro (Datei > Speichern). Drücken Sie dann F9 und F8. Die Namen der registrierten Datenbanken werden nach Ausführung der Anweisung dbContext=createUnoService("com.sun.star.sdb.DatabaseContext") angezeigt, indem Sie die Objektvariable dbContext betrachten. Das Feld ElementNames zeigt die Datenbanknamen als Zeichenfolgen an.

Wenn beim Ausführen des Operators db=oDataSource.getConnection("","") die Ausnahme „[unixODBC][DriverManager]Datenquellenname nicht gefunden und kein Standardtreiber angegeben unter“ ausgelöst wird, geschieht dies, wenn die *.ODB-Datenbankdatei, auf die wir zugreifen, von einem anderen Benutzer übertragen wurde. Es liegt eine falsch konfigurierte Verbindung in Service Communications vor. Es ist einfacher, die Libre Office Base-Datei (*.ODB) zu löschen und eine neue Base DB-Datei zu erstellen. Hier können Sie die Verbindung zum ODBC/JDBC-Connector und den Namen der Datenquelle auf diesem Computer richtig konfigurieren:

Registrieren einer neuen Datenbank in LibreOffice Base und Herstellen einer Verbindung mit einer externen ODBC-Quelle

  1. Starten Sie LibreOffice Base
  2. im Assistenten „Mit einer vorhandenen Datenbank verbinden“.
  3. ODBC
  4. Als nächstes
  5. ODBC-Quellenname – Durchsuchen – OK
  6. Als nächstes
  7. Der Benutzername ist leer. Verbindungstest.
  8. Fertig
  9. Geben Sie den Namen und den Speicherort der Datenbank an
  10. Speichern

Dies wird im Artikel ausführlich besprochen.So verknüpfen Sie LibreOffice Base mit MySQL.

Jetzt funktioniert die Verbindung – die externen Datenbanktabellen sind im LibreOffice Base-Fenster sichtbar und das Makro wird von Calc aus ohne Fehler ausgeführt.
.
Wählen Sie in Base save "File" - "Save as" aus und speichern Sie die Base *.ODB-Datei im Home-Verzeichnis des Benutzers unter einem eindeutigen Namen. In Calc speichern wir dementsprechend die Tabelle mit Calc-Makros in der Datei *.ODS.

Hilfe (Programmierhandbuch)

Die Dokumentation für LibreOffice Basic befindet sich auf der Festplatte

cd /usr/share/libreoffice/help/ru/text/sbasic/shared/
xdg-open main0601.html

Hilfe zu LibreOffice Basic im Internet, mit einem Beispiel für die Verbindung zu einer Datenbank:
*BASIC_Guide

UNO-Objekthilfe:

cd /usr/share/libreoffice/help/ru/text/sbasic/shared/
xdg-open uno_objects.html

Hilfe zum Zugriff auf Datenbanken in LibreOffice

LibreOffice-Hilfe für Datenquellen:

Fazit

Abfragen von LibreOffice Calc an die LibreOffice Base-Datenbank und dann an MySQL funktionieren.

Weitere Links, Referenzmaterialien:

Anleitungen zum dbContext=createUnoService("com.sun.star.sdb.DatabaseContext")-Objekt finden Sie in den folgenden Artikeln:


Ergänzung. Ein Hinweis zum Speichern von Makros

Makros können in der Calc-Tabellendatei selbst (*.ODS) oder im gemeinsamen Makrospeicher des Benutzers gespeichert werden. Ich empfehle die erste Methode, weil... solche Dateien zwischen PC-Laufwerken oder zwischen Benutzern übertragen werden können, ohne dass Makros verloren gehen. Die zweite Methode besteht darin, dass Makros im Speicher abgelegt werden und verloren gehen, wenn die Festplatte des PCs ausfällt (da ODS-Dateien sie in Methode Nr. 2 nicht enthalten, ist dies ein Problem). Daher ist es besser, Makros in ODS-Dateien zu speichern, als im Abschnitt „Meine Makros und Dialoge“ des Basic-Editors.



Verwandte Veröffentlichungen