Hallo Forumler,
ich benutze einen Code, der mir im U-Formular "frm_Anschr" immer im letzten Datensatz ein Häckchen in die "Anschr_Guelt"-Checkbox setzt. Hier gut zu sehen: With Me!frm_Anschr.Form.Recordset.Clone
Do While Not .EOF
.Edit
!Anschr_Guelt = False
.Update
.MoveNext
Loop
.MoveLast
.Edit
!Anschr_Guelt = True
.Update
End With
Damit wird mir der Datensatz mit der gültigen Anschrift angezeigt.
Jetzt kommt erschwerend dazu: Ich habe in das U-Formular ein zusätzliches Kombifeld eingefügt mit dem Namen "Anschr_AnschrArt". Hier wähle ich aus, ob es sich um eine Lieferanschrift (ID=1) oder Rechnungsanschrift (ID=2) handelt. Um dieses zusätzliche Kriterium versehen sollen mir jetzt also in 2 Checkboxen der jeweils letzte Datensatz angezeigt werden. Also der jeweils letzte Datensatz mit dem Kriterium "Lieferanschrift" und "Rechnungsanschrift".
Viele Grüße
Rainer
Hallo,
Schleifen sind in einer Datenbank meist überflüssig, das erledigt eine Aktualisierungsabfrage kurz und schmerzlos.
Außerdem hat der von Dir verwendete Code noch den Haken, dass er nicht zuverlässig den letzten Datensatz erkennt. Die Daten einer Tabelle sind nicht zwangsläufig in der gleichen Reihenfolge bzw. richten sich nach der Sortierung des Primärschlüssels.
Es stellt sich also erst mal die Frage, wie definiert sich der letzte Datensatz, der mit der höchsten ID, der mit dem neuesten Datum ?
Wenn es so was gibt, ist das Markieren ohnehin überflüssig, weil sich der betreffende Datensatz jederzeit ermitteln lässt. Mit DLookup() z.B.
Hallo Klaus,
der letzte Datensatz definiert sich nach der höchsten ID.
Die Markierung benötige ich auf jeden Fall weiterhin, da ich es auf einen Blick sehen möchte.
Ich bin zwar bis jetzt "gut gefahren" mit meinem gepostetem Code, bin jedoch auch bereit, was neues auszuprobieren. Wie würde eine Alternative aussehen?
Danke und Gruß
Rainer
Hi,
ZitatAlso der jeweils letzte Datensatz mit dem Kriterium "Lieferanschrift" und "Rechnungsanschrift".
das heißt, du möchtest das Häkchen in zwei verschiedenen "letzten" Datensätzen sehen?
Ohne Schleife ginge das mit einer Aktualisierungsabfrage:
CurrentDB.Execute "Update tabelle Set Anschr_Guelt=(ID=DMax(""ID"",""tabelle"",""Anschr_AnschrArt="" & Anschr_AnschrArt))", dbFailOnError
Me.RefreshOder muss dabei auch noch eine evtl. vorhandene Filterung des Formulars berücksichtigt werden?
Hallo MaggieMay,
ich bekomme jetzt folgende Meldung: Laufzeitfehler '3075': Fehlt
Hier der von mir angepasste Code:CurrentDB.Execute "Update tbl_Anschr Set Anschr_Guelt=(Anschr_ID=DMax(""Anschr_ID"",""tbl_Anschr"",""Anschr_AnschrArt="" & Anschr_AnschrArt))", dbFailOnError
Me.Refresh
Ich hoffe, ich habe den Code richtig aufgebaut. Wieso erhalte ich dann die Fehlermeldung?
Viele Grüße
Rainer
Ich zeige dir mal an einem Minimal-Beispiel wie ich es verstanden habe und wie es funktioniert.
Vielleicht erkennst du ja den Unterschied zu deiner Lösung.
Hallo MaggieMay,
das ist genau das, was ich gesucht habe. Für den Fall der Fälle funktioniert Deine Lösung sogar mit mehr als 2 Kriterien! ;)
Übrigens kam vorhin die Fehlermeldung deshalb, weil versehentlich wegen der Herumprobiererei keine Daten (also 1 oder 2) in "Anschr_AnschrArt" waren.
Tausend Dank! :)
Viele Grüße
Rainer
Hallo,
Zitatweil versehentlich wegen der Herumprobiererei keine Daten (also 1 oder 2) in "Anschr_AnschrArt" waren
wenn das vorkommen kann, kannst du dich mit Einsatz der NZ-Funktion vor dem Fehler schützen:
CurrentDB.Execute "Update tbl_Anschr Set Anschr_Guelt=(Anschr_ID=DMax(""Anschr_ID"",""tbl_Anschr"",""Anschr_AnschrArt="" & NZ(Anschr_AnschrArt,0)))", dbFailOnError
Me.Refresh
Hallo MaggieMay,
Danke für den Tipp, werde ich mit einbauen.
Viele Grüße
Rainer
Hallo MaggieMay,
ich muss das Thema leider nochmal aktivieren. Mir ist vorhin beim Zurückblättern im H-Formular aufgefallen, dass nur im letzten Datensatz des H-Formulars Häckchen in den aktuellen Checkboxen des U-Formulars vorhanden sind. In allen vorhergehenden H-Formular-Datensätzen sind überhaupt keine Häckchen drin. Es werden also nur die "absolut" letzten Datensätze mit Häckchen versehen, ohne Bezug zum Hauptformular. Ich habe im 1. Beitrag versehentlich nichts von einem H-Formular erwähnt, nur von einem U-Formular.
Viele Grüße
Rainer
Dann liegt es jetzt wohl an dir, mal eine Beispiel-DB hochzuladen, an der man sich die reale Konstellation anschauen kann.
Hallo MaggieMay,
ich habe mal Deine Datei um das H-Formular "frm_Knd" und dessen Tabelle "tbl_Knd" erweitert und unten beigefügt.
Viele Grüße
Rainer
Hi,
wenn du den letzten Eintrag pro Kind markieren willst, musst du die Knd_ID noch mit in das Kriterium nehmen.
So sollte das klappen:
Private Sub Form_Current()
Dim strSQL As String
strSQL = "Update tbl_Anschr Set Anschr_Guelt=(Anschr_ID=" & _
"DMax(""Anschr_ID"",""tbl_Anschr""," & _
"""Anschr_AnschrArt="" & NZ(Anschr_AnschrArt,0) & "" AND Anschr_Knd_IDRef=" & Me.Parent.Knd_ID & """))"
CurrentDb.Execute strSQL, dbFailOnError
End Sub
Hallo MaggieMay,
soweit wäre das okay. Mir ist jedoch noch aufgefallen, dass die Häckchen nicht "fest" fixiert werden, wie das bei meinem Code im 1. Beitrag geschieht.
Bei Deinem Code werden die Häckchen im zuletzt angeschauten H-Formular-Datensatz gesetzt. Schaue ich einen anderen Datensatz an, "wandern" die Häckchen zu diesem hin. Habe versucht dies zu ändern, klappt aber nicht.
Viele Grüße
Rainer
ZitatSchaue ich einen anderen Datensatz an, "wandern" die Häckchen zu diesem hin.
Ich verstehe nicht was du damit meinst, wer oder was wandert wohin?
ZitatHabe versucht dies zu ändern, klappt aber nicht.
Was genau hast du wie versucht und mit welchem Ergebnis?
Hallo MaggieMay,
damit meine ich, dass die Häckchen nicht fixiert werden. Hier das Beispiel meiner gestern hochgeladenen Datenbank:
Wenn ich im H-Formular frm_Knd den Datensatz 1 auswähle uns wieder schliesse, sind die Anschr_Guelt-Häckchen hinter Anschr_Knd_IDRef 1 zu finden, die Häckchen hinter Anschr_Knd_IDRef 2 sind dann nicht mehr vorhanden.
Genauso verhält es sich umgekehrt:
Wenn ich im H-Formular frm_Knd den Datensatz 2 auswähle uns wieder schliesse, sind die Anschr_Guelt-Häckchen hinter Anschr_Knd_IDRef 2 zu finden, die Häckchen hinter Anschr_Knd_IDRef 1 sind dann nicht mehr vorhanden.
Es müssten aber unter Anschr_Guelt ALLE Häckchen (aktuell also 4 Stück) fest bestehen bleiben.
Man sieht es auch in der Tabelle tbl_Anschr. Es sind, unabhängig, wieviele H-Formular-Datensätze bestehen, nur 2 Anschr_Guelt-Häckchen drin.
Viele Grüße
Rainer
In die Tabelle solltest du eigentlich gar nicht schauen und im Formular wird es immer korrekt angezeigt. Wozu brauchst du die permanente Speicherung?
Ich dachte, es sollte nur eine optische Hilfe im Formular sein.
Hallo MaggieMay,
die benötige ich zusätzlich für eine Abfrage.
Die Häckchen müssen permanent sein.
Viele Grüße
Rainer
Dann musst du nicht die Kind-ID aus dem Formular nehmen, sondern ebenso wie bei der AnschrArt die aus der Tabelle.
strSQL = "Update tbl_Anschr Set Anschr_Guelt=(Anschr_ID=" & _
"DMax(""Anschr_ID"",""tbl_Anschr""," & _
"""Anschr_AnschrArt="" & NZ(Anschr_AnschrArt,0) & "" AND Anschr_Knd_IDRef="" & NZ(Anschr_Knd_IDRef,0) ))"
Hallo MaggieMay,
ich habe dem Anhang nochmal die Accessdatei beigefügt, in die ich Deinem letzten Code eingesetzt habe. Irgendetwas funktioniert nicht richtig, es wird jetzt überhaupt kein Häckchen gesetzt. Irgendwas mache ich falsch.
Viele Grüße
Rainer
Sorry, aber ich habe dir lediglich die geänderte Zusammensetzung des SQL-Strings gezeigt, der Rest der Prozedur muss natürlich bleiben wie er war.
Hallo MaggieMay,
leider werden wieder nur im letzten H-Formular-Datensatz die Häckchen gesetzt. Anbei der komplette Code:
Private Sub Form_Current()
CurrentDb.Execute "Update tbl_Anschr Set Anschr_Guelt=(Anschr_ID=DMax(""Anschr_ID"",""tbl_Anschr"",""Anschr_AnschrArt="" & NZ(Anschr_AnschrArt,0)))", dbFailOnError
strSQL = "Update tbl_Anschr Set Anschr_Guelt=(Anschr_ID=" & _
"DMax(""Anschr_ID"",""tbl_Anschr""," & _
"""Anschr_AnschrArt="" & NZ(Anschr_AnschrArt,0) & "" AND Anschr_Knd_IDRef="" & NZ(Anschr_Knd_IDRef,0)))"
End Sub
Viele Grüße
Rainer
Was denkst du denn wohl, was der von dir gezeigte Code macht und wozu die Variable und die Stringzuweisung zu gebrauchen sind? ::)
So sollte es schließlich klappen:
Private Sub Form_Current()
Dim strSQL As String
strSQL = "Update tbl_Anschr Set Anschr_Guelt=(Anschr_ID=" & _
"DMax(""Anschr_ID"",""tbl_Anschr""," & _
"""Anschr_AnschrArt="" & NZ(Anschr_AnschrArt,0) & "" AND Anschr_Knd_IDRef="" & NZ(Anschr_Knd_IDRef,0) ))"
CurrentDb.Execute strSQL, dbFailOnError
Me.Refresh
End Sub
Hallo MaggieMay,
jawohl, jetzt klappt es.
Da sieht man, es liegt noch ein weiter Weg vor mir ... ;)
Nochmals: VIELEN DANK!
Viele Grüße
Rainer
Hallo MaggieMay,
es ist kurios: Unter bestimmten Umständen verschwindet das Häkchen leider doch.
Das habe ich gemacht: Ich habe in meine gesamte Datenbank Deinen Code an alle entsprechenden Stellen eingebaut. Unter anderem auch in andere U-Formulare, die in mehreren H-Formularen vorkommen (das von mir gepostete Beispiel handelte von einem U-Formular, das nur in einem einzigen H-Formular vorkommt).
Das ist mir aufgefallen: Öffne ich nun ein solches H-Formular, das sich mit anderen H-Formularen ein U-Formular teilt, werden die Häkchen in eben dieses gesetzt und aus den anderen H-Formularen entfernt. Man sieht es deutlich, wenn man das U-Formular frm_Anschr öffnet. An der Position der Häkchen sieht man, welches H-Formular eben geöffnet wurde.
Exemplarisch habe ich die bereits gepostete Datenbank um 2 H-Formulare erweitert und beigefügt.
Viele Grüße
Rainer
Hallo Rainer,
nun verstehe ich bald gar nichts mehr. Was ist der Sinn dahinter, mehrere Formulare dieser Art nebeneinander zu öffnen und mehrere Kopien der tbl_Kind zu pflegen?
Ich fürchte, hier liegt ein entscheidender Denkfehler vor.
Hallo MaggieMay,
es ist nur so, dass manche U-Formulare in mehreren H-Formularen vorkommen. Die H-Formulare öffne ich nicht gleichzeitig. Aber wenn ich eins öffne, "verschwinden" die Häkchen aus den anderen H-Formularen.
Mein zuerst verwendeter Code (siehe auch 1. Beitrag dieses Themas)
With Me!frm_Anschr.Form.Recordset.Clone
Do While Not .EOF
.Edit
!Anschr_Guelt = False
.Update
.MoveNext
Loop
.MoveLast
.Edit
!Anschr_Guelt = True
.Update
End With
verursachte dieses "Verschwinden" der Häkchen nicht. Ich habe keine Ahnung, warum dies jetzt geschieht.
Viele Grüße
Rainer
Das hilft jetzt nicht wirklich, vermutlich sieht die Realität völlig anders aus als das hier vorgestellte, eher banale Beispiel.
Mehrere Unterformulare kommen mit derselben Datenbasis in mehreren Hauptformularen vor.
Wenn dies nicht gleichzeitig passieren würde, hättest du diesen Effekt ja nicht bemerkt. Wozu das ganze dienen soll, müsstest du erstmal erklären.
Wenn du meine diesbezüglichen Fragen nicht beantworten willst, war's das für mich.
ZitatMein zuerst verwendeter Code (siehe auch 1. Beitrag dieses Themas)
[...]verursachte dieses "Verschwinden" der Häkchen nicht
es galten zu dem Zeitpunkt ja auch noch ganz andere Voraussetzungen.
Hallo MaggieMay,
ich versuche es zu erklären: Ich habe H-Formulare und U-Formulare. Manche dieser U-Formulare (z.B. frm_Anschr) sind in mehreren H-Formularen vertreten. Das macht m.E. Sinn, da man z.B. für frm_Anschr (also Anschriften) somit nicht 3 gleich aufgebaute U-Formulare (natürlich mit verschiedenen Namen) nehmen muss.
Das U-Formular frm_Anschr ist, wie einige andere U-Formulare auch, mit einer Gültigkeits-Checkbox (hier: Anschr_Guelt) versehen. Diese Checkbox zeigt mir in jedem H-Formular-Datensatz die jeweils aktuellste Anschrift an. Somit habe ich auf einen Blick eine Historie. Außerdem werden über Abfragen an ganz anderen Stellen der Datenbank die aktuellsten Anschriftdaten entweder in Textfeldern als Info angezeigt oder in Kombifeldern zur Auswahl angezeigt. Das hat problemlos mit dem gestern Abend zuletzt gepostetem Code funktioniert. Im Anhang befindet sich so eine Beispieldatei mit diesem Code.
Dann habe ich am 03.03.2015 die entsprechenden U-Formulare um ein Kriterium erweitert, nämlich um das Kombifeld Anschr_AnschrArt, in dem ich "Lieferanschrift" oder "Rechnungsanschrift" (in geposteter Beispiel-DB als 1 oder 2 auswählbar) auswählen kann.
Und hier hat dann mein Problem angefangen, da ich jetzt einmal von der Lieferanschrift und von der Rechnungsanschrift die jeweils aktuellsten Datensätze in der Combibox angezeigt haben wollte.
Dann habe ich mich am 04.03.2015 an dieses Forum gewandt. Deine gepostete Lösung hat auch super funktioniert, nur ist mir zunächst nicht aufgefallen, dass dies für die Kombination 1 U-Formular + 1 H-Formular gilt. Mir ist erst aufgefallen, dass Dein Code für die Kombination 1 U-Formular + mehrere H-Formulare nicht funktioniert, als ich in einem Kombifeld an anderer Stelle der DB ein leeres Feld hatte. Wenn ich das gewusst hätte, hätte ich von Anfang an eine ausführlichere Datenbank gepostet (wie ich dies leider erst gestern Abend getan habe), die genau das Beispiel 1 U-Formular und mehrere H-Formulare zeigt.
Wie gesagt, im Anhang befindet sich eine Beispiel-DB mit altem Code (also ohne Kriterien), der aber die Häkchen korrekt setzt. Es wäre toll, wenn das Dein Code unter Berücksichtigung der genannten Kriterien hinbekommen könnte.
Viele Grüße
Rainer
Hallo MaggieMay,
hattest Du schon Gelegenheit einen Blick auf meinen letzten Beitrag zu werfen?
Ich hoffe, ich konnte Dir damit weiterhelfen. Bitte melde Dich bei Unklarhaiten - Danke.
Viele Grüße
Rainer
Hallo Rainer,
es tut mir leid, aber ich sehe den Sinn der erweiterten Anschriften-Tabelle nicht ein. Wozu die separaten Spalten mit den Referenz-Keys? Wieviele sollen das mal werden?
Das sieht nicht nach einem funktionierenden Tabellenkonzept aus. Ebenso machen die gleichartig aufgebauten Tabellen Bspl1, Bspl2 und Knd keinen Sinn, das gehört alles in eine Tabelle.
ZitatDie H-Formulare öffne ich nicht gleichzeitig. Aber wenn ich eins öffne, "verschwinden" die Häkchen aus den anderen H-Formularen.
Wie gesagt, wenn du die Formulare nicht gleichzeitig öffnest, wieso stört es dich, dass die Häkchen im anderen Formular nicht vorhanden
wären, wenn du es gleichzeitig öffnen
würdest?
Die optische Hervorhebung durch die Markierung ist doch nur eine Momentaufnahme.
Hallo MaggieMay,
ZitatWozu die separaten Spalten mit den Referenz-Keys?
Die IDRef's beziehen sich auf die anderen H-Formulare, siehe auch Beziehungen.
ZitatWieviele sollen das mal werden?
Ist unterschiedlich. Manche U-Formulare beziehen sich auf nur ein H-Formular (in dem Fall wäre Deine zuletzt gepostete Lösung okay). Im von mir geposteten Beispielfall sind es 3 IDRef's, also für 3 H-Formulare.
ZitatDas sieht nicht nach einem funktionierenden Tabellenkonzept aus. Ebenso machen die gleichartig aufgebauten Tabellen Bspl1, Bspl2 und Knd keinen Sinn, das gehört alles in eine Tabelle.
Doch, es funktioniert. Ich habe die gepostete Beispiel-DB nur vereinfacht dargestellt, in Wirklichkeit sind die Tabellen und Formulare umfangreicher und verschieden aufgebaut. Aber die o.g. IDRef-Beziehungen haben sie gemein.
ZitatWie gesagt, wenn du die Formulare nicht gleichzeitig öffnest, wieso stört es dich, dass die Häkchen im anderen Formular nicht vorhanden wären, wenn du es gleichzeitig öffnen würdest?
Ich öffne in der Regel das H-Formular, in das ich einen neuen Datensatz einpflegen oder in dem ich nach einem bestimmten Datensatz suchen möchte. Unter Umständen kann es aber passieren, dass ein anderes H-Formulare dabei geöffnet bleibt.
ZitatDie optische Hervorhebung durch die Markierung ist doch nur eine Momentaufnahme.
So kann man es sehen. Verschwinden die Häkchen, fehlen die entsprechenden Daten in Abfragen an anderer Stelle der DB, die sich auf diese gesetzten Häkchen beziehen. Deshalb benötige ich die jeweils gültigen Häkchen unter allen 3 IDRef's. Die Häkchen dürfen also nicht verschwinden.
Viele Grüße
Rainer
Zitat von: Rainer 1984 am März 24, 2015, 21:41:43Mein zuerst verwendeter Code (siehe auch 1. Beitrag dieses Themas) [...] verursachte dieses "Verschwinden" der Häkchen nicht. Ich habe keine Ahnung, warum dies jetzt geschieht.
Das liegt daran, dass der erste Code in einer Schleife über den RecordsetClone läuft, also nur die gefilterten Datensätze berücksichtigt, während die neuere Version mit einer Abfrage über die gesamte Tabelle geht.
Hier brauchst du doch nur die hinzugefügten Spalten ebenfalls noch zu berücksichtigen, um die Häkchen pro Ref_ID zu setzen:
Update tbl_Anschr
Set Anschr_Guelt=(Anschr_ID=
DMax("Anschr_ID","tbl_Anschr","Anschr_AnschrArt=" & NZ(Anschr_AnschrArt,0) & " AND Anschr_Knd_IDRef=" & NZ(Anschr_Knd_IDRef,0) ))
Where Anschr_Knd_IDRef Is Not NullWie unflexibel das ist siehst du daran, dass du für jede Spalte eine separate Abfrage brauchst.
Hallo MaggieMay,
habe den neuen Code in der gesamten Datenbank eingebaut und getestet. Alles funktioniert. Damit dürften "Nachzügler" nicht mehr auftreten.
Nochmals tausend Dank für Deine Hilfe - und Geduld!
Viele Grüße
Rainer