🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.

🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Fokusprobleme

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Emandu
Beiträge: 22
Registriert: Fr 2. Mai 2025, 16:47

Fokusprobleme

Beitrag von Emandu » Mo 9. Jun 2025, 14:11

Moin aus dem Norden,
zwei Probleme lassen mich mal wieder um Eure Hilfe bitten.
In meiner Datenbank habe ich ein Formular Statistiken.
Dort rufe ich über Button einen Bericht Behandlungen für einen bestimmten Zeitraum auf.
Der Bericht basiert auf einer Parameterabfrage , die den anzuzeigenden Zeitraum abfragt und dann auch im Bericht korrekt anzeigt.
Schliesse ich den Bericht lande ich allerdings in der Arbeitsumgebung von Base. Hier würde ich gern wieder im StatistikFormular landen. Möglicherweise funktioniert das über einen Button im Bericht ?!aber vielleicht gibt es da auch eine elegantere Lösung, die den Fokus wieder auf das aufrufende Formular setzt.
Das zweite Problem ist, ich möchte eigentlich grundsätzlich vermeiden, dass meine Tochter in der Arbeitsumgebung von Base landet. Deshalb würde ich beim Beenden der . odb gern die komplette Anwendung(Base) per Button schliessen.
Kann mir da jemand einen Ansatz liefern ?
Gruß Emandu

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Fokusprobleme

Beitrag von RobertG » Mo 9. Jun 2025, 17:12

Wenn Du den Bericht auf hast: Ist dann das Formulardokument weiter offen? Ich habe das hier gerade ausprobiert und komme beim Schließen des Berichts direkt wieder zum Formular zurück.

Hier: OpenSUSE 15.6 mit LO Version: 25.2.3.2 (X86_64) / LibreOffice Community
Build ID: bbb074479178df812d175f709636b368952c2ce3
CPU threads: 6; OS: Linux 6.4; UI render: default; VCL: kf5 (cairo+xcb)
Locale: de-DE (de_DE.UTF-8); UI: de-DE
Calc: threaded

Zum Schließen von Base: Ich hatte das auch in einer Datenbank versucht, die als XRechnungs-Datenbank von vielen Leuten benutzt wird. Abhängig vom System konnte es passieren, dass LibreOffice hing. Das Makro steht noch in der XRechnungs-Datenbank drin. Siehe: https://www.familiegrosskopf.de/robert/ - dort rechts bei den Bearbeitungsversionen nach XRechnung_V2502_….odb (nicht nach der MariaDB-Variante) suchen. Das Schließmakro ist in "Backup" → "DatabaseClose1". Da kannst Du auch sehen, was ich alles ausprobiert habe. Wenn es bei Linux hier funktionierte funktionierte es anschließend bei Windows nicht …
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

Emandu
Beiträge: 22
Registriert: Fr 2. Mai 2025, 16:47

Re: Fokusprobleme

Beitrag von Emandu » Mo 9. Jun 2025, 21:09

RobertG hat geschrieben:
Mo 9. Jun 2025, 17:12
Wenn Du den Bericht auf hast: Ist dann das Formulardokument weiter offen?
Ich habe das jetzt mal geprüft.
Startformular -> Aufruf frmStatistiken -> beide Formulare bleiben geöffnet , mit korrektem Fokus auf frmStatistiken
Aufruf Bericht -> Parameter werden abgefragt, während der Parametereingabe legt sich bereits die Arbeitsumgebung über die beiden Formulare (könnte hier das Problem liegen und ich sollte versuchen die Parametereingabe ins Formular einzubetten ?? )-> Bericht ist offen, Formulare sind weiterhin geöffnet. Beim Schliessen des Berichts geht der Fokus zurück auf die Arbeitsumgebung-> Formulare sind weiterhin geöffnet.
Hier:
Windows 10 Home , LO Version 24.8.6.2
Build: 6d98ba145e9a8a39fc57bcc76981d1fb1316c60c
CPU Threads:12
BS:Windows 10 X86_64 (10.0. build 19045)
UI-Render: Skia/Raster;VCL: win
Gebietsschema: de-DE(de_DE); UI:de-DE
Calc: CL threaded

Das von dir entwickelte Makro DatabaseClose habe ich erst einmal auf die Schnelle auf einen Button gelegt.
Keine Fehlermeldung aber es wird auch keine offensichtliche Aktion ausgelöst.
Da schau ich aber ganz in Ruhe noch einmal drauf und versuche es nachzuvollziehen.

