Hallo geschätzte “Base-Gemeinde”!
In einer Auftragsverwaltung habe ich einen ganz ähnlichen Anwendungsfall wie “Primärschlüssel aus Nummerierung und Jahreszahl” im Base-Handbuch. Allerdings ist die DB eine MariaDB mit mehreren Anwendern. D.h. die INSERT-Transaktion muss mutliuser-tauglich sein (atomar, ACID, critical section). Zwei Ansätze habe ich verfolgt und stoße auf verschiedene Probleme:
-
Primärschlüsselgenerierung per DB-Trigger: Das erscheint mit die sauberste Lösung aber leider sieht das Base-Formular nach Speichern den neuen Primärschlüsselwert nicht (bzw. wird nicht angezeigt). Base verliert vermutlich den Datensatzkontext, weil es den generierten Primärschlüsselwert nicht mitbekommt?! (Dabei gibt es doch diese schöne RETURNING-Klausel bei INSERT.
)
-
Primärschlüsselgenerierung per Makro: Grundsätzlich besteht hier die Gefahr, dass zwei Anwender “gleichzeitig” das Makro auslösen und der gleiche Primärschlüsselwert generiert wird. Also sollte die Makro-Ausführung zeitlich sehr nah am INSERT liegen. (Dafür suche ich noch das passende Ereignis/Trigger in Base.) Bei meinen Tests habe ich das entsprechende Makro zunächst manuell aufgerufen. Der generierte Wert wird ähnlich wie im Base-Handbuch “Beispiel_Fortlaufende_Nummer_Jahr_Hsqldb.odb” schön in das Formular eingetragen aber beim Speichern geschieht folgendes:
SQL-Status: HYC00
OPreparedStatement::setObjectWithInfo: invalid arguments.
Was ist da denn los? Bug?
Hat jemand Ideen/Vorschläge/Anregungen?