• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

auto increment bei Abbruch zuruecksetzen

Schnuffel

Neues Mitglied
Ich habe eine Anwendung mit MS Access geschrieben und die Tabellen in Mysql abgelegt. Wenn ich nun einen neuen Datensatz anlege, vergibt Mysql (wie vorgeschrieben) eine Auto_ID. Nun kommt es vor, daß der Vorgang abgebrochen wird, also kein neuer Datensatz angelegt wird. Wie kann ich dann die ID zurücksetzen, sodass es keine "Leeren Datensätze" gibt?

Kann mir jemand einen Tip geben?

Schnuffel
 
Werbung:
Wieso wird ein INSERT abgebrochen?
Wieso werden dadurch leere Datensätze erzeuge?
Beides kann mit MySQL eigentlich nicht passieren.
 
Wenn ich mit Access ein Formular, an dem eine Tabelle hängt öffne, wird der Auto Increment und das Feld TimeStamp ausgefüllt. Somit ist der Datensatz als solches angelegt. dann werden normalerweise die übrigen Tabellenfelder gefüllt. Wenn jedoch jemand den Vorgang gleich nach dem öffnen des Formulars (weshalb auch immer) abbricht, gibt es einen leeren Datensatz, in dem nur die ID und der Timestamp gesetzt ist.
Wenn das passiert, will ich den Auto increment wieder um eine Zahl zurücksetzen, damit es keine leeren ID`s gibt. Da es sich um eine Tabelle mit Rechnungen handelt, würde das Finanzamt bei einer Prüfung dumme Fragen stellen, da angenommen würde, daß unerlaubterweise Datensätze gelöscht worden sind.
Schnuffel

Schnuffel
 
Werbung:
Access hat nicht wirklich was mit Mysql zu tun :)
Da ich mich nicht so wirklich mit Access auskenne, kann ich nur vermutungen aufstellen.
In Mysql kann man mitteilen, dass Felder "NOT NULL", also nicht leer sein dürfen. Falls dem so ist wird ein Fehler geworfen und der Eintrag ist nicht gültig. Sollte das in Access auch so sein, musst du nur deine Pflichtdaten mit "NOT NULL" versehen (Oder wie es in Access auch immer heißen mag :))
Aber mich wundert es eh, dass immer noch mit Access gearbeitet wird. Denke mal zum testen von Datenbanken ist das mal ok. Aber Wäre ein Webserver mit Mysql und Apache/Tomcat nicht besser in dem Fall?
Dafür müsstet ihr dann auch natürlich jemanden haben, der sich in der Materie auskennt und programmieren kann. Ich weiss ja nicht wie die Lage bei euch auf der Firma ist :)
 
Ja Gilles, dass mit den "NOT NULL" Feldern ist eine gute Idee, das geht in Access genauso. im Übrigen sehe ich in der Oberläche mit Access keine Probleme, es läst sich selbst für einen "fortgeschrittenen Laien" wie mich leicht und verständlich programmieren. Die Datenbank ist jedoch unter Mysql besser aufgehoben als bei Access. Dazu ist Access einfach zu langsam und in der Datenmenge begrenzt. Ansonst arbeiten die beiden nicht schlecht zusammen. Ich werde das mit den "NOT NULL" Feldern mal ausprobieren und sehen, was Access für eine Fehlermeldung rauswirft. Vielleicht geht das ja.

Danke zunächst.

Schnuffel.
 
Werbung:
Sieht mit nach üblem gehacke aus! Ich würde lieber dafür sorgen, dass die Daten erst eingetragen werden, wenn alles OK ist.
 
das sehe ich so wie crash.

am besten lässt du den user erst alle eingaben machen, dann plausipruefung ob pflichtfelder gefüllt. die pflichtfelder in der db als not null / not nillable deklarieren und erst wenn der user das formular vollständig ausgefüllt hat in die db schreiben.

alles andere ist doch viel zu umständlich und führt zu einer inkonsistenten datenbasis. was passiert denn, wenn der user die aktion abbricht, id und timestamp bereits gespeichert sind und ein anderer user auch schon ein formular abgeschickt hat? dann bringt das anpassen des auto_increments nach dem löschen des leeren ds deine daten durcheinander.
 
Da ich mich nicht gut mit Access auskenne ist die frage zunächst, ob man dort Formulare mit Validierung programmieren kann. Wenn ja, wäre dieser Ansatz natürlich besser. Ansonsten wenn man direkt auf der Datenbank-Ebene was eingibt, gibt es keinen Weg außer mit NOT NULL. :-)
 
Werbung:
Hallo Chris Du schreibst:"am besten lässt du den user erst alle eingaben machen, dann plausipruefung ob pflichtfelder gefüllt. die pflichtfelder in der db als not null / not nillable deklarieren und erst wenn der user das formular vollständig ausgefüllt hat in die db schreiben"

Dazu ist zu sagen, dass, wenn ich im Frontend (und das ist numal Access) einen Datensatz beginne, wird bereits ein DS in Mysql angelegt. Dadurch das ich das Datum als Time-Stamp eintrage und einen Autowert eingebe, ist der Satz bereits angelegt. Felder, die ich mit "NotNull" belege, werden im Falle, dass keine Eingaben durch den Anwender erfolgen mit einer "0" belegt, womit der Vorgang als "NotNull" umgangen ist. Wie soll ich den Eintrag in der Tabelle bis zur Prüfung verzögern ? Bliebe nur ein "nachträgliches" Löschen des Datensatzes, dann ist jedoch der "Autowert" vergeben und die Reihenfolge unterbrochen.

Schnuffel
 
Hallo Gilles ich zitiere:
"Access hat nicht wirklich was mit Mysql zu tun :smile:
Da ich mich nicht so wirklich mit Access auskenne, kann ich nur vermutungen aufstellen."

Doch, Mysql eignet sich eigentlich hervorragend als Datenbank für das Backend, wärend sich Access als Frontend gut eignet. Die beiden arbeiten eigentlich gut miteinander.

"Aber mich wundert es eh, dass immer noch mit Access gearbeitet wird. Denke mal zum testen von Datenbanken ist das mal ok."

Welches alternative Frontend, das man ohne große Programmierkenntnisse nutzen kann, würdest Du vorschlagen? Die Daten müssen von Usern eingegeben werden können, die keine Ahnung von Datenbanken haben. Brauchen sie beim Bearbeiten von Formularen (Accessdatenbank) auch nicht.
Richtig mag sein, dass sich Access als Backend nur sehr eingeschränkt nutzen läßt. Wenn die Daten etwas umpfangreicher sind, spielt Access nicht mehr mit.

Schnuffel




 
Werbung:
Zurück
Oben