🙏 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. 🤗

[gelöst] Datenquelle als Tabelle in einem Formular

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
harald235

Re: Datenquelle als Tabelle in einem Formular

Beitrag von harald235 » Mi 4. Jul 2012, 12:27

Hallo Robert,

mal wieder Danke für ein schönes Makro aus der Schmiede Robert und Rik (RR).
RobertG hat geschrieben:Dieses Makro musst Du jetzt in Deinem Dokument beim Laden ausführen (Extras → Anpassen → Ereignisse → Laden des Dokuments beendet).
Nur, das funktioniert bei mir unter LO 3.5.3.2 nicht. Da passiert gar nichts, keine Ausführung des Makros, keine Fehlermeldung. Getestet mit einer Datenbank *.odb und einem Writer-Dokument *.odt.

Wenn ich das Makro jedoch bei "Dokument öffnen" eintrage funktioniert es einwandfrei. Bei der Datenbank habe ich es im gewünschten Formular unter Extras → Anpassen .... eingetragen, sonst wird nur der Einstiegs-Screen von Base maximiert.

Wenn man nach einfügen des Makros Änderungen am Dokument oder Formular vornehmen möchte, ist das ziemlich aufwendig, weil man eben keine Symbolleisten mehr hat. Ich mußte erst in den Optionen die Sicherheitsstufe heraufsetzen und den "sicheren Pfad" entfernen, um wieder die Symbolleisten einschalten zu können. Vielleicht ist hier ein Notausstiegs-Button, mit einem Makro wie Dein "Symbolleisten_einblenden" hilfreich. Allerdings würde der wieder unerwünschten Zugriff durch den Anwender gewähren. Und das will Gundo ja nicht. Was Anderes fällt mir gerade nicht ein ..

Ach ja, bei mir bleiben die Symbolleisten auch für alle anderen Dokumente auf meinem PC ausgeschaltet, nur die Menüleiste ist noch sichtbar.

Gruß harald
Zuletzt geändert von harald235 am Mi 4. Jul 2012, 17:09, insgesamt 1-mal geändert.

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

Re: Datenquelle als Tabelle in einem Formular

Beitrag von RobertG » Mi 4. Jul 2012, 15:48

Hallo Harald,

die Geschichte mit den Symbolleisten hat natürlich so ihre Haken. Bei OOo vor 3.0 soll es noch möglich gewesen sein, mit den folgenden Makros die Leisten aus- und wieder einzuschalten:

Code: Alles auswählen

Sub Symbolleisten_Ausblenden
	DIM oFrame AS OBJECT
	DIM oLayoutMng AS OBJECT
	oFrame = StarDesktop.getCurrentFrame()
	oLayoutMng = oFrame.LayoutManager
	oLayoutMng.visible = false
End Sub

Sub Symbolleisten_Einblenden
	DIM oFrame AS OBJECT
	DIM oLayoutMng AS OBJECT
	oFrame = StarDesktop.getCurrentFrame()
	oLayoutMng = oFrame.LayoutManager
	oLayoutMng.visible = true
End Sub
Ab der 3er-Version verschwand dann zwar zuerst auch die Menüleiste, erschien dann aber wieder, sobald in ein Formularfeld geklickt wurde.
In LO 3.5.5.2 ist es so, dass damit zwar die Menüleiste dauerhaft augeblendet bleibt, dafür aber vorher vorhandene Symbolleisten wieder erscheinen - also genau umgekehrt. Außerdem wird der Platz für die Symbolleisten wie eine Umrandung frei gehalten.
Da es also Probleme bei sichtbar - unsichtbar (visible) gibt habe ich dann alles auf verstecken und anzeigen (hide und show) gesetzt. Da verhielt es sich mit den Menüleisten in allen Versionen ordentlich. Mit den Symbolleisten hatte ich unter LO 3.3.4 bei Sichtbarmachen weiter Probleme - nicht aber bei LO 3.5.5. Wenn sich das Ganze wirklich auf Dauer auswirkt, so sollte also beim Schließen des Dokumentes folgendes Makro helfen:

Code: Alles auswählen

Sub Symbolleisten_Einblenden
	DIM oFrame AS OBJECT
	DIM oLayoutMng AS OBJECT
	DIM aElemente()
	oFrame = StarDesktop.getCurrentFrame()
	oLayoutMng = oFrame.LayoutManager
	oLayoutMng = oFrame.LayoutManager
	aElemente = oLayoutMng.getElements()
	FOR i = LBound(aElemente) TO UBound(aElemente)
		oLayoutMng.showElement(aElemente(i).ResourceURL)
		' eventuell fehlende wichtige Elemente:
		'	"private:resource/toolbar/standardbar"
		'	"private:resource/statusbar/statusbar"
	NEXT
End Sub
Die eventuell fehlenden Elemente unter LO 3.3.4 habe ich aufgeführt. Ich habe das Ganze auch nur mit zwei Buttons in einem Formular getestet.

Gruß

Robert
Dateianhänge
Symbolleisten_weg_Fullscreen.odb.zip
(11.11 KiB) 387-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

harald235

Re: Datenquelle als Tabelle in einem Formular

Beitrag von harald235 » Mi 4. Jul 2012, 17:17

Hallo Robert,

die Beispieldatenbank funktioniert gut, die "Rückholaktion" der Symbolleisten hinterläßt auch in anderen Dokumenten keine Spuren in Form fehlender Symbolleisten. Wenn Gundo sich mit der nun halt zugänglichen Schaltfläche anfreunden kann, ist er einen großen Schritt weiter. Vielleicht macht er sie so klein, das nur er sie sehen kann, oder maskiert sie sonstwie.

Danke und Gruß harald

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

Re: Datenquelle als Tabelle in einem Formular

Beitrag von RobertG » Mi 4. Jul 2012, 22:07

Hallo Gundo,

auch wenn Du erst einmal auf Funktstille gegangen bist hier noch ein paar Hinweise:
Bei der Kombination von Tabellenkontrollfeld und weiteren Formularfeldern gibt es einen kleinen, leicht behebbaren Bug. Wenn Du beide Feldarten zusammen in einem Formular hast, so läuft der Cursor von den anderen Formularfeldern automatisch in das Tabellenkontrollfeld, obwohl dieses Feld standardmäßig auf "Tabstop" = "Nein" eingestellt ist. Das kann behoben werden, indem der Tabstop einmal auf "Ja" und anschließend wieder auf "Nein" eingestellt wird. Dann erst wird "Nein" wirklich übernommen. Du kannst also in dem Tabellenkontrollfeld suchen und den entsprechenden Datensatz in den anderen Formularfeldern gegebenenfalls ausführlicher anzeigen lassen.
Die Buttons, die bereits von der Funktion her vorhanden sind, kannst Du natürlich mit entsprechenden Symbolen versehen. Ich habe das gerade zum Spaß einmal mit einem Symbolsatz 128px*128px probiert - sind natürlich dann Riesenbuttons geworden. Auch die Schrift lässt sich entsprechend anordnen und einstellen.
Die Buttons, die Dir noch fehlen, können wir gegebenenfalls nachstellen, da Du ja sowieso eine Makrounterstützung wegen des Fullscreens einbauen musst.
Lediglich die Suchfunktion muss anders eingebaut werden. Aber auch das geht - nur mit etwas Tricks, dafür aber auch besser als mit den vorgegebenen Suchfunktionen der Symbolleiste von LibreOffice. Insgesamt nämlich so, wie die meisten von uns die Internet-Suchmaschinen auch nutzen: Suchbegriff eingeben, Button drücken und Ergebnis anschauen.

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

Gundo
Beiträge: 53
Registriert: So 1. Jul 2012, 10:23

Re: Datenquelle als Tabelle in einem Formular

Beitrag von Gundo » Mi 4. Jul 2012, 22:37

Hallo ihr hilfbereiten Kobolde ;)

Zuerst wieder mal vielen Dank.
Ich muss das erst mal genau studieren was ihr mir an Tips geschrieben habt. Inzwischen habe ich meine altbackend wirkende Datenverwaltung vorangetrieben.
Maske.jpg
Maske.jpg (111.04 KiB) 8175 mal betrachtet
Ist noch nicht fertig, aber so langsam wird es. Einen Schönheitspreis gibt´s dafür sicher nicht, aber egal ... hauptsache die Senioren kommen damit klar. Die Buttons wirken natürlich sehr klobig, aber wie man schöne Icons verwendet hab ich noch nicht rausbekommen.

Aber es sind natürlich weitere Fragen aufgetaucht.

1. Wie stellt man es an, das nach Betätigung "NEU" (Neuer Datensatz) automatisch im neuen Datensatz das Feld "Anrede" aktiviert wird, und der Cursor dort auch erscheint ? So das man ohne Gecklicke sofort losschreiben kann.
2. Ich hätte ja gerne eine Proportionalschrift wie Arial verwendet. Leider haut das nicht mit der Anzahl der Buchstaben und der Feldlänge hin. D.h. nur bei einer Nicht-Proportional-Schrift wie Courier New hab ich die volle Kontrolle weil die Buchstaben immer die gleiche Breite haben. Wäre schön mit Arial bis zum Ende des Feldes schreiben zu können, egal wieviele Buchstaben verwendet werden (also ohne Vorgabe). Weiß jetzt nicht ob ihr mich versteht.

Es gibt da noch so andere Kleinigkeiten die ich gerne wüsste ... aber nun versuche ich erst mal das Makro einzubinden.

Gruß Gundo

EDIT:
Bei der Kombination von Tabellenkontrollfeld und weiteren Formularfeldern gibt es einen kleinen, leicht behebbaren Bug.
Moment, das ist ja genau das was ich gefragt habe.
EDIT2:
Klasse, dein Tipp hat funktioniert. Wieder ein Problem weniger :D :)

harald235

Re: Datenquelle als Tabelle in einem Formular

Beitrag von harald235 » Do 5. Jul 2012, 00:31

Hallo Gundo,

wird da der Fokus auch wie gewünscht auf das Feld "Anrede" gesetzt? Oder auf "KundenID"?

Wenn nicht auf "Anrede", dann hilft dieses Makro:

Code: Alles auswählen

Sub FokusSetzen
oDoc = ThisComponent
oDocView = oDoc.getCurrentController()
oForm = oDoc.drawpage.forms(0)            ' forms(0) = MainForm (Hauptformular) im Formular-Navigator
oFeld = oForm.getByName("Anrede")          ' Feldname im Formular-Navigator
oDocView.getControl(oFeld).setFocus()
End Sub
Dabei ist angenommen das "Anrede" im Hauptformular ist und auch wirklich "Anrede" heißt und nicht z.B. "Textfeld 2". Im Formular-Navigator findest Du das gegebenenfalls raus. Das Makro speicherst Du genau wie das andere auch in "Modul 1" (Extras → Makros verwalten → LibreOffice Basic ......).

Es soll nach dem Datensatzwechsel ausgeführt werden, so legst Du das in den Formular-Eigenschaften fest:
Reiter "Ereignisse" → "Nach dem Datensatzwechsel" → auf die Schaltfläche mit den 3 Punkten klicken, im nächsten Fenster Schaltfläche Makro klicken und im nächsten Fenster durchklicken, bis Du das Makro "FokusSetzen" auswählen kannst.

Nach klick auf "OK" wird es in die Formular-Eigenschaft "Nach dem Datensatzwechsel" eingetragen.

Nach jedem Datensatzwechsel in Deinem Formular wird der Fokus dann auf das Feld "Anrede" gesetzt.

Gruß harald

EDIT: Deine 2.Frage ist keine. Deine Felder sind doch groß genug für lange Namen und Email-Adressen. Oder was meinst Du mit "egal wieviele Buchstaben verwendet werden (also ohne Vorgabe)"?

Gundo
Beiträge: 53
Registriert: So 1. Jul 2012, 10:23

Re: Datenquelle als Tabelle in einem Formular

Beitrag von Gundo » Do 5. Jul 2012, 12:21

Einfach nur klasse. Alle Makros funktionieren bei mir.
Deine Erklärungen sind aber auch für jeden Anfänger zu verstehen.
Bild

Das mit der Textlänge werde ich noch mal in Angriff nehmen. Hab mich wohl missverständlich ausgedrückt. Es geht darum das immer nur bis zur Feldrandbegrenzung geschrieben werden soll, egal welche Schriftart/Schriftgröße eingestellt ist. Man kann ja die max. Textlänge festlegen. Aber dann wird bei einer Proportionalschrift, je nach verwendete Buchstaben, entweder vor dem Feldrand gestoppt oder darüber hinausgeschrieben. Nur mit einer Nicht-Proportional-Schrift konnte ich das bisher genau festlegen. Nur haben dann die Buchstaben immer die selbe Breite und es passen weniger Zeichen in das Feld. :roll: Weiß nicht wie ich das sonst erklären soll.

Eine "Exit" - Taste hätte ich gerne im Formular mit der komplett das Formular und LibreOffice beendet werden soll. Nur eine Abfrage ob ggf gespeichert werden soll, darf erscheinen. Ist das auch möglich ?

Gruß Gundo

EDIT: Kann man per Makro beim Start des Formulars auch einen Button aktivieren/anklicken ?

harald235

Re: Datenquelle als Tabelle in einem Formular

Beitrag von harald235 » Do 5. Jul 2012, 15:20

Hallo Gundo,

bist Du da nicht ein wenig zu genau? Ich bevorzuge einige Zeichen mehr zu erlauben, als Platz vorgesehen ist. Wenn ich im Gebrauch feststelle, es reicht nicht, dann passe ich das Feld entsprechend an. Wo das nicht erlaubt ist und lange Namen zu erwarten sind, vergrößere ich das Feld auf 2 Zeilen und ändere die Eigenschaften des Feldes auf mehrzeilig (Reiter "Allgemein" die Eigenschaft "Mehrzeilig" auf "Ja"). Da muß man halt entscheiden, was einem genehmer ist.

Zur "Exit-Taste":
Das folgende Makro speichert Veränderungen am Formular, speichert den aktuellen Datensatz, schließt das Formular und dann die Datenbank. Ob Du die Speicherung des aktuellen Datensatzes beim Schließen der Datenbank zulassen willst, überdenke nochmal. Allzuleicht wird was gespeichert, was noch nicht ok ist. Besonders dann, wenn die Konzentration bei der Arbeit nachläßt. Und damit muß man immer rechnen, nicht nur bei Senioren. Da hilft Dir auch keine Abfrage "Speichern Ja/Nein", die wird nach einiger Zeit routinemäßig mit "Ja" bestätigt. Du kannst die entsprechenden Zeilen des Makros ja löschen oder auskommentieren,falls Du meine Bedenken teilst.

Hier das Makro:

Code: Alles auswählen

' Formularänderungen speichern, aktuellen Datensatz speichern, Formular und Datenbank schließen

Sub DB_schliessen
	Dim oDocument as Object
	Dim oDispatcher as Object
	Dim oDoc as Object
	Dim oForm as Object

' Zugriff auf Dokument
	oDocument   = ThisComponent.CurrentController.Frame
	oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
' Änderungen im Formular speichern, nicht im ungespeicherten Datensatz
	oDispatcher.executeDispatch(oDocument, ".uno:Save", "", 0, Array())
	
' Zugriff auf das Formular und speichern des aktuellen Datensatzes
	oForm = ThisComponent.DrawPage.Forms.getByName("MainForm")  ' geht auch: Forms(0)
	If oForm.IsNew then oForm.InsertRow Else oForm.UpdateRow
	
' Formular schließen
	ThisComponent.CurrentController.Frame.Close(False)

' Datenbank schließen
   oDoc = ThisDatabaseDocument
   oDoc.Store()
   oDoc.Close(True)
End Sub
Viel Freude damit.

Zu Deinem Edit: Was willst Du denn aktivieren?

Gruß harald

Gundo
Beiträge: 53
Registriert: So 1. Jul 2012, 10:23

Re: Datenquelle als Tabelle in einem Formular

Beitrag von Gundo » Do 5. Jul 2012, 16:58

Danke Harald.
Zu Deinem Edit: Was willst Du denn aktivieren?
Es geht um das Makro "Symbolleisten_Ausblenden". Dieses Makro ist auch im Formular mit einem Button verknüpft. Bei mir funktioniert es zwar wenn "Symbolleisten_Ausblenden" beim Öffnen des Formulars ausgeführt wird (Extras ->Anpassen ->Ereignisse ->Dokument öffen[Symbolleisten_Ausblenden]), aber die Bearbeitung des Formulars ist kaum mehr möglich weil die Symbolleisten fehlen. Das ist auch der Fall wenn ich per Button im Formular "Symbolleisten_Einblenden" ausführe.

Ich hätte es gerne so, das beim oder direkt nach dem Öffnen des Formulars der Button mit dem Makro "Symbolleisten_Ausblenden" automatisch ausgeführt würde. So hätte man wohl keine Probleme mit der Bearbeitung des Formulars.

Und die Königsaufgabe ist wohl: Wie kann man das Formular als Verknüpfung vom Windows Desktop starten, und zwar so das direkt das Formular geöffnet wird ?

Harald, wir können hier aber auch Schluß machen, du hast mir schon so sehr geholfen und ich will dich nicht mit weiteren Fragen nerven.
Du kannst die entsprechenden Zeilen des Makros ja löschen oder auskommentieren,falls Du meine Bedenken teilst.
Werde ich mir noch überlegen.

Gruß Gundo

EDIT: Kann ja passieren das man mal unbeabsichtig auf "DB_schliessen" klickt. Da wäre vielleicht noch ein Bestätigungsdialog vorteilhaft. Kannst du das noch einbauen ?

Gundo
Beiträge: 53
Registriert: So 1. Jul 2012, 10:23

Re: Datenquelle als Tabelle in einem Formular

Beitrag von Gundo » Do 5. Jul 2012, 17:39

Danke Harald.
Zu Deinem Edit: Was willst Du denn aktivieren?
Es geht um das Makro "Symbolleisten_Ausblenden". Dieses Makro ist auch im Formular mit einem Button verknüpft. Bei mir funktioniert es zwar wenn "Symbolleisten_Ausblenden" beim Öffnen des Formulars ausgeführt wird (Extras ->Anpassen ->Ereignisse ->Dokument öffen[Symbolleisten_Ausblenden]), aber die Bearbeitung des Formulars ist kaum mehr möglich weil die Symbolleisten fehlen. Das ist auch der Fall wenn ich per Button im Formular "Symbolleisten_Einblenden" ausführe.

Ich hätte es gerne so, das beim oder direkt nach dem Öffnen des Formulars der Button mit dem Makro "Symbolleisten_Ausblenden" automatisch ausgeführt würde. So hätte man wohl keine Probleme mit der Bearbeitung des Formulars.

Und die Königsaufgabe ist wohl: Wie kann man das Formular als Verknüpfung vom Windows Desktop starten, und zwar so das direkt das Formular geöffnet wird ?

Harald, wir können hier aber auch Schluß machen, du hast mir schon so sehr geholfen und ich will dich nicht mit weiteren Fragen nerven.
Du kannst die entsprechenden Zeilen des Makros ja löschen oder auskommentieren,falls Du meine Bedenken teilst.
Werde ich mir noch überlegen.

Gruß Gundo

EDIT: Kann ja passieren das man mal unbeabsichtig auf "DB_schliessen" klickt. Da wäre vielleicht ein Bestätigungsdialog vorteilhaft. Kannst du das noch einbauen ?


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