Gruß Emandu

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Fokusprobleme

Beitrag von RobertG » Di 10. Jun 2025, 09:49

Hallo Emandu,

vermutlich wird das Ganze an der Parametereingabe liegen. Mit so etwas arbeite ich grundsätzlich nicht. Ich habe die Filtervorgaben immer in einer Filtertabelle liegen.

Das Makro zum Schließen ist so auch nicht direkt nutzbar, weil alle Möglichkeiten zum Schließen auskommentiert sind:

Code: Alles auswählen

StarDesktop.terminate()
ist die erste Möglichkeit

Code: Alles auswählen

oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
REM .uno:CloseWin, .uno:CloseDoc, .uno:Quit
oDispatcher.executeDispatch(oDoc.CurrentController.Frame, ".uno:Quit", "", 0, Array())
zeigt gleich 3 Möglichkeiten.
Nur wenn neben Base eine andere Anwendung (Calc, Writer usw.) offen ist, dann funktioniert das Schließen der Base-Datei über

Code: Alles auswählen

oDoc.Close(True)
Achtung: Da wird auch eine andere Funktion aufgerufen, die Du vermutlich nicht benötigst: DataWrite. Das war bei Firebird notwendig, da die Abspeicherung nicht automatisch funktionierte. In der aktuellen LO-Version ist das jetzt behoben.
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

Emandu
Beiträge: 22
Registriert: Fr 2. Mai 2025, 16:47

Re: Fokusprobleme

Beitrag von Emandu » Do 19. Jun 2025, 15:56

Moin aus dem Norden
RobertG hat geschrieben:
Di 10. Jun 2025, 09:49
Hallo Emandu,
vermutlich wird das Ganze an der Parametereingabe liegen. Mit so etwas arbeite ich grundsätzlich nicht. Ich habe die Filtervorgaben immer in einer Filtertabelle liegen.
das ist natürlich viel eleganter und ich würde das gern auch so umsetzen.
Mein Ansatz:
Ich hatte bis dato Abfragen erstellt, die mir je nach Kriterium (Behandlungen gesamt , Behandlungen Familienhunde..je nach Zustand eines Markierfelds im Formular )den gewünschten Zeitraum anzeigen.
Ich habe jetzt im Formular zwei Datumsfelder eingefügt , die die Werte direkt in die Filtertabelle (Startdatum, Enddatum)schreiben. Das funktioniert.
Im Entwurf der existierenden Abfragen habe ich die Filtertabelle hinzugefügt. Jetzt wird mir beim Ausführen der Abfragen natürlich in jedem Datensatz der Inhalt der Filtertabelle angefügt.
Die bisherige Argumentabfrage ( >=:Startdatum und <=:Enddatum) habe ich rausgenommen.
Jetzt habe ich mal wieder einen Knoten im Kopf....
Kann ich das überhaupt in der Entwurfsansicht der Abfrage regeln , dass die beiden Filtertabellenwerte direkt greifen?
Kann ich ...und wenn ja wie (korrekte Syntax) ( >=:Startdatum und <=:Enddatum)als Kriterium ersetzen durch (>=tblFilter.Startdatum und <=tblFilter.Enddatum )?
Falls das nicht geht würde ich das gern in der SQL Anweisung als AND Bedingung formulieren.....
Da ich den Ansatz nach "Herumprobieren"vielleicht als falsch verwerfe , obwohl es sich dann "nur" um ein Syntaxproblem handelt, bitte ich um Eure Meinung. Bin ich hier auf dem Holzweg und sollte vielleicht einen ganz anderen Ansatz , und wenn ja welchen, wählen ?

Gruß Emandu

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Fokusprobleme

Beitrag von RobertG » Do 19. Jun 2025, 16:16

Die Filtertabelle besteht grundsätzlich für Dich nur aus einem Datensatz. Da ich häufig auch Serverdatenbanken zusammenstelle ermittle ich den Datensatz über die VerbindungsID. Wenn jetzt also "viw_Filter" hier auftaucht, dann ist das der eine für Dich gültige Datensatz aus der Filtertabelle.

Code: Alles auswählen

SELECT * FROM "MyTable" 
WHERE "StartDat" >= (SELECT "StartDatum" FROM "viw_Filter")
Vermutlich willst Du, dass das Ganze auch eine entsprechende Anzeige liefert, wenn der Eintrag "StartDatum" leer ist:

