Standardwert wie vorige Zeile?

Hallo!

Weiß jemand zufällig, was ich in einem Formular (für eine Tabelle) als Standard-Wert eintragen muss, wenn dort immer als Standard erstmal das gleiche drinstehen soll wie in der vorigen Zeile? Ich könnte das sowohl für Text als auch für Zahl und Datum gebrauchen.

Falls jemand antwortet: Schon mal vielen Dank im Voraus!
Thea

Hallo Thea,

das gleiche drinstehen soll wie in der vorigen Zeile?

ähm, könntest du ZEILE definieren?

Ich gehe jetzt mal von einem Feld aus:

Beim Feld1.Ereignis=Fokusverlust den folgenden Code eingeben:

Me.Feld2 = Me.Feld1

das wars schon. D.h. beim Verlassen (Fokusverlust) wird der Inhalt von Feld1 in Feld2 geschrieben, unabhängig vom Feld - Typ.

Grüße aus Essen
Wolfgang

Hallo Thea,

das gleiche drinstehen soll wie in der vorigen Zeile?

ähm, könntest du ZEILE definieren?

Na ja, ich meine das Feld in der gleichen Spalte, aber eine Zeile drunter.

Ich gehe jetzt mal von einem Feld aus:

Beim Feld1.Ereignis=Fokusverlust den folgenden Code eingeben:

Me.Feld2 = Me.Feld1

Jetzt habe ich wieder das Problem, dass mein Office in Englisch ist. Feld kann man zwar leicht in Field übersetzen, aber Me. was könnte das in Englisch sein? Finde ich das irgendwo in diesem Expression Builder, wie der in Deutsch heißt, weiß ich jetz leider nicht. Da kann man sich z. B. Abkürzungen für Funktionen raussuchen.

Wenn ich Me.Field2 = Me.Field1 bei Fokusverlust (On Lost Focus) eingebe, und dann auf dieses entsprechende Feld gehe, dann bekomme ich die Fehlermeldung, dass es kein Makro namens Me. gebe. - Oder habe ich was falsch gemacht?

Viele Grüße
Thea

Hallo Thea,

Jetzt habe ich wieder das Problem, dass mein Office in
Englisch ist.

?? warum, sag das bitte dabei wenn du hier Fragen stellst, dann bekommst du die Antworten auch in „englisch“.

Feld kann man zwar leicht in Field übersetzen,
aber Me. was könnte das in Englisch sein?

das ist auch ME. in englisch

Finde ich das
irgendwo in diesem Expression Builder, wie der in Deutsch
heißt, weiß ich jetz leider nicht. Da kann man sich z. B.
Abkürzungen für Funktionen raussuchen.

ME. ist immer das gerade geöffnete Formular/Bericht.
Man spart sich FORM!MEINFORMULAR.Feld1 in dem man ME.Feld1 schreibt!

Wenn ich Me.Field2 = Me.Field1 bei Fokusverlust (On Lost
Focus) eingebe, und dann auf dieses entsprechende Feld gehe,
dann bekomme ich die Fehlermeldung, dass es kein Makro namens
Me. gebe. - Oder habe ich was falsch gemacht?

du hast also ein Feld1 und ein Feld2 als Fieldname auf deinem Formular?

Wie heißt denn der Fieldname deiner „Zeile1“?
Wie heißt denn der Fieldname deiner „Zeile2“?

Diese beiden Namen mußt du natürlich in meinem Beispiel mit deinen Fieldname ersetzen.

Grüße aus Essen
Wolfgang

Hallo

du hast also ein Feld1 und ein Feld2 als Fieldname auf deinem
Formular?

Hm, nein, das nicht gerade *peinlich*

Wie heißt denn der Fieldname deiner „Zeile1“?
Wie heißt denn der Fieldname deiner „Zeile2“?

Feldname, hm, ich glaube, ich bringe irgendwie immer die Begriffe durcheinander. Ich hab mehr ein optisches Gedächtnis, und vergesse andauernd die richtigen Bezeichnungen für die einzelnen Komponenten.

Ich erklär das mal von der Tabelle aus, die mittels des Formulars ausgefüllt wird, in der Datenblattansicht:

Da habe ich doch mehrere Spalten. Und mit jedem neuen Datensatz entsteht eine neue Zeile. Und in der Spalte „Datum“ und in der Spalte „Bezeichnung“ soll jeweils beim nächsten Datensatz als Standard das gleiche stehen wie im vorigen Datensatz, da es öfters vorkommt, dass da das gleiche reinkommt.

Bei „Datum“ habe ich jetzt noch als Standard „today()“, aber das ist nicht so optimal, aber besser als nichts.

Viele Grüße
Thea

Hallo Thea,

also so ganz einfach ist es nicht was du vorhast. 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 gehe mal davon aus, das du ein Datenfeld vom Typ AutoWert hast das ID heist.

Dann lege dir eine Abfrage an, die folgendermassen aussieht:

SELECT Max(MeineTabelle.ID) AS LastRecID FROM MeineTabelle;
ich nenne sie mal qryMaxRecID

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

GetLastRecValue = „“

set db = CurrentDb
set record = db.OpenRecordset = („Select * from qryMaxRecID“)
if record.EOF then exit function

set record = db.OpenRecordset("Select * from MeineTabelle 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.

Ich hoffe es sind nicht zu viele Tipfehler drin, da ich es gerade so runtergetip habe ohne auszuprobieren.

Hope this helps
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Thea,

und vergesse andauernd die richtigen Bezeichnungen für die
einzelnen Komponenten.

da kann man ja mal nachsehen :smile:
Wir hier haben auch keine Probleme mit den englischen Begriffen!

Ich erklär das mal von der Tabelle aus, die mittels des
Formulars ausgefüllt wird, in der Datenblattansicht:

du willst also die Daten eines vorherigen Datensatzes in den nächsten übernehmen. Siehe dazu Peters Posting!

Bei „Datum“ habe ich jetzt noch als Standard „today()“, aber
das ist nicht so optimal, aber besser als nichts.

alternativ kannst du auch ein Pulldown-Field für dieses Feld kreieren, das die Vorgaben aus der eigenen, gerade geöffneten Table holt.

Nochmal meine Frage: warum hast du ein englisches ACCESS?

Grüße aus Essen
Wolfgang

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

Hallo

und vergesse andauernd die richtigen Bezeichnungen für die
einzelnen Komponenten.

da kann man ja mal nachsehen :smile:

Och, findest du?

Wir hier haben auch keine Probleme mit den englischen
Begriffen!

Dann ist ja gut!

du willst also die Daten eines vorherigen Datensatzes in den
nächsten übernehmen.

Ach so nennt man das!

Siehe dazu Peters Posting!

Ja ich bin dabei! Das ist aber wesentlich aufwändiger als ich dachte!
Kommt das denn nicht ständig vor, dass einer die Daten des vorherigen Datensatzes als Standard übernehmen will, so dass man nicht immer alles neu schreiben muss, wenn sich nicht alles ändert?

Nochmal meine Frage: warum hast du ein englisches ACCESS?

Na jaa war halt drauf auf dem Pc als ich ihn gekauft habe …

Viele Grüße
Thea

Hallo,

Ganz schön kompliziert.

ne, nicht wirklich

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?

Ne nicht wirklich, dadurch springt der Datensatz auf den lezten Satz der Tabelle und du editierst(ueberschreibst) den letzten Satz ansatt einen neuen anzulegen.

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.

Soweit so gut.

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.

Gehe einfach hin und erstelle ein neue Abfrage, dann gehts du hin und schaltest die Ansicht der Abfrage auf SQL-Ansicht um… geht mit rechter Maustaste.

SELECT Max(MeineTabelle.ID) AS LastRecID FROM MeineTabelle; XXX
ich nenne sie mal qryMaxRecID

Dann kopierst du die beiden Zeilen in das leere Febster und aenderst die dem Namen des Feldes und der Tabelle-> Speichern->Namenvergeben-> das wars

Diesen Namen kann ich doch einfach übernehmen, oder nicht?

klar doch!

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

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.

!! Nicht in den Eigenschaften des Feldes sondern des Formulars!!

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)

Da must du einfach den Zeileumbruch rausnehmen, das sollte eigentlich in einer Zeile stehen.

Viele Grüße
Thea

Wenn du nicht klar kommst damit, kannst du mir auch deine MDB schicken und ich baue die die Funktion dann ein.

Tschau
Peter

Hallo Thea,

du willst also die Daten eines vorherigen Datensatzes in den
nächsten übernehmen.

Ach so nennt man das!

ja, so nennt man das

Ja ich bin dabei! Das ist aber wesentlich aufwändiger als ich
dachte!

so ist das nun mal

Kommt das denn nicht ständig vor, dass einer die Daten des
vorherigen Datensatzes als Standard übernehmen will, so dass
man nicht immer alles neu schreiben muss, wenn sich nicht
alles ändert?

nein, dafür gibt es Pulldownfelder, die diese Daten dann anbieten bzw. beinhalten.

Nochmal meine Frage: warum hast du ein englisches ACCESS?

Na jaa war halt drauf auf dem Pc als ich ihn gekauft habe …

mein Rat: besorge dir das deutsche Access.
so machts du dir das Leben nur unnötig schwer.

Grüße aus Essen
Wolfgang

Da die Antworten, die du bislang bekommen hast, doch etwas an der Sache vorbeigehen (jedenfalls, soweit ich es gelesen habe…) - schau dir mal FAQ 4.22 an: http://www.donkarl.com/FAQ/FAQ4Formulare.htm#4.22

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)