Neuer Datensatz im UFo

Moderator: ModerationP

Neuer Datensatz im UFo

Beitragvon jafi » 15. Aug 2019, 11:40

Hi,

ich habe folgendes Problem:
Es gibt Hfo und UFo, die über Primär-/Fremdschlüssel miteinander verknüpft sind. Das HFo ist modal vom Formular 'main' geöffnet worden.
Nun will ich im UFo über einen Button im UFo einen neuen Datensatz anlegen:

Code: Alles auswählen

Private Sub bes_Einheitanlegen()

    Debug.Print Screen.ActiveControl.Name
    Forms![frm_Gruppeneinteilung_test2]![Container_subfrm_Einheit].SetFocus
    Forms![frm_Gruppeneinteilung_test2]![Container_subfrm_Einheit]![kom_Lehrer1].SetFocus
    Debug.Print Screen.ActiveControl.Name
    DoCmd.GoToRecord , , acNewRec



Mein Problem ist, dass kein neuer Datensatz angelegt wird. Ich versuche den Fokus auf das UFo zu bekommen. Da das HFo aber modal geöffnet ist, bleibt Screen.ActiveControl.Name immer auf einem Control des Formulars 'main'. Das verstehe ich auch; aber wie bekomme ich heraus, warum kein neuer Datensatz angelegt wird? Wie ist der Fokus im modalen Formular zu bestimmen? Wie bekomme ich heraus, was mein ActiveDataObject ist? Da ist mir manches noch nicht klar.

Herzliche Grüße
jafi
jafi
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 69
Registriert: 17. Jan 2011, 09:23

Re: Neuer Datensatz im UFo

Beitragvon Gast » 16. Aug 2019, 09:44

Hi jafi,

ich kann Dein Problem zwar nicht nachvollziehen (wenn ich ein Formular modal (acDialog) öffne klappt dein Code) aber Du kannst (und solltest) Deinen Code unabhängig vom Focus machen.

Wenn Dein Button sowieso im Ufo liegt
Code: Alles auswählen
Me.Recordset.AddNew


Button im Hafo
Code: Alles auswählen
Me.[Container_subfrm_Einheit].Form.Recordset.AddNew


Von Sonstwo
Code: Alles auswählen
Forms![frm_Gruppeneinteilung_test2].[Container_subfrm_Einheit].Form.Recordset.AddNew


Gruß CV
Gast
 

Re: Neuer Datensatz im UFo

Beitragvon KlausMz » 16. Aug 2019, 10:02

Hallo,
wenn das Ufo an die entsprechende Tabelle/Abfrage gebunden wird, bedarf es keines VBA Codes, auch benötigt es keinen Button.
Einfach mit dem * zu einem neuen Datensatz und die Felder füllen.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 39048
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Neuer Datensatz im UFo

Beitragvon jafi » 19. Aug 2019, 15:39

Hi,

danke für die Antworten.
Ich habe nun DoCmd.GoToRecord,, NewRec ersetzt durch Me.Recordset.Addnew und das funktioniert. Danke

Was ich aber weiterhin nicht verstehe ist folgendes: ich hatte die Datensatznavigation ausgeblendet und will das Anlegen eines neuen Datensatzes über einen Button im UFo realisieren. Nun habe ich die Navigation wieder eingeblendet und kann wie KlausMz vorschlägt über den * laufend neue Datensätze hinzufügen. Funktioniert! Wenn ich stattdessen den Button klicke und folgenden Code ausführen möchte:
Code: Alles auswählen
    If Not Me.NewRecord Then
        DoCmd.Runcommand acCmdRecordsGoToNew
    End If


erhalte ich den Laufzeitfehler '2046': Diese Aktion steht zur Zeit nicht zur Verfügung. In vielen Beiträgen habe ich gelesen, dass dieser Befehl dem * in der DSnavigation entspricht. Warum also der Fehler?

Vielleicht hat ja nochjemand einen Gedanken dazu. Dann muss man an Access nicht immer wieder mal verzweifeln...

Gruß
jafi
jafi
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 69
Registriert: 17. Jan 2011, 09:23

Re: Neuer Datensatz im UFo

Beitragvon knobbi38 » 20. Aug 2019, 02:22

Hallo Jafi,

ich kann deinen Fehler mit
Code: Alles auswählen
Private Sub btnGotoNew_Click()
  DoCmd.GoToRecord acActiveDataObject, "", acNewRec
