Seite 1 von 1
(gelöst) Feldwert aus Einzelteilen zusammensetzen?
Verfasst: So 4. Mai 2014, 09:58
von Freischreiber
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
Re: Feldwert aus Einzelteilen zusammensetzen?
Verfasst: So 4. Mai 2014, 19:22
von F3K Total
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.
- Wähle den Typ im Listenfeld
- Klicke "neue ID generieren" um den Typ anzuhängen
- Setze einen Haken bei "neuen Datensatz anlegen?"
- Klicke "neuen Datensatz speichern
Gruß R
Re: Feldwert aus Einzelteilen zusammensetzen?
Verfasst: Di 28. Okt 2014, 09:12
von Freischreiber
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
Re: Feldwert aus Einzelteilen zusammensetzen?
Verfasst: Di 28. Okt 2014, 17:49
von F3K Total
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 (9.11 KiB) 3594 mal betrachtet
Gruß R
Re: Feldwert aus Einzelteilen zusammensetzen?
Verfasst: Mi 29. Okt 2014, 18:13
von Freischreiber
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
Re: Feldwert aus Einzelteilen zusammensetzen?
Verfasst: Mi 29. Okt 2014, 22:44
von F3K Total
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
Re: Feldwert aus Einzelteilen zusammensetzen?
Verfasst: Di 18. Nov 2014, 19:24
von Freischreiber
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