Query in Base-Tabelle speichern

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

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

Query in Base-Tabelle speichern

Beitrag von saxo »

Hallo,
bin auf den Geschmack gekommen mit der Programmiererei, aber SQL schafft mich. Will eine Abfrage in eine Base-Tabelle schreiben (nicht Calc Tabelle). Falls sie schon existiert, dann löschen und neu schreiben. Bekomme noch nicht mal das Erstellen einer Tabelle hin, s.u.
Hintergrund des Ganzen ist, dass die Writer Literaturdatenbank nicht relational ist und nur auf eine Tabelle zugreifen kann, nicht auf eine Abfrage. Wenn ich also 10 Verweise in einem Buch habe, muss ich 10x den Buchtitel, Autor, Verlag usw. angeben. Lösung wäre eine normalisierte Datenbank-Abfrage die dann in eine Tabelle geschrieben wird, die Writer versteht.

Sub QueryToTable()
Dim vDataSource, vStatement, vResultSet 'UNO-services should have variant variables, object only for basic
sNew = "Personen1"
sOld = "Personen"
vDataSource = ThisDataBaseDocument.CurrentController
If NOT (vDataSource.isConnected()) THEN vDataSource.connect()
vStatement = vDataSource.ActiveConnection.createStatement()
vStatement.ResultSetType = 1005
s = "CREATE TABLE """ & sNew & """ (id INTEGER PRIMARY KEY, LIKE """ & sOld & """ INCLUDING DEFAULTS EXCLUDING IDENTITY)"
' s = "CREATE TABLE """ & sNew & """ AS (SELECT * FROM """ & sOld & """) WITH DATA"
MsgBox s
vResultSet = vStatement.executeQuery(s)
' vResultSet = vStatement.executeQuery("Select * INTO """sNew""" FROM """sOld"""")
End Sub
Dateianhänge
QueryToTable.odb
(5.43 KiB) 144-mal heruntergeladen
cosmo17
*
Beiträge: 10
Registriert: So, 06.06.2021 11:15

Re: Query in Base-Tabelle speichern

Beitrag von cosmo17 »

Hallo,

Nicht sicher ob ich die Notwendigkeit versteh.
Wenn eine datenbank registriert ist, haben Writer oder Calc kein problem Abfragen zu verstehen
ergo keine Notwendigkeit die Abfrage erst zu einer tabelle zu schreiben.

Abfragen sowohl als auch tabellen koennen in das Writer document via drag and drop
eingebettet werden.

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

Re: Query in Base-Tabelle speichern

Beitrag von saxo »

Ich meine die Literaturdatenbank von Writer, siehe Screenshot. Wenn man ein Literaturverzeichnis einfügen will, geht das nur über eine Datenquelle Tabelle (links oben). Die ca. 30 Spalten müssen dann, je nach Sprache, auch noch den englischen Namen zugeordnet werden. Das Ganze sollte normalisiert werden, z.B.: eine Tabelle für das Medium (Buch, Zeitschrift, WWW... ), eine andere für den Artikel (Ausgabe, Band, Seite...). So wie es jetzt ist, muss ich bei 10 Zitaten aus dem gleichen Buch 10x alle 30 Spalten neu ausfüllen... Beispiel Medium: Buch, Bibel, Herausgeber Gott, Adresse Himmel... Artikel: Verfasser Moses, Kapitel 2 Vers 5, Notitz Kann über Wasser gehen...
Dateianhänge
Screenshot_Literaturdatenbank.png
Screenshot_Literaturdatenbank.png (55.67 KiB) 3366 mal betrachtet
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Query in Base-Tabelle speichern

Beitrag von RobertG »

Ich würde ja einfach komplett die Datenbank austauschen. Die Grundlage der vorhandenen Datenbank ist ja nur eine dBase-Datei. Deswegen wirst Du da auch Probleme mit irgendwelchen Anweisungen haben, die z.B. etwas mit Primärschlüsseln zu tun haben. Der Code, den Du da versuchst, dürfte mit keiner der internen Datenbanken funktionieren. Eine Tabelle auf Grundlage einer anderen Tabelle zu erstellen ist dort nicht möglich. Bei HSQLDB kommt das erst mit den 2-er-Versionen hinzu.

Du könntest die Struktur der vorhandenen Datenbank einfach in eine interne Datenbank oder auch in eine Datenbank, die sich mit einer Firebird Datei verbindet kopieren. Dann kannst Du statt einer Tabellenkopie auch eine Ansicht erzeugen, die eben das anzeigt, was Du genau haben willst.

Ansonsten musst Du einmal nach dBase und den entsprechenden Befehlen schauen. Das ist aber noch deutlich begrenzter als eben die Arbeit mit den internen Datenbanken.

Um eine Definition der Tabelle wirst Du also wohl nicht herum kommen. Lediglich die Daten kannst Du dann von einer Tabelle in die andere kopieren.

Gruß

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

Re: Query in Base-Tabelle speichern

Beitrag von saxo »

Danke Robert. Die Tabelle kann ich natürlich tauschen aber das Problem bleibt. Das Problem ist, dass die Daten dort nicht normalisiert sind, wie das in jeder sauberen Datenbank sein sollte. Sprich, jede Information darf nur einmal vorkommen. Du kannst die Tabelle ja auch auswählen, ist eine normale Base-Tabelle, aber eben keine Abfrage.
Meine Lösung wäre jetzt gewesen, selbst eine saubere Literaturdatenbank zu erstellen mit relationalen Tabellen. Dann eine Abfrage machen, die das Literatur-format erzeugt. Dabei könnten auch gleich die englischen Überschriften geschrieben werden. Diese Abfrage muss ich dann aber wieder in eine Tabelle schreiben, die das Literaturprogramm auslesen kann, weil das eben nur einfache Tabellen versteht. Am letzten Punkt scheitert es. Hab da mal auf die Schnelle was zusammengehackt, wie das Prinzip sein sollte.
Dateianhänge
Test_Bib-Query.odb
(15.99 KiB) 145-mal heruntergeladen
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Query in Base-Tabelle speichern

Beitrag von Hiker »

Hallo,

was Writer derzeit sieht ist eine Tabelle in einer benannten/registrierten Datenquelle.

Also baust Du Deine neue normalisierte Datenbank und eine Abfrage, die alle Informationen zusammensammelt und dieselben Spaltennamen hat, wie die DBase-Tabelle.
Diese Abfrage als Ansicht/View speichern.

Nun änderst Du die Datenquelle des bisherigen Writer-Dokuments auf die Ansicht in der neuen Datenbank und kannst die Writer-Datei wie bisher nutzen.

Die Eingabe in Deine neue Datenbank muss natürlich über ein entsprechendes Formular erfolgen. Was Base angeht: Daran denken die Primärschlüssel zu integrieren, damit Abfragen beschreibbar bleiben.

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: Query in Base-Tabelle speichern

Beitrag von saxo »

>Diese Abfrage als Ansicht/View speichern.
Danke Hiker, das war die Lösung, eine Ansicht kann ich im Literatur-Formular auswählen. Da muss man mal draufkommen, eine Ansicht scheint das gleiche wie eine Abfrage zu sein...
Problem gelöst, dabei hätte ich doch so gerne programmiert :cry:
Edit: Es ist ein kleiner Umweg erforderlich, da eine Abfrage nicht direkt als Ansicht gespeichert werden kann: entweder man entwirft von vorne herein eine Ansicht oder man kopiert die Abfrage nach Tabellen und gibt "als Tabellenansicht" im folgenden Fenster ein.
Antworten