End Sub
nicht nachvollziehen.

Auch verstehe ich nicht, wenn dein Button doch in dem UFO eingebunden ist, warum du noch extra den Fokus setzen möchtest. Durch den Klick auf den Button erhält der automatisch den Fokus.

Das Problem '2046' hat wahrscheinlich ein andere Ursache, die vom aktuellen Zustand des Sub-Formulars, den Control-Properties, den Tabellen- und Felddefinitionen und nicht zuletzt von dem verwendeten Code abhängig ist - also sehr individuell. Deine Frage "Warum also der Fehler?" läßt sich damit hier nicht unbedingt abschließend beantworten.

Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1198
Registriert: 02. Jul 2015, 14:23

Re: Neuer Datensatz im UFo

Beitragvon Bitsqueezer » 21. Aug 2019, 13:08

Hallo,

auf die Goto-Befehle des DoCmd-Objektes würde ich mich nicht verlassen, da diese alle den Fokus im entsprechenden Formular voraussetzen, was oft nicht richtig funktioniert.

Ich verwende das Recordset-Objekt, und um den Datensatzzeiger auf den neuen Datensatz zu bewegen, hat sich die Methode bewährt, per MoveLast zum letzten Datensatz zu springen und dann mit MoveNext auf den neuen, das klappt immer.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7035
Registriert: 21. Jun 2007, 12:17

Re: Neuer Datensatz im UFo

Beitragvon knobbi38 » 21. Aug 2019, 13:28

@Christian,

mit DoCmd hatte ich noch nie Probleme, weil es ja gerade das aktuelle Formular ist, was ich ansprechen möchte!

Bist du sicher, wenn du das unterliegende Recordset mit "Form.Recordset.Move..." Methoden direkt ansprichst, daß du nicht damit das formularinterne Caching durcheinander bringst? Früher galt zumindest der Grundsatz, den Currentrecord des Formulars nicht direkt über das unterliegende Recordset zu bewegen, sondern in so einem Fall immer mit Hilfe von RecordsetClone solche Datensatzzeiger Bewegungen umzusetzen. Aber vielleicht ist das ja nicht mehr aktuell?

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1198
Registriert: 02. Jul 2015, 14:23

Re: Neuer Datensatz im UFo

Beitragvon Bitsqueezer » 21. Aug 2019, 14:26

Hallo Ulrich,

von welchem Caching sprichst Du?

Der RecordsetClone (der faktisch das gleiche Recordset-Objekt ist, nur unsichtbar im Hintergrund) war immer schon nur dafür da, um mit Daten anderer Datensätze arbeiten zu können, ohne sichtbar den Datensatzzeiger zu bewegen.
Hier will man ja gerade sichtbar den Zeiger bewegen, da hilft RecordsetClone gar nix.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7035
Registriert: 21. Jun 2007, 12:17

Re: Neuer Datensatz im UFo

Beitragvon knobbi38 » 21. Aug 2019, 14:46

OT

@Christian:
Das Formular cached offensichtlich intern noch Daten, so wie ich es zumindest bei Experimenten beim Implementieren von eignen Undo-Rountinen beobachten konnte. Es scheint eine undokumentierte Ebene zwischen Formular und unterliegendem Recordset zu geben. wo Formular und Recordset zeitweise nicht ganz synchon sind. Anscheinend werden dazu die AccessField-Objekte verwendet. Deshalb die Frage, ob trotzdem bei so einem Vorgehen immer gewährleistet ist, daß Form und Recordset immer synchron gehalten werden. Führt hier aber zu weit. Trotzdem Danke.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1198
Registriert: 02. Jul 2015, 14:23

Re: Neuer Datensatz im UFo

Beitragvon Bitsqueezer » 21. Aug 2019, 17:19

Hallo Ulrich,

ich würde es für möglich halten, daß Access den RecordsetClone erst dann aktualisiert, wenn es eine Notwendigkeit dazu gibt, aus Performancegründen. Da ich den RecordsetClone nur äußerst selten benutze, kann ich das aber nicht aus eigener Erfahrung bestätigen (man kann sich ja auch jederzeit mit Recordset.Clone behelfen, bei dem eine Kopie des Recordsets erstellt wird).
Allerdings ist das normale Recordset natürlich immer aktuell, und bei Bewegungen, wie hier beschrieben, ist es ohnehin egal, ob inhaltlich irgendetwas gecached ist.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7035
Registriert: 21. Jun 2007, 12:17


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste