BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Umfangreiche Fragebogenaktion mit Base durchführen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Umfangreiche Fragebogenaktion mit Base durchführen

Beitrag von RobertG » Di 22. Aug 2017, 18:30

Nachdem in kurzer Zeit mehrere Anfragen in diesem Forum waren, wie denn
  • Tabellen mit sehr vielen Datensätzen für Fragebogen erstellt werden können,
  • Daten aus verschiedenen Datenbanken, mit denen so eine Fragebogenaktion durchgeführt wurde, zusammengeführt werden können und
  • zusammengeführte Daten für eine weitere Nutzung sinnvoll exportiert werden können
habe ich einmal ein bisschen Zeit investiert und so ein Beispiel zusammengestellt.

Die anhängende *.zip-Datei enthält 2 Datenbanken: HauptDB.odb und TeilDB.odb. In den Datenbanken sind Tabellen für unterschiedliche Vorgehensweisen beim Durchführen solch einer Aktion enthalten. Es gibt Tabellen mit jeweils einem Primärschlüssel, der händisch erstellt wird und Tabellen mit zwei Primärschlüsseln, so dass z.B. in einem Schlüsselfeld die Nummer des Rechners gespeichert werden kann, von dem aus die Befragung durchgeführt wird.

Was die Lösung bisher leisten kann:
Es ist möglich, von einem Formular zum anderen zu navigieren und die Schlüsselwerte mit zu nehmen. Hängen Tabellen, auf denen die Formulare beruhen, nicht über die Kombination Fremdschlüssel - Primärschlüssel zusammen, so ist unter den Zusatzinformationen des jeweiligen Buttons die Information zu den Primärschlüsselfeldern des Zielformular zu notieren. (Hinweis: Schlüsselfelder sollten bei umfassenden Datensammlungen keinen gleichlautenden Namen haben - Daten lassen sich sonst nur schlecht zusammenfassen!)
In der HauptDB.odb befindet sich ein Formular, das nur aus Buttons besteht. Ein Button dient dazu, die Tabelleninhalte aus TeilDB.odb zu importieren. Inhalte werden nur importiert, wenn der entsprechende Schlüsselwert noch nicht existiert. Gegebenenfalls kann das auch so gehandhabt werden, dass einfach der vorhergehende Inhalt überschrieben wird.
Dann existieren zwei Ansichten in HauptDB.odb, die alle Daten der zusammengehörigen Tabellen zusammenfassen. Diese Können in dem Formular mit den Buttons in eine *.csv-Datei exportiert werden. Die *.csv-Datei kann dann z.B. in Calc oder vielen anderen Programmen eingelesen werden.
Als Zusatz habe ich ein Datenbanksicherungsmakro aus dem Handbuch mit eingefügt: Bei jedem Öffnen einer Datenbankdatei wird erst einmal eine Sicherungsdatei in das Backup-Verzeichnis von LibreOffice geschrieben.

Robert
Dateianhänge
Fragebogen_Formularnavigation_Import_Export.zip
(83.57 KiB) 242-mal heruntergeladen
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Robs123
Beiträge: 20
Registriert: Mo 7. Aug 2017, 09:49

Re: Umfangreiche Fragebogenaktion mit Base durchführen

Beitrag von Robs123 » Do 24. Aug 2017, 11:27

Hallo Robert,
vielen Dank für die Daten!

Ich möchte nun bei manchen Formularsprüngen das aktuelle Formular schließen. Normalerweise so:

Code: Alles auswählen

stCloseForm = oButton.Tag
	ThisDatabaseDocument.FormDocuments.getByName(stCloseForm).close
Jetzt habe ich in meinen Zusatzeinformationen (.Tag) ja schon mehrere Dinge stehen. Wie muss ich den obigen Code ändern, um mit ';' getrennt eine weitere Zusatzinformaion hier auszulesen?

Ich hoffe ich habe mich hier verständlich genug ausgedrückt..

Gruß,
Rob

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Umfangreiche Fragebogenaktion mit Base durchführen

Beitrag von RobertG » Do 24. Aug 2017, 12:34

Hallo Rob,

Du könntest natürlich andere Felder wie z.B. HelpText missbrauchen. Ich habe über xray dann einmal nachgesehen, wie ich denn an den Namen des aktuellen Formulars komme:

Code: Alles auswählen

arTitle = split(thisComponent.Title, thisComponent.UntitledPrefix)
msgbox arTitle(1)
Der Titel nennt zuerst die Datenbank und dann die Formularbezeichnung. Der Doppelpunkt mit Leerzeichen davor und dahinter ist in UntitledPrefix gespeichert. Damit kommst Du auf den Namen des aktuellen Formulars und kannst es schließen, ohne dass Du etwas in den Tag oder sonst wo hin schreiben musst.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Robs123
Beiträge: 20
Registriert: Mo 7. Aug 2017, 09:49

Re: Umfangreiche Fragebogenaktion mit Base durchführen

Beitrag von Robs123 » Do 24. Aug 2017, 13:34

