Access/MySQL Fragen: Workaround für Transaction ??? On ERROR ??? Sequence/Autowert ???
Geizhals » Forum » Programmierung » Access/MySQL Fragen: Workaround für Transaction ??? On ERROR ??? Sequence/Autowert ??? (1 Beitrag, 43 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
Access/MySQL Fragen: Workaround für Transaction ??? On ERROR ??? Sequence/Autowert ???
16.04.2007, 10:15:46
Meine Probleme habe ich mit Access - 2 Datenbanken (Frontend/Backend). Da ähnliche Probleme in MySQL existierten - können MySQLler sicher auch helfen...

In einem Eingabeformular erfasse ich diverse Werte - und durch die Applikation werden dann i.d.F. diverseste Tabellen befüllt. Derzeit ist der Ablauf wie folgt:

 - Insert into Tabelle1 (a,b,c )VALUES (a1,b1,c1) # Stammdaten befüllen
 - select ID from Tabelle1 where a=a1 and b = b1 and c = c1; # ID der neuen Stammdate holen
 - Insert into Tabelle2 (fk_tabelle1, d,e,f,..) values (gefetchte_id_von_tabelle1, d1,e1,f1,...); # in andere Tabelle enitragen


Hier sehe ich mehrere Probleme:
1.) ACCESS und MySQL:
"Normal" würde ich das in eine Transaktion kapseln. Nachdem diese ja in Access bei verknüpften Tabellen nicht gehen - wie löst man das dann ? Schließlich hätte ich ja einen sinnlosen Datensatz in Tabelle1, wenn das Insert in Tabelle2 Fehlschlägt

2.) Autowerte:
In einer "normalen" Datenbank
- hat Tabelle1 einen Defaultwert - nämlich den Nextval einer Sequence.
- liefert sequence.curval nicht den letzten systemweiten Wert einer Sequence - sondern den letzten Wert dieser meiner Session
- kann ich daher bequemst statt dem SELECT einfach sequence.curval verwenden...
Wie klappt das mit den Autowerten ? Muß ich wirklich Selecten, wie ich es als Workaround tat ? Gibt es sowas wie "curval" bei Autowerten - wenn ja, ist das Systemweit (dann wäre es ja eine Race-Condition) oder Session-bezogen ? Wenn nein - wie löst man das normal in Access ?

3.) On ERROR:
Angenommen, ich baue meinen eigene Transaction-Sub für Arme:
Sie könnte
- einen Array von Statements bekommen
- einen curval (s.o.) aller ID-Spalten aller Tabellen ermitteln
- LOOP
-   Mach_ein_statement()
-   On ERROR ermittle_alle_curvals_höher_als_gespeicherte_curvals
- END LOOP
Könnte das klappen ? Das Persistenz-Problem wäre zwar weiterhin gegeben (wenn die App in der Sub abstürzt) - aber zumindest die logische Transaktionskapselung wäre da...

Oder macht man das ganz anders ?

On ERROR - Detailfrage:
Angenommen, ich habe

sub machwas()
On Error goto Fehlerbehandlung
mach_irgendwas()
mach_was_anderes()
exit sub
Fehlerbehandlung:
   msgbox "ALARM!"
end sub

sub mach_irgendwas()
on Error goto Fehlerbehandlung
tu_was()
exit sub
Fehlerbehandlung:
recovere
end sub


Dann habe ich ja den Zustand, daß ich - wenn in mach_was_anderes ein Fehler auftritt, die ON ERROR-Routine noch auf die Fehlerbehandlung in mach_irgendwas zeigt...

On Error GOTO 0 zum Deaktivieren kann ich nicht sagen, denn dann würde die Fehlerbehandlung in machwas() deaktiviert...

Wie löst man "gestapelte" Error-Handler in VB/Access ???

Antworten PM Alle Chronologisch
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung