Hallo
Ganz schön kompliziert.
also so ganz einfach ist es nicht was du vorhast.
Ich dachte wirklich, sowas wäre in den Standard-Einstellungen. Sowas wird doch ganz häufig gebraucht, dachte ich.
Da man in
dem DefaultValue der Tabelle nur „eingebaute funktionen“
anwenden kann, koenntest du es nur ueber einen Umweg im
Formular realisieren.
Im Formular erzeuge einen Event-Handler fuer „BeforeInsert“ (
ich glaube im Englischen heist das so), dann schreibe eine
VBA-Routine die dir den lezten Datensatz anzieht und
uebertrage den entsprechenden Wert in dein Formularfeld. Dies
setzt vorraus, das du einen Anhaltspunkt in deiner Tabelle
hast, was der letzte Daensatz ist.
Ich habe jetzt das entsprechende Feld (Feldname: Gegenstand) in der Entwurfsansicht re Maustaste angeklickt und die Eigenschaften ausgewählt. Dort habe ich „Event“ ausgewählt, und da in der ersten Zeile „Before Update“ (BeforeInsert habe ich nicht gefunden) ein Makro (Makro1) reingemacht, da „GoToRecord“ ausgewählt und dann „last“. War das bis hierhin wohl richtig?
Ich gehe mal davon aus, das du ein Datenfeld vom Typ AutoWert
hast das ID heist.
Ja, habe ich, zählt von 1 bis unendlich.
Dann lege dir eine Abfrage an, die folgendermassen aussieht:
Abfrage, hä? Das ist doch ein Code, was da steht. Ich weiß nicht, wo der jetzt reinmuss. Ich kann eigentlich kein VB, ich ahne nur langsam, worum es dabei geht.
SELECT Max(MeineTabelle.ID) AS LastRecID FROM MeineTabelle; XXX
ich nenne sie mal qryMaxRecID
Diesen Namen kann ich doch einfach übernehmen, oder nicht?
Private Sub Form_BeforeInsert(Cancel As Integer)
Me!MeinFormularFeld = GetLastRecValue()
End Sub
Private Function GetLastRecValue() as String
Dim db as Database ’ vorrausgesetzt DAO zugriffe
Dim record as Recordset ’ dito
Ich weiß leider auch nicht, was DAO Zugriffe sind!
GetLastRecValue = „“
set db = CurrentDb
set record = db.OpenRecordset = („Select * from qryMaxRecID“)
if record.EOF then exit function
set record = db.OpenRecordset("Select * from MeineTabelle XXX
where ID = " & record!LastRecID
if not record.EOF then
GetLastRecValue = record!MeinDatenbankfeld
end if
End Function
Damit erreichst du, das bei einem neuen Datensatz, sobald in
irgendeinem Feld aud nur ein Tastenanschlag passiert diese
Funktion aufgerufen wird.
Das wäre prima. Ich weiß nur wirklich nicht, wo ich das reintun muss. Bei Eigenschaften (des Feldes) unter Data kann ich ein Makro oder eine Event Procedure aussuchen. Wenn ich mir die Event Procedure raussuche, dann öffnet sich so ein Fenster, in das ich einen Code reinschreiben könnte. Deinen Code habe ich mal reinkopiert (Natürlich das Deutsche rausgenommen und meine Namen eingesetzt). Zwei Zeilen waren rot, da mache ich mal ein Kreuz dran (siehe oben)
Viele Grüße
Thea