Code: Alles auswählen

SELECT * FROM "MyTable" 
WHERE "StartDat" >= COALESCE((SELECT "StartDatum" FROM "viw_Filter"), "StartDat")
So erscheinen alle Daten, wenn Du keinen Eintrag in "StartDatum" stehen hast.
Die Filtertabelle wird da meist über eine Unterabfrage hinzugefügt. So bleibt der Rest der Abfrage auch in Formularen für eine Datenänderung offen.
Die "viw_Filter" erzeuge ich über den folgenden Code:

Code: Alles auswählen

SELECT "tbl_Filter".*
FROM "tbl_Filter" 
WHERE "ID" = CURRENT_CONNECTION
(hier: Firebird)
Dazu muss aber zuerst beim Start der Datenbank ein Makro ablaufen, das einen Datensatz in "tbl_Filter" schreibt, der als Primärschlüssel die CURRENT_CONNECTION hat.
Du kannst auch schlicht bei "tbl_Filter" den Primärschlüssel mit einem Ja/Nein-Feld erstellen. Ausgewählt ist dann der Filter-Datensatz, den Du nutzt. Dann kannst Du in dem Code oben statt "viw_Filter" "tbl_Filter" eintragen - vorausgesetzt eben, Du hast nur einen Datensatz da drin.
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

Emandu
Beiträge: 22
Registriert: Fr 2. Mai 2025, 16:47

Re: Fokusprobleme

Beitrag von Emandu » Do 19. Jun 2025, 22:14

Vielen Dank für Deine Nachricht.
Bevor ich die von dir vorgeschlagene Variante ausprobiere , habe ich noch mit meinen vorhandenen Abfragen getestet....
Emandu hat geschrieben:
Do 19. Jun 2025, 15:56
Moin aus dem Norden
RobertG hat geschrieben:
Di 10. Jun 2025, 09:49
Hallo Emandu,
vermutlich wird das Ganze an der Parametereingabe liegen. Mit so etwas arbeite ich grundsätzlich nicht. Ich habe die Filtervorgaben immer in einer Filtertabelle liegen.
Jetzt habe ich mal wieder einen Knoten im Kopf....
Kann ich das überhaupt in der Entwurfsansicht der Abfrage regeln , dass die beiden Filtertabellenwerte direkt greifen?
Kann ich ...und wenn ja wie (korrekte Syntax) ( >=:Startdatum und <=:Enddatum)als Kriterium ersetzen durch (>=tblFilter.Startdatum und <=tblFilter.Enddatum )?
Gruß Emandu
Ja es funktioniert auch auf diese "einfache Art".
Hier wird der Filterwert geschrieben...
LO1.jpg
LO1.jpg (25.85 KiB) 860 mal betrachtet
und hier habe ich die Argumente ( >=:Startdatum und <=:Enddatum)ersetzt durch die Filterwerte.
LO2.jpg
LO2.jpg (160.46 KiB) 857 mal betrachtet
(Wobei die Beziehungen nicht mehr korrekt im Abfrageentwurf angezeigt werden....) Weil ich direkt im SQL-Code Änderungen vorgenommen habe oder was kann da die Ursache sein ?
Der Nachteil gegenüber Deiner Variante ist sicher die drei im Vorfeld zu erstellenden Abfragen und damit die Performance

Hier schliesst sich noch eine Frage an.
Die Filtertabelle
LO3.jpg
LO3.jpg (14.6 KiB) 860 mal betrachtet
verwende ich ja an verschiedenen Stellen.
Aus der Erfahrung heraus...ist es ratsam eine Filtertabelle mit vielen Filterargumenten aufzustellen (es könnten noch mehr dazukommen) oder dann lieber eine zweite Filtertabelle einzufügen.
Ich wüsste jetzt auf Anhieb nichts , was gegen EINE Filtertabelle spricht , solange die Feldnamen eindeutig sind aber
mir fehlt auch die Erfahrung um einschätzen zu können ob es Anwendungsfälle gibt in denen es Probleme geben könnte.

Gruß Emandu

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Fokusprobleme

Beitrag von RobertG » Fr 20. Jun 2025, 09:19

Ich nutze grundsätzlich eine Tabelle für die Filterung. Ist doch egal, wie viele Felder da drin sind.
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 gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten