🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ 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) Feldwert aus Einzelteilen zusammensetzen?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

(gelöst) Feldwert aus Einzelteilen zusammensetzen?

Beitrag von Freischreiber » So 4. Mai 2014, 09:58

Hallo,

für eine Auftragstabelle plane ich, die Spalte "Autragsnummer" automatisch ausfüllen zu lassen mit automatisch hergestellten Auftragsnummern.

Es gibt bereits einen Altbestand an Aufträgen, die übernommen werden sollen und deren Auftragsnummern alle im Format JJJJ-XX-T sind, also Jahreszahl, (einigermaßen) fortlaufende Nummer, die jeweils am Jahresanfang wieder unten anfängt und Typ des Auftrags.

Beispiel: 2013-61-a

Jetzt würde ich gerne bei der Neuanlage eines Auftrags den Feldinhalt für die Auftragsnummer aus Jahreszahl, einem fortlaufenden Zähler und einem bei der Neuanlage anzugebenden Auftragstyp von Base zusammensetzen lassen.

Geht das? Es erinnert mich an das automatische Ausfüllen eines Erfassdatums in einem neuen Datensatz als Defaultwert, aber dort gab es eine SQL-Funktion für das Datum...

Und Zusatzfrage: Spricht etwas dagegen, so ein zusammengesetztes Feld direkt als Primärschlüssel der Auftragstabelle zu definieren?

Gruß
Freischreiber
Zuletzt geändert von Freischreiber am Sa 3. Jan 2015, 16:53, insgesamt 1-mal geändert.
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Feldwert aus Einzelteilen zusammensetzen?

Beitrag von F3K Total » So 4. Mai 2014, 19:22

Hi,
vollautomatisch geht so etwas mit der eingebetteten HSQL 1.8.10 Datenbank nicht ohne Weiteres.
Du hast aus meiner Sicht vier Möglichkeiten:
  • bau den Schlüssel per SQL-Abfrage zusammen, dann wird er gezeigt, aber existiert nicht als eigene Tabellenspalte
  • Schreibe ein Makro, was dir den Schlüssel erzeugt
  • Mache aus deiner .odb Datei eine nach Frontend und Backend getrennte Datenbank (Split-DB), dann kannst du die HSQL Version updaten, aktuell ist 2.3.2, und deine IDs mit einem Trigger generieren.
  • bau den Schlüssel per SQL-Abfrage zusammen und schreibe ihn über eine Formularverknüpfung in die ID-Spalte
Da mich die letzte Version gereitzt hat, genau genommen, es ohne Makro hinzubekommen, anbei eine Beispieldatei.
  1. Wähle den Typ im Listenfeld
  2. Klicke "neue ID generieren" um den Typ anzuhängen
  3. Setze einen Haken bei "neuen Datensatz anlegen?"
  4. Klicke "neuen Datensatz speichern
Gruß R
Dateianhänge
Spezial_ID.zip
nur entpacken
(27.15 KiB) 194-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

Re: Feldwert aus Einzelteilen zusammensetzen?

Beitrag von Freischreiber » Di 28. Okt 2014, 09:12

Hallo F3K Total,

endlich bin ich so weit, an der Datenbank weiterzumachen - und hoffentlich redest du noch mit mir...

Vielen Dank für das Formular! Es tut genau, was es soll und es paßt reibungslos in meine Datenbank hinein.

Natürlich habe ich versucht, auch die Funktion nachzuvollziehen, bin aber ziemlich gescheitert.

Die SQL-Abfrage, der die Auftragsnummer zusammensetzt, ist diese hier und sie verbirgt sich hinter dem Listenfeld "Typ", soweit bin ich gekommen:

Code: Alles auswählen

SELECT "ID_HELP", "TYP", ( SELECT YEAR( "DATUM" ) || '-' || REPEAT( '0', 3 - LENGTH( MAX( CONVERT ( SUBSTRING ( "IDS", 6, 3 ) , INTEGER ) ) + 1 ) ) || MAX( CONVERT ( SUBSTRING ( "IDS", 6, 3 ) , INTEGER ) ) + 1 || '-' || ( SELECT "TYP" FROM "HELP" ) FROM "AUFTRAEGE" WHERE YEAR( "DATUM" ) = YEAR( CURRENT_DATE ) ) AS "NEW_ID" FROM "HELP" WHERE "ID_HELP" = TRUE
(Mich irritiert, daß ich dort nur hinkomme, wenn ich mit dem Mauszeiger auf dem Listenfeld Typ über die rechte Maustaste "Formular" auswähle, und sonst nicht. Es ist doch eigentlich nur EIN Formular, und die Formulareigenschaften müßten überall die gleichen sein?)

Die Tabelle Help liefert die Typbezeichnung für die Abfrage, aber wie genau, verstehe ich noch nicht.

Wie auch immer, es funktioniert jedenfalls perfekt und ich möchte mich nochmal herzlich bedanken!

Viele Grüße
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Feldwert aus Einzelteilen zusammensetzen?

Beitrag von F3K Total » Di 28. Okt 2014, 17:49

Moin,
Freischreiber hat geschrieben:Es ist doch eigentlich nur EIN Formular, und die Formulareigenschaften müßten überall die gleichen sein?
Weit gefehlt: Es sind drei strukturelle Formulare, ich empfehle dir, dich mit dem Formularnavigator zu beschäftigen, siehe Bild:
dreiFormulare.png
dreiFormulare.png (9.11 KiB) 3593 mal betrachtet
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

Re: Feldwert aus Einzelteilen zusammensetzen?

Beitrag von Freischreiber » Mi 29. Okt 2014, 18:13

Verdammt. Mein Base hatte die Symbolleiste Formular-Entwurf nach einem Update offenbar wieder ausgeblendet - und ich habe dann den (in meinem LO) ähnlich aussehenden normalen Navigator geöffnet anstatt dem Formularnavigator... es war also sehr nichtssagend.

Das sind drei Ebenen? Hauptformular AUFTRAEGE, darunter FRM_HELP und darunter dann AUFTRAEGE_NEU?

Die Schaltfläche "neue ID generieren" aktualisiert das Hauptformular, und damit auch das Unterformular FRM_HELP, so daß der dortige SQL-Code ausgeführt wird und eine neue ID generiert, richtig?

Was ich nicht verstehe ist, warum die Schaltfläche "neuen Datensatz speichern" die Information aus "neuen Datensatz anlegen?" offenbar gar nicht auswertet, sondern auch nur das Formular aktualisiert...

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Feldwert aus Einzelteilen zusammensetzen?

Beitrag von F3K Total » Mi 29. Okt 2014, 22:44

Freischreiber hat geschrieben:Was ich nicht verstehe ist, warum die Schaltfläche "neuen Datensatz speichern" die Information aus "neuen Datensatz anlegen?" offenbar gar nicht auswertet, sondern auch nur das Formular aktualisiert...
Ein kleiner Trick, um ein weiteres Klicken zu vermeiden. Die zweite Schaltfläche befindet sich auch auf dem Haupformular.
Der Ablauf:
  • Du wählst einen Typ -> das Listenfeld befindet sich auf dem Formular FRM_HELP, der Cursor steht nach der Auswahl des Typs auf diesem Formular.
  • Du klickst "neue ID generieren", die Schaltfläche befindet sich auf dem Hauptformular AUFTRAEGE, der Cursor springt vom FRM_HELP auf das Formular AUFTRAEGE. In diesem Augenblick wird der Typ in Tabelle HELP gespeichert. Der Cursor landet dann auf dem Haupformular, und aktualisiert alle Unterformulare, womit die ID generiert, und dem UnterUnterFormular AUFTRAEGE_NEU zur Verfügung gestellt wird.
  • Das Formular AUFTRAEGE_NEU hat die Eigenschaft "Nur Datensätze hinzufügen", wenn du jetzt das Markierfeld "neuen Datensatz anlegen?" markierst, wird auf dem Formular AUFTRAEGE_NEU ein neuer Datensatz mit der eben generierten ID angelegt, aber noch nicht gespeichert.
  • Jetzt "neuen Datensatz speichern"anklicken: der Cursor springt vom UnterUnterFormular zum Haupformular, dadurch wird der neu angelegte Datensatz gespeichert, die Schaltfläche "neuen Datensatz speichern" selbst, aktualisiert im Anschluss das Hauptformular, so dass das Ergebnis im Tabellenkontrollfeld rechts angezeigt wird.
Eigentlich reicht eine Schaltfläche, habe die zweite nur wegen des Ablaufes, von oben nach unten, zugefügt.
Simple, nicht? ;-)
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

Re: Feldwert aus Einzelteilen zusammensetzen?

Beitrag von Freischreiber » Di 18. Nov 2014, 19:24

Nein, für meine Verhältnisse gar nicht simpel... offenbar bin ich auch für makrofreie Lösungen vor allem als Konsument geeignet :?

Der Haken bei "neuen Datensatz anlegen" soll nur irgendeine Änderung in der Tabelle Aufträge bewirken, damit der neu erzeugte Datensatz dann gespeichert wird?

Warum zeigt eigentlich das Textfeld txtNEW_ID ausgerechnet den einzigen Datensatz an, den es in der Tabelle noch gar nicht gibt?

Viele Grüße
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de


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