Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Fehler 2046 ...GeheZuDatensatz ist nicht verfügbar

Begonnen von dolpho, Februar 24, 2023, 11:14:07

⏪ vorheriges - nächstes ⏩

dolpho

Hallo AccessGemeinde,

schon wieder einmal stecke ich im Dilemma:
Mein Startformular ist mit einer verknüpften Tabelle tblTag verbunden.
In dieser Tabelle gibt es eine AutoID, ein Datumsfeld und viele numerische Felder als Zählfelder.

Nun möchte ich gern, dass bei Starten der Datenbank geprüft wird ob es einen Datensatz für heute schon gibt.
Gibt es diesen, soll er angesprungen werden (Das scheint auch gut zu funktionieren)

Gibt es ihn nicht, soll ein Datensatz für "heute" erstellt werden.

    With Me.Recordset
        .FindFirst "[Tagdatum] = Date()"
        If .NoMatch Then
        DoCmd.GoToRecord , , acNewRec
        End If
    End With

Dieser Befehl wird mit obigem Fehler quittiert.
Im Formular ist der Standardwert Heute() eingestellt.

Über die Navigationsschaltfläche lässt sich aber ein neuer Datensatz erzeugen, Jedoch zeigt das Datumsfeld
#Name? an.

Was mache ich falsch?

Gruß dolpho

Köbi

Hallo dolpho
Ich kann das nicht nachvollziehen, bei mir funktioniert es.
Allerdings muss der Standardwert im Formular nicht heute(), sondern =Datum() heissen.

dolpho

Hallo Köbi,

das hatte ich heut schon mal geändert, aber das Ergebnis ist das Gleiche!  :(

Die gleiche Antwort habe ich übrigens auch wenn ich die Zeilen durch

"DoCmd.GoToRecord , , acNewRec"

ersetze.

Köbi

Hallo dolpho
ZitatDie gleiche Antwort habe ich übrigens auch wenn ich die Zeilen durch
"DoCmd.GoToRecord , , acNewRec"
Das ist ja das Gleiche wie im ursprünglichen Code.

Ist den die Datensatzquelle (wahrscheinlich eine Abfrage) für das Formular überhaupt aktualisierbar?

Beiliegend meine DB, welche funktioniert.

dolpho

Hallo Köbi,

die Grundlage für meine Datenbank liegen in anderen Datenbanken.
34 der Tabellen sind in der BE-Datei und die eine, auf die ich hier zugreifen will, liegt in einer anderen Datenbank, die im Moment noch eigenständig funktioniert, die ich aber hier einbauen will.
Eine Abfrage ist nicht dazwischen.

Gruß dolpho

dolpho

... noch etwas ist mir gerade aufgefallen:
Wenn ich mir einen Datensatz erzeuge über die Navigationsschaltfläche, dann setzt dieser das richtige Datum.
Dort kann ich dann die Daten im Datensatz bearbeiten. Öffne ich dann jedoch die Tabelle, di ja der Ursprung sein soll, dann gibt es diesen Datensatz noch nicht !?!

Köbi

Der Code gehört in das Form_Load Ereignis des Formulars. Ist das so bei dir?

ZitatDort kann ich dann die Daten im Datensatz bearbeiten. Öffne ich dann jedoch die Tabelle, di ja der Ursprung sein soll, dann gibt es diesen Datensatz noch nicht !?!
Ist denn die Bearbeitung auch abgeschlossen, indem du z.B. zu einem anderen DS wechselst? Erst dann ist der DS auch in der Tabelle gespeichert.
Sonst weiss ich nicht weiter. Höchstens noch die Empfehlung, die Datenbank komprimieren und reparieren.

dolpho

Hallo Köbi,

ja nach Wechsel des Datensatzes ist er da und komprimiert und repariert habe ich auch.
ohne Erfolg.
Vielleicht muss ich den Datensatz über einen anderen Weg neu erzeugen.
Dazu habe ich jedoch erst morgen wieder Zeit,

oder irgendwer hat eine bessere Lösung.

Gruß dolpho

dolpho

Nachtrag:
Heute habe ich das selbe unter Office 365 ausgeführt und bekomme eine andere Fehlermeldung:

"Fehler 2499: Sie können die GeheZuDatensatz-Aktion oder
SearchForRecord-Aktion bzw. die GoToRecord-Methode oder
SearchForRecord-Methode nicht für ein Objekt ausführen,
das sich in der Entwurfsansicht befindet."

Allerdings starte ich das Formular aus einer Situation heraus, wo NICHS geöffnet ist.

Vielleicht hilft ja das irgendwie weiter

Köbi

Tut mir Leid, mir hilft das nicht weiter. Bin mit meinem Latein am Ende.
Vielleicht kannst du ja eine abgespeckte Version der DB hier hochladen, nur mit ein paar fiktiven Datensätzen.

Beaker s.a.

Mich würde ja interessieren, wo und wann dein Code aus dem OP ausgeführt
wird.
Zitatdass bei Starten der Datenbank
Da werden ja u.U. mehrere Ereignisse ausgelöst.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

dolpho

Hallo zusammen,

@Köbi, das wird Dir nichts nützen. Diese Tabelle habe ich gerade erst "dazugebastelt" Da gibt es ur die Versuchsdaten der letzten fünf Tage. Ansonsten handelt es sich hier nur um ein Startformular, mit 36 cmd... Feldern und die 14 neuen "Zählfeldern".
@Autor, das Ereignis findet gleich nach "Private Sub Form_Load()" statt.

ebs17

#12
DoCmd.GoToRecord , , acNewRecDas legt aber noch keinen Datensatz an und entspricht nicht der Aussage ...
ZitatGibt es ihn nicht, soll ein Datensatz für "heute" erstellt werden.

Wenn man ausführt, was man sagt, könnte es etwa so aussehen:
If .NoMatch Then
  .AddNew
  .Fields("X") = "trallala"
  ' weitere Felder
  .Update
End If

Zur Präzisierung:
Zitatdas Ereignis findet gleich nach "Private Sub Form_Load()" statt
Form_Load ist das Ereignis.
Es wird hier durch eine Ereignisprozedur genutzt.

Generell: Bei der Mischung verschiedener Programmieransätze (Objektorientierung a la Form-Objekt versus DoCmd-Zeugs) sollte man ausreichend zurückhaltend sein.
Mit freundlichem Glück Auf!

Eberhard

dolpho

Hallo Eberhard

viele lieben Dank für die Hilfe. Das war genau das, was ich suchte!

Mit:

 With Me.Recordset
    .FindFirst "[Tagdatum] = Date()"
    If .NoMatch Then
        .AddNew
        .Fields "[Tagdatum] = Date()"
        .Update
    End If

    End With

funktioniert es.

Leider bin ich VBA-technisch doch eher ein Laie und hangel mich immer von Fall zu Fall.
Zwar besitze ich viele Bücher über Access und VBA.
Jedes geht jedoch anders an die Programmierung ran:

Einmal

dolpho

einmal:

with Me.Recordset

Das nächste Mal über Dao. Recordset

oder Set rs = ......

das ist alles echt verwirrend.

Nochmals danke und liebe Grüße aus Mittelfranken

dolpho