Hallo Robert,

Code: Alles auswählen

arTitle = split(thisComponent.Title, thisComponent.UntitledPrefix)
ThisDatabaseDocument.FormDocuments.getByName(arTitle(1)).close
klappt super, ich danke Dir!

LG
Rob

Robs123
Beiträge: 20
Registriert: Mo 7. Aug 2017, 09:49

Re: Umfangreiche Fragebogenaktion mit Base durchführen

Beitrag von Robs123 » Mo 28. Aug 2017, 15:13

Hallo Robert,

wo in der Datenbank sind denn die Makros "Daten_aus_Cache_schreiben", "Backup_sofort", "Backup_Basestart" und "Datenbankbackup" eingebunden?
Ich würde diese gerne nutzen, bin mir aber unsicher, wie und wo ich sie einbauen muss..


Weiterhin ist mir aufgefallen, dass ich die bestehenden Daten in den Tabellen nicht löschen kann, was hat es damit auf sich? Liegt das am Datenbankbackup makro?

Gruß,

Rob

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Umfangreiche Fragebogenaktion mit Base durchführen

Beitrag von RobertG » Mo 28. Aug 2017, 16:33

Hallo Rob,

das Backup ist in der Beispieldatei nur an das Öffnen der Datenbankdatei gekoppelt:
Fenster HauptDB.odb > Extras > Anpassen > Ereignisse > Ansicht wurde erzeugt > Backup_Basestart

Normalerweise ist die *.odb-Datei die ganze Zeit beim Öffnen gleich. Die Daten werden irgendwo im Cache gehalten, nicht in die *.odb-Datei geschrieben. Deshalb würde während des Betirebs der Datenbankdatei so eine Kopie nichts nützen. Es muss erst der Inhalt in die Datenbank geschrieben werden. Hier greift "Backup_sofort". Zuerst werden die Daten aus dem Cache übertragen, dann wird die Datenbankdatei kopiert. Das ließe sich bei sehr wichtigen Datenerhebungen natürlich nutzen: "Backup_sofort" dann starten, wenn eine Person mit allen Fragen durch ist. Für so etwas würde ich aber die Anzahl der möglichen Backup-Dateien deutlich erhöhen (und natürlich die Größe der Datenbankdatei so gering wie möglich halten, z.B. keine Bilder irgendwo einbinden ...).

Du kannst bei der Datenbank nur Daten löschen, wenn Du von hinten nach vorne durchgehst: Tabelle 3 zuerst, dann Tabelle 2 und schließlich Tabelle 1. Das liegt daran, dass unter Extras > Beziehungen die Tabellen miteinander verknüpft sind. Tabelle 1 gibt seinen Primärschlüssel als Fremdschlüssel an Tabelle 2. Wenn der Datensatz in Tabelle 1 gelöscht würde und nicht in Tabelle 2 gelöscht würde, dann wäre die Beziehung kaputt.

Du kannst die Beziehungen auch so definieren, dass bei einer Löschung z.B. von ID1 = 1 in der Tabelle 1 einfach alle davon abhängigen ID2 von Tabelle 2 und ID3 von Tabelle 3 einfach mit gelöscht werden. Das ist eleganter, erzeugt aber vielleicht ungläubiges Staunen, wenn die Daten fehlen ...

Die Definition der Beziehungen spielt auch in die Datenzusammenführung rein. Zuerst muss aus Tabelle 1 importiert werden, danach aus Tabelle 2 usw. - ich habe das, wenn ich das gerade richtig deute, allerdings noch nicht für die Zusammenführung der Datenbanken gelöst. Tabelle 2 lässt sich nämlich bei dieser DB nicht importieren, wenn der Schlüssel aus Tabelle 1 noch fehlt ...

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Umfangreiche Fragebogenaktion mit Base durchführen

Beitrag von RobertG » Mi 30. Aug 2017, 21:39

Hallo *,

ich habe den Datenimport jetzt noch einmal überarbeitet. Er funktionierte bisher nur einwandfrei, wenn die Tabellen keine Beziehung zueinander hatten, die in Extras > Beziehungen definiert wurde. Jetzt habe ich hoffentlich den richtigen Dreh gefunden, die Tabellen in der nach der Beziehung korrekten Reihenfolge zu ermitteln:
Zuerst die Tabellen, die keine Fremdschlüssel beinhalten.
Dann die Tabellen, die nur die ersten Tabellen als Fremdschlüsseltabellen beinhalten.
... hieraus dann eine Schleife (alle Tabellen, die jetzt vorhanden sind, ausschließen ...)
Und dann noch die Tabellen, die in der Fremdschlüsseltabelle gar nicht als Primärschlüsselgeber vorkommen.

Ich habe das jetzt nur mit 3 miteinander verknüpften Tabellen überprüft.

Gruß

Robert
Dateianhänge
Fragebogen_Formularnavigation_Import_Export.zip
Mit automatischer Berücksichtigung der Beziehungen beim Datenimport
(83.99 KiB) 223-mal heruntergeladen
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten