Ich arbeite mit Access 97 und habe ein Formular zur Eingabe von Rechnungsdaten; bestehend aus einem Hauptformular ,,Rechnung" mit Kopfdaten sowie einem Unterformular ,,Position" als Endlosformular mit einzeiligen Datensätzen, die Artikeldaten enthalten.
Auf der HF-Ebene ist eine Befehlsschaltfläche, die eine Berichtsvorschau (zum Ausdruck einer Rechnung) öffnet.
Ich habe nun folgendes Problem: Angenommen, ich habe eine aus drei Positionen (3 Artikeln) bestehende Rechnung. Auf dem Bildschirm zeigen sich im UF also drei je einzeilige, mit Daten gefüllte Datensätze sowie eine vierte, leere Zeile für einen neuen Datensatz. Befindet sich nun der Cursor in der dritten Zeile und ich öffne aus dieser Situation heraus per Schaltfläche die Berichtsvorschau und schließe diese wieder, so springt das Unterformular mittlerweile ,,ans Ende"; d.h. die beiden ersten Datensätze verschwinden am Schirm, und es ist nur noch die dritte Zeile sowie die letzte, leere Zeile zu sehen. Wie kann ich das unterbinden?
Hinweise:
1. befindet sich der Cursor vor Klicken der Schaltfläche in der ersten UF-Zeile, tritt das Problem nicht auf.
2. Das UF hat eine ausreichende Höhe – Platzmangel ist also nicht die Ursache.
3. das Entfernen oder Hinzufügen von Bildlaufleisten im UF ändert nichts an der Sache.
4. auch verschiedene Einstellungen der Eigenschaft ,,Zyklus" haben keinen Einfluß auf das Problem.
Kann jemand helfen? Vielen Dank im Voraus!
Joe
Was heißt denn genau, "sie verschwinden" ?
Sind sie nicht im sichtbaren Bereich und Du kannst sie durch Scrollbars oder durch Pfeiltasten wieder ins Bild holen, oder sind sie tatsächlich nicht mehr im UFO vorhanden ?
Letzteres würde auf ein größeres Problem hinweisen.
Sie "verschwinden" lediglich aus dem sichtbaren Bereich - ich kann sie durch scrollen bzw. Pfeiltasten (Bild auf/ab auf der Tastatur) wieder herholen. Das sonderbare dabei ist nur, dass
a) auf dem Bildschirm bzw. im UF genügend Platz für das Anzeigen aller Datensätze wäre, es also keinen ersichtlichen Grund für das "Verschwinden" gibt und
b) (aus diesem Grund?) der Scrollbalken des UF gar nicht aktiv ist, sondern lediglich die Pfeiltasten unter und über dem Balken. Ein Phänomen, dass mir so noch nie begegnet ist.
Gruss Joe
Moin Joe,
vielleicht hilft ein Vorgehen in der Art:
Private Sub Form_Current()
If Me.RecordsetClone.RecordCount = Me.CurrentRecord Then ' aktueller Datensatz entspricht dem letzten Datensatz
Me.OnCurrent = ""
On Error Resume next
' gehe 3 Datensätze zurück
DoCmd.GoToRecord , , acPrevious, 3 ' damit auch die Datensätze vor dem letzten in der Liste angezeigt werden
On Error Goto 0
DoCmd.GoToRecord , , acLast
Me.OnCurrent = "[Event Procedure]"
End If
End Sub
Statt dem Kurieren der Symptome wäre es aber besser, die Ursache zu ergründen. Dafür liegen aber zu wenig Infos vor.
Harald
Hm,
da es ja nicht immer drei sein müssen, wäre ein acFirst und danach acLast besser, sonst hängt es bei was weis ich, vielleicht 25 DS in der Ansicht wieder.......
Aber korrekt, der Fehler sollte in der Wurzel bekämpft werden.
Hi,
Zitat von: 69bruno am Oktober 23, 2012, 07:24:13
wäre ein acFirst und danach acLast besser
Unter access2003 bewirkt ein acfirst und danach acLast, dass nur der letzte Datensatz angezeigt wird. Damit ist also nichts erreicht.
Unter access2007 konnte ich auf die Rückwärtsbewegung (egal ob -3 oder acFirst) verzichten.
Zitat
, sonst hängt es bei was weis ich, vielleicht 25 DS in der Ansicht wieder.......
Das Aufhängen bei einer größeren Anzahl betrachte ich als unwahrscheinlich.
Ich rechne eher bei einer Anzahl, die kleiner ist als 3 (war die vom Diskussionsauslöser genannte Grenze) mit Unpäßlichkeiten (deswegen das on error).
Mein Vorschlag soll als Anregung und nicht als die finale Lösung verstanden werden.
Harald
War ja auch mit einem "vielleicht" versehen, denn ich weiß ja nicht, ob die drei(!) Datensätze wirklich die Grenze ist, oder ob das nicht auch woanders auftaucht.
ZitatMein Vorschlag soll als Anregung und nicht als die finale Lösung verstanden werden.
Das das nicht die finale Lösung ist, sehe ich auch so, ich habe ja auch vorgeschlagen, die Wurzel anzupacken. Dazu muss halt das Problem genauer analysiert werden.
Da ich kein access97 zum Testen habe, kann ich eh nur raten.....
Na hoffen wir mal auf feedback, was geholfen hat..... :)
Was mich noch interessieren würde, ist, ob die Berichtsvorschau standardmäßig aufgerufen wird, oder ob der Code für die Befehlsschaltfläche individualisiert wurde.
Hallo ihr beiden,
erst mal sorry für mein langes Schweigen - war zwei Wochen in einem unvorhergesehenen Projekt "abgetaucht".
Und vielen Dank: Eure Hinweise haben beide zumindest ein Stück geholfen: Habe den von Harald vorgeschlagenen Code eingesetzt und dabei das "acPrevious, 3" durch ein "acFirst" ersetzt (mit dem "acPrevious, 3" hatte es nicht funktioniert) - damit ist immerhin das beschriebene Phänomen beseitigt! Allerdings zickt das UFO jetzt dafür an anderer Stelle: Angenommen ich habe eine Rechnung mit 10 Datensätzen. Im UFO ist Platz für die Anzeige von 7 Datensätzen. Wenn ich jetzt mit dem Pfeil unter dem Scrollbalken solange nach unten klicke, bis der letzte Datensatz erscheint und dann in ein (beliebiges) Feld dieses letzten DS klicke, passiert wieder das zu Beginn beschriebene: alle Zeilen außer dem letzten Datensatz und der *-Zeile für einen neuen Datensatz verschwinden aus dem sichtbaren Bereich. Wobei ich nicht verstehe, was das mit dem OnCurrent-Code zu tun haben soll.
Thema Symptomkur: Es würde mich schon interessieren, was die eigentliche Ursache dieser Geschichten ist, komme beim überlegen aber auf keinen grünen Zweig. Welche Infos wären noch zu geben? Brunos Frage verstehe ich nicht ganz ("Code individualisiert"): Die Schaltfläche wird optional bei Bedarf angeklickt, und sie hat den Code:
Private Sub Befehl41_Click()
On Error GoTo Err_Befehl41_Click
Refresh
Dim stDocName As String
DoCmd.OpenReport "Rechnung_Druck", acPreview, , "RechnungsNr=" & Me!RechnungsNr
Exit_Befehl41_Click:
Exit Sub
Err_Befehl41_Click:
MsgBox Err.Description
Resume Exit_Befehl41_Click
End Sub
Viele Grüße, Joe
PS: Habe den Beitrag versehentlich im "Tabellen-Forum" angelegt - kann man ihn nachträglich in das "Formular-Forum" verschieben und wenn ja wie?
Dann setz doch mal mit Hochkommas den Code unter der Befehlsschaltfläche außer Kraft und test Schritt für Schritt durch Entfernung der jeweiligen Hochkommas, bei welcher Codezeile das Phänomen auftritt. Ich tippe mal völlig ins Blaue auf das "refresh"......
Und dann würde ich den Versuch starten, das Formular im Code richtig zu schließen und nach Beendigung des Berichtes neu zu laden mit dem Datensatz, aus dem Du den Bericht aufgerufen hast.
Je nach Verhalten kämen wir dann dem Auslöser vielleicht näher......
Hallo,
ich ordne dieses Verhalten mal unter der Kategorie:
"It's not a bug, it's a feature"
ein....
Das Endlos- (Unter-) Form verhält sich in manchen (und nicht nur in dieser) Situationen eben nach MS-Logik.. ;)
Aber wozu brauchst Du das "Refresh"?
Wenn auch evtl. Änderungen im Form sofort im Bericht berücksichtigt werden sollen, könnte "Runcommand accmdSaveRecord" die bessere Lösung sein. Bei A97 muss allerdings diese dort nicht verfügbare Methode über die DoMenuitem-Methode nachgebildet werden .
Vermutlich: DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Vielleicht funktioniert auch (falls es "Dirty" in A97 schon gibt):
Me.Dirty = False
statt Me.Refresh