Hallo zusammen, ich hab ein Problem bei einem meiner Formulare.
Das Formular basiert auf einer Abfrage. Mithilfe eines Listenfeldes kann ein Datensatz gewählt werden, und in den zugehörigen Feldern wird dann der Datensatz angezeigt. Das halt bisher immer funktioniert, auch bei diesem Formular.
Jetzt hab ich wohl vor einigen Tagen - hab seit dem ziemlich viel gemacht - einen Fehler gemacht. Das Listenfeld ist zwar passend gefühlt, aber der erste Datensatz wird nicht mehr automatisch geladen.
Hat jemand eine Ahnung was sich geändert hat das es jetzt nicht mher funktioniert und wie ich das Rückgängig machen kann ?
Ich habe relative viele Änderungen gemacht, eine davon war - an die ich mich erinnere - das ich ein Marko nach der Microsoft Anleitung eingebaut hab das die letzte Änderung des Datensatzes abspeichert.
Vielen Dank im vorraus :)
Hallo,
Access macht so was nicht automatisch. Es muss Code gegeben haben der den Datensatz anzeigt. Und den hast Du vermutlich gelöscht, deaktiviert oder geändert.
Das musst Du wieder richtig machen.
Welcher Code ist denn zum Listenfeld hinterlegt ?
PS:
Zu Makros wirst Du relativ wenig Hilfe bekommen, die will keiner und somit ist auch wenig Erfahrung da.
Hi, also in meinem listenfeld - das einwandfrei funktioniert - steht unter "Nach Aktualisieren" ein eingebettetes Marko:
SuchenNachDatensatz
Objekttyp (leer gelassen)
Objektname (leer gelassen)
Aufnahme Erster
Bedingung = ="[PC-ID]=" &Str(Nz(Screen.ActiveControl;0))
Das hab ich nicht selbst erstellt sondern Access.
Das Problem liegt darin das das rechtige Formular nicht den ersten Datensatz aufruft beim öffnen - wie früher.
Sondern erst wenn ich einen Datensatz im Listenfeld auswähle, dann auf Aktualisieren drücke.
Allerdings ab dem Zeitpunkt funktioniert wieder alle wie immer, also liegt der Fehler wo beim Laden des ersten Datensatzes beim öffnen :)
Hallo,
wie gesagt, zu Makros wirst Du kaum Hilfe bekommen. Ich habe von den Dingern auch keine Ahnung.
Hallo,
ich denke das liegt nicht am Makro, dies sollte ja erst nach einer Aktualisierung wirken.
Zitataber der erste Datensatz wird nicht mehr automatisch geladen
Was wird denn angezeigt? Gar kein Datensatz oder ein "falscher"?
Das Ablaufprinzip wäre, beim Laden des Formulars zu prüfen, ob das Lstenfeld Zeilen enthält, die erste, letzte oder eine irgendwo hinterlegte Zeile auswählen und anschließend die Aktion anstoßen, die im Nach Aktualisierung Ereignis des Listenfelds abläuft.
In VBA könnte der Code dazu wie folgt für ein Formularmodul aussehen:Option Compare Database
Option Explicit
Private Sub Form_Load()
Const LBX_Name As String = "DeinListenfeldName" '<== anpassen
With Me.Controls(LBX_Name) 'oder kürzer: With Me(LBX_Name)
'gibt es Zeilen?
If .ListCount > 0 Then
'erste Zeile auswählen (Zählung beginnt beo 0)
.Value = .ItemData(0)
'oder: letzte Zeile auswählen
'.Value = .ItemData(.ListCount - 1)
'Datensatznavigation mit dem ausgewählten Wert anstossen
Call ShowPC(.Value)
End If
End With
End Sub
Private Sub DeinListenfeldName_AfterUpdate()
'auch hier den natürlich den Namen anpassen
Call ShowPC(Me.DeinListenfeldName)
End Sub
Private Sub ShowPC(ByRef PC_ID As Variant)
If IsNull(PC_ID) Then Exit Sub 'sollte im Normalfall nicht eintreten
'Datensatz suchen (...und hoffentlich finden)
Me.Recordset.FindFirst BuildCriteria("[PC-ID]", dbLong, PC_ID)
End Sub
hi, ich glaube auch nicht das das marko etwas damit zu tun hat.
Um auf die Frage von steffen0815 zu antworten hab ich hier mal zwei Screenshots angefügt. Der erste zeigt wie es Mal war und wie es sein sollte. Auf dem zweiten sieht man wie es jetzt auf einmal ist. Wie man sieht ist das Listenfeld in beiden Fällen gefüllt nur rechts - in meiner "Detailansicht" - ist kein Datensatz zu sehen beim zweiten. So wie ich das beim Öffnen jetzt allgemein für das Formular kein Datnsatz am Anfang gewählt.
Erst durch Auswahl und Aktualisieren bekomm ich den gleichen Zustand wie früher, der auch dem Bild 1 entspricht. Ab dann funktioniert alles einwandfrei :)
Für leihen wo müsste ich diesen VBA einfügen zum Testen Lachtaube ?
:)
Hallo,
schau mal die Datensatzherkunft des Listenfeldes an. Dort sollte eine Abfrage, bzw. ein SQL-String stehen.
In dieser/m steht vermutlich das "Letzte Kontrolle:"-Feld (Spalte) nicht in der Select-Liste....
Oder das Tabellenfeld (Spalte) mit Alias-Name "Letzte Kontrolle:" ist nicht das gewünschte Datumsfeld
oder die Tabellenspalte ist grundsätzlich "Leer" (NULL)
Weiterhin sollten die Eigenschaften des Listenfeldes "Spaltenanzahl", "Spaltenbreiten" ,etc. überprüft werden.
Hallo,
ich vermute du stehst beim Öffnen auf einem neuen Datensatz, oder der erste Datensatz ist leer.
Wenn du auf einem neuen DS stehst, muss das irgend ein Code auslösen.
Welche Formularereignisse sind bei dir mit Code "belegt"?
Unter Formulareigenschaften kann im Reiter Daten z.B. ein Filter oder eine Sortierung für das Formular eingetragen sein.
Oder die Abfrage enthält im Eigenschaftsblatt noch Filter oder Sortierungen.
Frithjof
Hallo Steffen,
ZitatWenn du auf einem neuen DS stehst, muss das irgend ein Code auslösen.
Nicht unbedingt. Die Eigenschaft/-Einstellung "Daten eingeben = Ja"
erzwingt das ohne Code.
gruss ekkehard
Hallo,
ZitatNicht unbedingt. Die Eigenschaft/-Einstellung "Daten eingeben = Ja"
Mag sein, wäre auch mein erster Ansatz gewesen, allerdings wird ja das "Gehe zu Datensatz" im späteren Verlauf ausgeführt, deshalb kann weder ein Filter noch ein "Daten eingeben = Ja" das Verhalten erklären/auslösen.
Ich bezog mich auf
Zitatich vermute du stehst beim Öffnen
Hallo erstmal alle miteinander, vielen vielen Dank für eure Antworten. Leider hab ich im Moment nicht die gelegenheit sie zu testen, den das Formular hat sich jetzt komplett zerschossen.
Seit neuestem behauptet es beim öffnen das es die Felder - die ich als Kriterien in der Abfrage verwende - nicht mehr findet, womit sich das Formular quasi nicht öffnen lässt. Sobald ich die Ursache dafür gefunden hab werd ich alles Ausprobieren und euch schreiben ob und wenn ja wie es sich lösen hat lassen:
Aktuell hab ich geschaut:
DF6GL - Alles geschaut und da ist alles wie es sein müsste. Das Marko "Letzte Kontrolle:" hab ich wieder entfernt. Es gab nähmlich auf einmal Laufzeit Probleme.
steffen0815 - Ich glaube nicht das es auf einem neuen Datensatz steht. Habe mal die "ID" (Den Autowert / Primärschlüssel) eingeblendet und daran müsste man es ja eigentlich erkennen, doch das Feld war nur leer.
Hallo miteinander. Ich hab nun die gelegenheit gehabt alle eure Sachen auszuprobieren und leider hilft nix davon :(
Hat noch jemand eine Idee, würds helfen wenn ich euch die Datei mal gebe. Hab wirklich wenig Lust noch mal 20h dieses Formular zu erstellen xD
Hallo,
ZitatHat noch jemand eine Idee, würds helfen wenn ich euch die Datei mal gebe.
Logisch, das klärt das Problem in 5 Minuten ;)
ZitatSeit neuestem behauptet es beim öffnen das es die Felder - die ich als Kriterien in der Abfrage verwende - nicht mehr findet, womit sich das Formular quasi nicht öffnen lässt.
Formulare lügen selten, es sei denn, es ist explizit so programmiert - das sollte der Entwickler dann wissen.
Du solltest das Formular in der Entwurfsansicht öffnen. Dann kannst Du prüfen, ob es die fraglichen Felder unter den gefragten Namen gibt.
Ansonsten:
ZitatHab wirklich wenig Lust noch mal 20h dieses Formular zu erstellen
Wenn Du etwas dabei gelernt hast, sollte das deutlich schneller gehen. Andere und sich selber über eine Woche und mehr zu beschäftigen ist aber auch eine Vorgehensweise.
Langfristig könnte man auch über Sicherheitskopien nach erfolgten Entwicklungsschritten oder gar eine Codeverwaltung nachdenken.