PDA

Vollständige Version anzeigen : Datensatz soll sofort gespeichert wenn Formular geöffnet wird


Ise
22.03.2006, 17:34
Hallo,

ich habe mal wieder ein kleines Problem mit meiner Datenbank.

Und zwar geht es um ein Formular in dem Daten für einen Auftrag eingeben werden. Die Daten sind an einer Auswahlabfrage gebunden.Viele Felder werden schon per Standartwert ausgefüllt. So wäre der Datensatz schon fast komplett. Auch wird eine Laufende Nummer vergeben die nur einmal vorhanden sein darf.
Und genau hier liegt das Problem:

Es arbeiten mehrer Benutzer damit und der Datensatz sollte gleich gespeichert werden wenn das Formular geöffnet wird. Dies tut er aber nicht. Er speichert den Datensatz erst wenn man irgendwo Daten eingeben hat. Selbst über das normale Menü geht es nicht den Datensatz zu speichern ohne das etwas eingegeben wurde. Wenn aber nun mehrere Benutzer das Formular öffnen, aber noch keine Daten eingeben, und dann später aber doch tun, kommt es zur Fehlermeldung, da dann die Laufende Nummer schon woanders vergeben ist.

Ich habe bereits bei vielen Ereignissen schon versucht den Datensatz per vba mit

DoCmd.RunCommand acCmdSaveRecord

dazu zu bringen den Datensatz zu speichern, aber wie gesagt, ohne irgend eine Eingabe will er den Datensatz nicht Speichern, obwohl er ja die Standardwerte zum Speichern schon hätte.

Weiß jemand was ich da falsch machen?

uwek
22.03.2006, 18:00
Hallo,

With Me
If .NewRecord Then
.FeldMitStandardWert = .FeldMitStandardWert.DefaultValue
'DoCmd.RunCommand acCmdSaveRecord
End If
End With

Ise
22.03.2006, 18:45
Hallo,

das hört sich zwar schon gut an, aber den Befehl "With" in deinem Code ist aber nicht in im VBA Editor zu finden? Muss ich dafür noch was aktivieren?

uwek
22.03.2006, 19:09
Hallo,

setze im Vba Editor den Coursor auf With und drücke F1

Ise
22.03.2006, 19:23
Hallo,

habe jetzt folgenden Code beim Öffnen das Formulars eingesetzt:

With Me If .NewRecord Then .Laufende Nummer = .Laufende Nummer.DefaultValue 'DoCmd.RunCommand acCmdSaveRecord End If End

Aber bei IF kommt die Fehlermeldung "Erwartet: Anweisungsende"

Nouba
22.03.2006, 19:35
Stellt man den Autowert auf Zufallszahl, sind die Chancen groß, dass dieser Effekt nie beobachtet werden wird.

Wenn man jedoch einen Datensatz mit diesen minimalen Attributen, wie oben vorgeschlagen wurde, speichern darfst, hat man sich bei Unachtsamkeit schnell irgendwelche Anomalien im Datenbestand eingehandelt.

Für ein ähnlich gelagertes Problem, das Mehrbenutzer-tauglich sein soll, gibt es ein kleines Beispiel von Neil Squires - Semaphore.mdb (http://www.rogersaccesslibrary.com/Otherdownload.asp?SampleName='Semaphore.mdb').

Ise
22.03.2006, 19:42
Hallo Nouba,

der Wert der Laufende Nummer ist kein Autowert.Zufallswert geht da nicht weil es ja eine fortlaufende Nummer ist. Die laufende Nummer wird immer aus dem letzten Datensatz+1 ermittelt. Und wie gesagt, wenn man vorher irgendwo nur eine Engabe macht Speichert er es und es gibt keine weiteren Probleme. Nur soll der Datensatz gleich beim Öffnen gespeichert werden.

Den Ansatz Uwek finde ich ganz gut. Nur kenne ich mich mit vba nicht sehr gut aus und komme mit dem Code nicht zurecht

Ise
23.03.2006, 11:15
Hallo,

ich habe es jetzt hinbekommen. Der Code von Uwek war richtig, nur hat es mein Browser falsch angezeigt wegen einem Scriptblocker. ich musste nur den Code etwas abändern, da sich der Default Wert außer einer Formel berechnet und der mit dem oberen Code die Formel speichert und nicht den errechneten Default Wert.


With Me
If .NewRecord Then
.FeldMitStandardWert = .FeldMitStandardWert
DoCmd.RunCommand acCmdSaveRecord
End If
End With