Hallo Cyklista,
Cyklista hat geschrieben:Lege ich mir die Tabelle "LaufendesJahr" mit 2 Spalten "Id" als Primärschlüssel und "Jahr" als INTEGER an.
Der Primärschlüssel muss sich auf beide zusammen beziehen, also "Id" und "Jahr". Für das Jahr brauchst Du keinen Integer-Wert. Es reicht auch Smallinteger, da dort das Maximum bei 5 Stellen liegt.
Cyklista hat geschrieben:
Code: Alles auswählen
SELECT MAX (Id) FROM "Auftraege" WHERE "Jahr"="Jahr" FROM "LaufendesJahr"
Du hast jetzt 2 Tabellen gegründet. Warum? Du benötigst doch nur einen eindeutigen Schlüssel für die Tabelle "Auftraege". Außerdem hast Du zwei Tabellen in eine Abfrage gepackt, ohne sie miteinander zu verbinden.
Jetzt einmal nur für die Tabelle "Auftraege", die dann die Felder "ID" und "Jahr" als Primärschlüssel enthält:
Code: Alles auswählen
SELECT MAX( "ID" ), "Jahr" FROM "Auftraege" GROUP BY "Jahr"
Es werden die momentan höchsten Einträge bei "ID" für die jeweiligen Jahr gelistet.
Code: Alles auswählen
SELECT MAX( "ID" ) AS "momentan höchste ID", MAX( "ID" ) + 1 AS "neue ID", "Jahr" FROM "Auftraege" GROUP BY "Jahr"
Zuerst einmal wird den Feldern ein Alias zugewiesen, damit klar ist, wofür sie dienen. Dann wird dem Maximum einfach '1' hinzugezählt. Das ist die nächste freie "ID".
Code: Alles auswählen
SELECT MAX( "ID" ) AS "momentan höchste ID", MAX( "ID" ) + 1 AS "neue ID", "Jahr" FROM "Auftraege" WHERE "Jahr" = YEAR( NOW( ) ) GROUP BY "Jahr"
Jetzt wird das Ganze noch auf das aktuelle Jahr bezogen, d.h. es wird nur ein Datensatz angezeigt. Oder es wird gar nichts angezeigt, wenn es der erste Datensatz im Jahr ist.
Eine entsprechende Übertragung als neue Werte in das Formular musst Du in dem Moment allerdings händisch erledigen, wenn Du nicht zu Makros greifen willst. Aber was nicht ist kann ja noch werden.
Gruß
Robert