Supportnet / Forum / Datenbanken
bei neuem Datensatz die Inhalte aus vorigem Datensatz als Standartwerte verwenden
Frage
Hallo,
wie kriege ich folgendes Problem gelößt?
Ich habe eine Tabelle mit 10 Spalten (Spalte1, Spalte2,...).
Im ersten Datensatz stehen in den Spalten die Werte 100, 200, 300, ...
Nun möchte ich, dass ich bei einem neuen 2. Datensatz diese Werte aus dem vorigen 1. Datensatz schon drin stehen habe. Diese Werte will ich bei Bedarf aber auch ändern können.
Beim nächsten (3.) neuen Datensatz sollen wieder die Werte (auch die geänderten) aus dem letzen (2.) Datensatz übernommen werden.
Dazu gibt es ja bei den Feldeigenschaften der Tabelle eine Angabe "Standartwert".
Kann ich diese Option verwenden und was muss ich reinschreiben?
Vielen Dank, Gruß Sven.
Antwort 1 von Antwort 1
ohne Formular wird das wahrscheinlich nicht gehen
Antwort 2 von oliverV
Hallo Sven,
schau mal unter den FAQ 4.22.
Natürlich im Formular, aber davon gehe ich mal aus, das du das sowieso machen wolltest.
Gruß
Oliver
schau mal unter den FAQ 4.22.
Natürlich im Formular, aber davon gehe ich mal aus, das du das sowieso machen wolltest.
Gruß
Oliver
Antwort 3 von sv_t
Es funktioniert nicht.
Habe unter dem Link (FAQ 4.22.) mal nachgeschaut und folgenden Befehl gefunden:
Diesen Befehl sollte ich in die Eigenschaften des Formularfeldes eingeben in der Zeile "nach aktualisieren" (für mein Formular würde auch gehen: "beim verlassen").
Wenn ich nun im Formular einen Wert eingebe und das Feld verlasse kommt die Meldung:
Kann das Makro 'Me![Feldname]' nicht finden.
Dachte ich mir ich muss ein Makro schreiben und habe die Befehlszeile als Code eingegeben.
Klappt aber auch nicht, hier kommt eine Meldung, dass der Code Me! nicht erkannt oder verfügbar ist.
Was mache ich da falsch?
Was bedeutet diese Befehlszeile eigentlich?
Da ich im Formular 32 Felder habe, bei denen ich diesen > Standartwert gleich Wert aus vorigem Datensatz < haben möchte. Muss ich den Befehl jetzt bei jedem Feld eingeben oder ist da ein Makro bzw. eine Ereignisprozedur besser? Kann mir jemand ein Beispiel für 2-3 Felder im SQL zeigen?
Vielen Dank, Gruß Sven.
Habe unter dem Link (FAQ 4.22.) mal nachgeschaut und folgenden Befehl gefunden:
Me![Feldname].DefaultValue=Me![Feldname]
Diesen Befehl sollte ich in die Eigenschaften des Formularfeldes eingeben in der Zeile "nach aktualisieren" (für mein Formular würde auch gehen: "beim verlassen").
Wenn ich nun im Formular einen Wert eingebe und das Feld verlasse kommt die Meldung:
Kann das Makro 'Me![Feldname]' nicht finden.
Dachte ich mir ich muss ein Makro schreiben und habe die Befehlszeile als Code eingegeben.
Klappt aber auch nicht, hier kommt eine Meldung, dass der Code Me! nicht erkannt oder verfügbar ist.
Was mache ich da falsch?
Was bedeutet diese Befehlszeile eigentlich?
Da ich im Formular 32 Felder habe, bei denen ich diesen > Standartwert gleich Wert aus vorigem Datensatz < haben möchte. Muss ich den Befehl jetzt bei jedem Feld eingeben oder ist da ein Makro bzw. eine Ereignisprozedur besser? Kann mir jemand ein Beispiel für 2-3 Felder im SQL zeigen?
Vielen Dank, Gruß Sven.
Antwort 4 von mapet
Hallo Sven
Du musst bei den Eigenschaften in die Zeile nach aktualisieren klicken und danach auf die drei Punkte die dann erscheinen.
Danach auf Code Generator und dann befindest Du Dich im Code Bereich, dort trägst Du den Befehl ein
mapet
Du musst bei den Eigenschaften in die Zeile nach aktualisieren klicken und danach auf die drei Punkte die dann erscheinen.
Danach auf Code Generator und dann befindest Du Dich im Code Bereich, dort trägst Du den Befehl ein
mapet
Antwort 5 von El Bobbele
Hallo Sven!
"Feldname" ist in dem Codebeispiel ein Platzhalter für die tatsächlichen Felder deines Formulars. Du musst also "Feldname" durch die Namen deiner Felder im Formular ersetzen. Bei 32 Feldern hast du da einiges zu tun. Das Ereignis "Nach Aktualisierung" ist schon das richtige, bei dem solltest du bleiben.
Bei 32 Feldern ist es eigentlich naheliegend, dass sie per Schleifendurchlauf abgeklappert werden, das spart viel Code. Zum Erkennen der betroffenen Felder ist die Marke-Eigenschaft der Steuerelemente sehr nützlich. Sie erfüllt aus der Sicht von Access keine Funktion und kann vom Entwickler frei verwendet werden. Trage dort den Text "StandardKopieren" ein (ohne Anführungszeichen). Anschliessend kopierst du den folgenden Code in das "Nach Aktualisierung"-Ereignis:
Nach der Aktualisierung werden alle betroffenen Steuerelemente bearbeitet, egal welche und wieviele es sind.
Gruss
El Bobbele
"Feldname" ist in dem Codebeispiel ein Platzhalter für die tatsächlichen Felder deines Formulars. Du musst also "Feldname" durch die Namen deiner Felder im Formular ersetzen. Bei 32 Feldern hast du da einiges zu tun. Das Ereignis "Nach Aktualisierung" ist schon das richtige, bei dem solltest du bleiben.
Bei 32 Feldern ist es eigentlich naheliegend, dass sie per Schleifendurchlauf abgeklappert werden, das spart viel Code. Zum Erkennen der betroffenen Felder ist die Marke-Eigenschaft der Steuerelemente sehr nützlich. Sie erfüllt aus der Sicht von Access keine Funktion und kann vom Entwickler frei verwendet werden. Trage dort den Text "StandardKopieren" ein (ohne Anführungszeichen). Anschliessend kopierst du den folgenden Code in das "Nach Aktualisierung"-Ereignis:
Dim ctl As Control
'Alle Steuerelemente des Formulars durchlaufen
For Each ctl in Me.Controls
With ctl
'Enthält Marke den Text "StandardKopieren"?
If Instr(.Tag, "StandardKopieren") > 0 Then
'Wenn ja, den aktuellen Wert als Standard festlegen
.DefaultValue = .Value
End If
End With
NextNach der Aktualisierung werden alle betroffenen Steuerelemente bearbeitet, egal welche und wieviele es sind.
Gruss
El Bobbele
Antwort 6 von sv_t
Nun habe ich aber in der Praxis noch folgendes Problem:
die 32 Felder sind die letzten, die ich im Formular behandle. bzw. 2 der 32 Felder.
In welches Feld gebe ich die Befehlszeilen ein?
Danach drücke ich nur noch die Button "speichern" und "beenden".
Kann ich das auch auf den "SPEICHERN" - BUTTON legen.
Wie müsste ich das machen bzw. geht hier auch "nach aktualisieren" ?
Gruß Sven
die 32 Felder sind die letzten, die ich im Formular behandle. bzw. 2 der 32 Felder.
In welches Feld gebe ich die Befehlszeilen ein?
Danach drücke ich nur noch die Button "speichern" und "beenden".
Kann ich das auch auf den "SPEICHERN" - BUTTON legen.
Wie müsste ich das machen bzw. geht hier auch "nach aktualisieren" ?
Gruß Sven
Antwort 7 von sv_t
Und es klappt doch.
Mit der Me!... Befehlszeile im entsprechenden Formularfeld funktioniert es, wenn ich diese in den CodeGenerator eingebe.
Das mit dem StandardKopieren hat irgendwie nicht geklappt.
Nun ist aber noch folgendes unklar:
Wenn ich das Formular öffne, kommt beim ersten Datensatz kein Eintrag aus dem letzten Datensatz.
Erst wenn ich Daten eingegeben habe, den Datensatz speicher und das Formular einen neuen Datensatz erstellt, kommen die aktualisierten Standardwerte.
Kann man da auch noch was machen?
Vielleicht dass die Abfrage nach den Standardwerten gleich nach dem Öffnen des Formulares geschieht?
Also so etwas wie eine Startprozedur:
1. öffne Formular
2. trage Standardwerte ein
3. gebe Datensatz zur Eingabe frei
Gruß Sven
Mit der Me!... Befehlszeile im entsprechenden Formularfeld funktioniert es, wenn ich diese in den CodeGenerator eingebe.
Das mit dem StandardKopieren hat irgendwie nicht geklappt.
Nun ist aber noch folgendes unklar:
Wenn ich das Formular öffne, kommt beim ersten Datensatz kein Eintrag aus dem letzten Datensatz.
Erst wenn ich Daten eingegeben habe, den Datensatz speicher und das Formular einen neuen Datensatz erstellt, kommen die aktualisierten Standardwerte.
Kann man da auch noch was machen?
Vielleicht dass die Abfrage nach den Standardwerten gleich nach dem Öffnen des Formulares geschieht?
Also so etwas wie eine Startprozedur:
1. öffne Formular
2. trage Standardwerte ein
3. gebe Datensatz zur Eingabe frei
Gruß Sven

