Hallo zusammen,
das besagte Ufo enthält keine Datensätze, da sie die Filtereigenschaften nicht erfüllen.
Wenn ich nun über
If not isNull(me!Ufo.form!ID) then Wert = me!Ufo.form!IDversuche, einen Wert auszulesen, wirft er trotz If eine Fehlermeldung raus.
AC müsste doch in diesem Fall eigentlich die Zeile ignorieren, oder?
Gruß
Max
Hallo,
was willst du denn auslesen wenn nix da ist?
Hallo,
Ac soll im Fall eines leeren Ufos gar nichts machen.
Ansonsten soll er die ID des fokusierten Datensatzes an das Steuerelement Wert übergeben.
Hallo,
der Sinn der If Zeile erschließt sich mir nicht.
Sinngemäß setzt Du den Wert des Feldes wenn es nicht Null auf den Wert des Feldes. Wenn der Wert nicht Null ist, hast Du diesen doch, wozu noch mal setzen ?
Kannst Du mal die Überlegung dahinter erklären ?
Was hast Du vor, mit dem fokusierten Datensatz ?
Zitat von: MaxP am Dezember 04, 2024, 10:23:18das besagte Ufo enthält keine Datensätze, da sie die Filtereigenschaften nicht erfüllen.
Wenn ich nun über
Code [Auswählen] Erweitern
If not isNull(me!Ufo.form!ID) then Wert = me!Ufo.form!IDversuche, einen Wert auszulesen, wirft er trotz If eine Fehlermeldung raus.
AC müsste doch in diesem Fall eigentlich die Zeile ignorieren, oder?
Wenn das Formular keine Datensätze hat, dann gibt es dieses Feld in diesem Sinne gar nicht.
Du solltest für diesen Fall prüfen:
me!Ufo.form.Recordset.Recordcount > 0
Einen Wert kannst du dann aber auch nicht direkt setzten, sondern musst vorher erst einen Datensatz anlegen.
Hallo Max,
dafür habe ich mir mal eine universelle Funktion für DAO/ADO geschrieben:
Public Function HasRecords(ByRef pRecordset As Object) As Variant
If Not pRecordset Is Nothing Then
Debug.Assert InStr(TypeName(pRecordset), "Recordset") <> 0
HasRecords = Not (pRecordset.BOF And pRecordset.EOF)
End If
End Function
Damit kannst du deine Prüfung so gestalten:
' im Hauptformular:
if HasRecords(UfoControl.form.Recordset) then
' Zugriff auf das gebundene Steuerelement
Wert = UfoControl.form.txtID.Value
' Alternativ Zugriff auf das Feld
' Wert = UfoControl.form.Controls("ID").Value
end if
Im Sinn von OOP und Datenkapselung würde man das aber alles ins Unterformular verlagern:
' Im Unterformular
Public Property Get ID() as Long
if HasRecords(me.recordset) then
ID = nz(me.[ID],0)
end if
End Property
' Im Hauptformular dann so
lngWert = UFOControl.form.ID
Hier wird dann einfach eine 0 zurückgegeben, wenn kein Datensatz vorhanden ist oder die aktuelle ID. Setzt natürlich voraus, daß es keine ID mit 0 gibt. Das ist einfacher, als immer auf NULL abzufragen.
Gruß
Ulrich
@ Klaus
Ich möchte beim Beenden des Programms die aktuell verwendeten Werte in der Werte-Tabelle speichern,
um sie beim nächsten Öffnen des Programms wieder aus der Werte-Tabelle zu laden.
So kann ich an der Sache weiter arbeiten, wo ich am Vortag aufgehört habe.
@ Phil
me!Ufo.form.Recordset.Recordcount > 0 Damit macht es, was ich will!
@ Ulrich
Danke für Deine Mühe. Aber der o.g. Code ist da eher mein Ding.
Danke an Euch!!
Gruß
Max
Hallo Ulrich,
Bezügl. OOP bin ich ja (noch) nicht auf deinem Niveau, aber
Public in einem UFo kommt mir nicht gerade "gekapselt" vor.
Oder bedeutet das eben, dass nur das UFo den Wert für "alle"
zur Verfügung stellt?
gruss ekkehard
@ekkehard:
Das UFO-Formular ist ein normales Formular (Klasse), das in ein SubForm-Control geladen und angezeigt wird. Es könnte auch einfach mit DoCmd.OpenForm geladen werden. Wird nun eine benutzerdefinierte Eigenschaft (Property) öffentlich gemacht, verhält sie sich genauso wie andere öffentliche Formulareigenschaften.
Zitat... dass nur das UFo den Wert für "alle" zur Verfügung stellt?
Wenn das Formular als UF geladen wird, ist so eine Eigenschaft nur für das HF sichtbar, weil man an das UF nur über das HF herankommt und somit das HF die Zugriffsregeln bestimmt. Würde das HF die Form Eigenschaft des SubForm-Steuerelements offenlegen, wäre die Sichtbarkeit dieser Eigenschaft für alle gültig, was i.d.R. aber nicht gemacht wird. Hierbei gilt die Regel, daß man Interna eines Objekts nicht einfach per Public Deklaration öffentlich machen sollte.
Grüße
Ulrich
Hallo Ulrich,
Danke für deine Ausführungen, mit denen ich aber noch nicht ganz
klar bin. Habe im Moment aber nicht genügend Zeit um noch man nach
zu haken.
Ich werde am WE einen neuen Thread damit eröffnen.
gruss ekkehard
Kleine Frage
Ist ja ein interessanter Thread, aber weshalb wird er immer zu oberst angezeigt, obwohl er längst erledigt ist.
Da hat wohl ein Moderator die Sticky Option gesetzt.
Zitat von: knobbi38 am Februar 08, 2025, 23:12:26Da hat wohl ein Moderator die Sticky Option gesetzt.
Stimmt. Da ich keine Grund dafür erkennen kann, habe ich die Option entfernt.
Und ich komme seit 2 Monaten nicht dazu einen neuen Thread zu
meinen Unklarheiten zu erstellen.
Sch.. Rentnerdasein, - man hat einfach auch nicht mehr Zeit wie
vorher :-(.
Mal sehen, kommt Zeit, kommt Rat :-).
Falscher Anhang
Falsche Anlage. Hier die neue.
Neues Thema.jpgNeues Thema.jpgNeues Thema.jpg
Von einem bestehenden Thread aus funktioniert das nicht. Du musst einen Schritt zurück gehen. Zur Seite "Access Programmierung". Dort findest du die Möglichkeit, ein neues Thema zu erstellen. Siehe Anlage
Von einem bestehenden Thread aus funktioniert das nicht. Du musst einen Schritt zurück gehen. Zur Seite "Access Programmierung". Dort findest du die Möglichkeit, ein neues Thema zu erstellen. Siehe Anlage.
Neues Thema.jpg
Ich möchte mich für die Verwirrung entschuldigen, die ich da zwischen #14 und #16 gestiftet habe. #17 sollte funktionieren, das heisst man kann die Anlage herunterladen.