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:

Funktion WorkDay()
Dim sDay als String
sDay="Wochentag"
wenn WeekDay(Now) = 1 ODER WeekDay(Now) = 7 dann
sDay="выходной"
Ende wenn
WorkDay=sDay
Funktion beenden

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):
reg

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

Funktion SELPRICE(id)
Bei Fehler GoTo ErrorHandler
Dimmen Sie dbContext, oDataSource, db, pstmt, oResult, s
s=""
Wenn nicht, ist IsMissing(id) dann
dbContext=createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource=dbContext.getByName("primer")
db=oDataSource.getConnection("","")
sql=buildSelectPrice(id)
if sql<>"" Dann
pstmt=db.prepareStatement(sql)
oResult=pstmt.executeQuery()
Tun Sie dies während oResult.Next
Wenn (s<>"") dann
s=s + ","
Ende wenn
s=s+oResult.getString(1)
Schleife

db.Schließen
db.dispose()
EndIf
Endif
SELPRICE=s
Rückkehr
ErrorHandler:
Funktion beenden

Funktion buildSelectPrice(id)
Schwaches SQL
sql=""
Wenn nicht, ist IsMissing(id) dann
sql = "Preis aus Angeboten auswählen WHERE offer_id = " + id
EndIf
buildSelectPrice=sql
Funktion beenden

2.3. Verwenden eines Makros in einem Calc-Arbeitsblatt

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

wobei A1 die Eintrags-ID enthält (z. B. 1). In der Zelle Calc wird der Preis aus der LibreOffice Base-Datenbank angezeigt, die mit der MySQL-Datenbank verbunden ist.
Ergebnis beim Ausführen einer SELECT-Abfrage mit einem Eingabeparameter

2.4 Verwendung mehrerer Felder in einer SELECT-Abfrage

Code:

Funktion buildSelectOfferPrice(id, status)
Schwaches SQL
sql=""
If Not IsMissing(id) und Not IsMissing(status) Then
sql = "SELECTPreisVONAngeboteWOAngebots-ID= " + id + " UNDAnzeige= " + Status
EndIf
buildSelectOfferPrice=sql
Funktion beenden

Funktion SELECTACTUALPRICE(id, status)
Bei Fehler gehe zum Label
Dimmen Sie dbContext, oDataSource, db, pstmt, oResult, s
s=""
If Not IsMissing(id) und Not IsMissing(status) Then
dbContext=createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource=dbContext.getByName("primer")
db=oDataSource.getConnection("","")

sql=buildSelectOfferPrice(id, status)

if sql<>"" Dann
pstmt=db.prepareStatement(sql)
oResult=pstmt.executeQuery()
Tun Sie dies während oResult.Next
Wenn (s<>"") dann
s=s + ","
Ende wenn
s=s+oResult.getString(1)
Schleife

db.Schließen
db.dispose()
EndIf
Endif
SELECTACTUALPRICE=s
Etikett:
Funktion beenden

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

Debuggen eines Makros

Еслund bei Bedarf können Sie einen Haltepunkt im Makrocode setzen und ausführen Daten – Zellinhalte – Neu berechnen (F9). Der Cursor stoppt am Stopppunkt. Anschließend können Sie die Anweisungen mit den Tasten Zeile für Zeile, Schritt für Schritt ausführen F8- „einspringen“ bzw Umschalt+F8- „Schritt mit Umweg“. Um den Fehler zu sehen, müssen Sie das Kommentarsymbol setzen – ein Apostroph, wenn die Funktion eine Zeile enthält 'Bei Fehler gehe zum Etikett 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 angezeigt dbContext=createUnoService("com.sun.star.sdb.DatabaseContext")- durch Anzeigen der Objektvariablen dbContext, in dem Bereich davon Elementnamen zeichenfolgenwerte von Datenbanknamen sind sichtbar.

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