Neuigkeiten:

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

Mobiles Hauptmenü

Access 2013; VBA; Unterformular stürzt ab

Begonnen von Crashbreaker, Oktober 01, 2015, 14:50:21

⏪ vorheriges - nächstes ⏩

Crashbreaker

Hallo Leute,

ich brauche eure Hilfe bei meiner Anfänglichen Problem, siehe Betreff.

Ich habe in einer Formular ein Unterformular erstellt, wodrin der Inhalt einer Tabelle angezeigt wird. Diese möchte ich mit einem Klick auf einer Schaltfläche den ausgewählten Datensatz in entsprechende Textfelder hinzufügen. Durch diese Schaltfläche möchte ich quasi den Datensatz umändern und mit dem SQL-Befehl "Update ... " abspeichern.

Mein Quelltext dazu sieht folgendermaßen aus:

    Dim rs As Recordset
    Set rs = Me.frmUnterformular.Form.Recordset
     
    rs.Refresh

    If Not (rs.EOF And rs.BOF) Then
        With rs
            Me.txtAuftragID = .Fields("AuftragID")
            Me.txtDatum = .Fields("Datum")
            Me.txtPersonalID = .Fields("PersonalID")
            Me.txtObjektID = .Fields("ObjektID")
            Me.txtSchichtID = .Fields("SchichtID")
            Me.txtUhrzeitBeginn = .Fields("UhrzeitBeginn")
            Me.txtUhrzeitEnde = .Fields("UhrzeitEnde")
        End With
    End If


Das alles funktioniert soweit zwar gut, aber manchmal, wenn ich im Unterformular keinen Datensatz auswähle sondern statt dessen die Textfelder manuel mit neuen Datensatz ausfülle und diese mit einer anderen Schaltfläche in die Datenbank mit der SQL-Befehl "Insert Into ... " abspeicher und später dann im nächsten Schritt wieder im Unterformular einen anderen Datensatz markiere um den Datensatz ändern zu können, bekomme ich unterschiedliche Fehlermeldungen. Manchmal stürtzt sogar das Programm ab, so dass ich dann quasi den VBA-Code Beenden oder Debuggen muss.

Einer der Fehlermeldungen ist solches:
Fehler beim Kompilieren:
Methode oder Datenobjekt nicht gefunden

Kann mir jemand hierbei helfen?
Die Ursache ist genau an der "If"-Bedingung. Das Programm kommt mit dem ".EOF" und ".BOF" nicht klar obwohl das selbstverständlich ist.

Gibt es eine andere Möglichkeit wie ich das noch lösen könnte?
Für jede hilfe wäre ich euch sehr Dankbar.
Ich habe sämtliche Videos bei Youtube und sämtliche Foren in Google durchforstet aber leider konnte ich keine vernünftige Lösung finden.

Vielleicht liegt es an meiner Anfänglichen situation. Vielleicht habt ihr mir da eine bessere Lösungsvorschlag.

Dies ist meine letzte Hoffnung!
Ich bedanke mich schon mal im Voraus für die Mühe.

Mit freundlichen Grüßen
Daniel

MzKlMu

Hallo,
warum arbeitest Du nicht einfach mit gebundenen Formularen ?
Da braucht es weder Update noch Insert geht alles automatisch ohne Code.
Da dürften sich auch Deine Probleme erledigt haben.
Anfänger programmieren zu Beginn viel zu viel.
Gruß Klaus

MaggieMay

#2
Hallo,

deklariere rs As DAO.RecordSet und kompiliere den Code VOR dem Testen.

Was das betrifft:
ZitatManchmal stürtzt sogar das Programm ab, so dass ich dann quasi den VBA-Code Beenden oder Debuggen muss.
das ist kein Absturz, sondern eine Unterbrechung der Code-Ausführung, weil ein Laufzeit-Fehler aufgetreten ist.

PS:
Ein Recordset kennt keine Refresh-Methode.
Freundliche Grüße
MaggieMay

Crashbreaker

#3
Zitat von: MaggieMay am Oktober 01, 2015, 15:30:29
Hallo,

deklariere rs As DAO.RecordSet und kompiliere den Code VOR dem Testen.

Was das betrifft:
ZitatManchmal stürtzt sogar das Programm ab, so dass ich dann quasi den VBA-Code Beenden oder Debuggen muss.
das ist kein Absturz, sondern eine Unterbrechung der Code-Ausführung, weil ein Laufzeit-Fehler aufgetreten ist.

PS:
Ein Recordset kennt keine Refresh-Methode.

Hallo MaggieMay,

ich danke dir für die Unterstützung.

Habe deine Deklaration rs As DAO.RecordSet befolgt und bekomme immer noch fehler.

Der Fehler ist:
Das Objekt ist ungültig, oder es ist nicht mehr festgelegt.

Wenn ich die Datensätze einmal durch diesen Prozess durchlaufen habe und ein 2. Mal durchlaufen möchte, kommt dieses Problem zustande.

Wie kann ich noch einen Datensatz von einem Unterformular entnehmen und in einzelenen Textfelder hinzufügen?

Das mit "Refresh" habe ich rausgenommen.

Bitte um Hilfe!

MfG
Daniel

DF6GL

Hallo,

poste doch mal den kompletten Code der Prozedur, in der der Code-Teil steht....

Zudem bin ich auch der Meinung wie Klaus, dass ein gebundenes Formular besser angebracht ist.  Oder handelt es sich  hier etwa um ein solches?

Crashbreaker

Hallo DF6GL,

leider kann ich es nicht mit einem gebundenes Formular machen. Es soll halt so wie oben beschrieben gemacht werden. Das ist nämlich die Voraussetzung.

Mein Gesamter Code lautet folgendermaßen:

Private Sub btnEdit_Click()
    Dim rs As DAO.Recordset
    Set rs = Me.frmUnterformular.Form.Recordset
   
    On Error GoTo ErrorHandler
       
    If Not (rs.EOF And rs.BOF) Then
        With rs
            Me.txtAuftragID = .Fields("AuftragID")
            Me.txtDatum = .Fields("Datum")
            Me.txtPersonalID = .Fields("PersonalID")
            Me.txtObjektID = .Fields("ObjektID")
            Me.txtSchichtID = .Fields("SchichtID")
            Me.txtUhrzeitBeginn = .Fields("UhrzeitBeginn")
            Me.txtUhrzeitEnde = .Fields("UhrzeitEnde")
        End With
    End If
   
ExitProcedure:
    Exit Sub

ErrorHandler:

    MsgBox err.Description, vbExclamation, "Update-Error:"
    Resume ExitProcedure
   
End Sub


MaggieMay

Zitatleider kann ich es nicht mit einem gebundenes Formular machen
Wie kommen denn die Daten ins Unterformular?

Der Code ist fehlerfrei kompilierbar?
Freundliche Grüße
MaggieMay

el_gomero

@ all, die helfen wollen

wegen Crosspostings wird dieses Thema aktuell im MS-Office-Forum fortgeführt.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

Crashbreaker

Zitat von: MaggieMay am Oktober 01, 2015, 22:51:19
Zitatleider kann ich es nicht mit einem gebundenes Formular machen
Wie kommen denn die Daten ins Unterformular?

Der Code ist fehlerfrei kompilierbar?

Hallo MaggieMay

ich habe für die Unterformular im "Eigenschaftenblatt -> Daten -> Herkunftsobjekt" die entsprechende Tabelle dafür auserwählt. Daher kommen die Daten ins Unterformular an.

MaggieMay

Und die zweite Zeile mit dem Fragezeichen hast du übersehen? ;-)

Oder ist das Problem inzwischen gelöst? Wie weit bist du denn in dem anderen Forum gekommen?
Freundliche Grüße
MaggieMay

Crashbreaker

Zitat von: MaggieMay am Oktober 02, 2015, 14:24:37
Und die zweite Zeile mit dem Fragezeichen hast du übersehen? ;-)

Oder ist das Problem inzwischen gelöst? Wie weit bist du denn in dem anderen Forum gekommen?

Ubs stimmt, sorry ...
Also denke ich schon das der Code fehlerfrei kompilierbar ist.
Denn ich speicher sie ab, klicke auf das "play" knopf oben und den Dialog der danach erscheint schließe ich. Anschließend öffne ich das Formular und teste das ganze ...

Also da kam ich auch nicht weit. Habe paar kleinigkeiten ausprobiert was als Vorschlag kam aber bis jetzt ist noch nichts gelöst worden :-(

Bin echt da am verzweifeln.


MaggieMay

ZitatAlso denke ich schon das der Code fehlerfrei kompilierbar ist.
Du bist echt witzig! Das sollst du nicht denken, sondern überprüfen. (-> Debuggen -> Kompilieren)

Außerdem hattest du selbst das Auftreten von Kompilierfehlern anfangs erwähnt. Wie hast du sie beseitigt?

ZitatBin echt da am verzweifeln.
Da hilft wohl nur noch das Hochladen einer Beispiel-DB, damit man sich das mal genauer anschauen kann.
Freundliche Grüße
MaggieMay

DF6GL

Hallo,

als letzten Hinweis:

Zitat"leider kann ich es nicht mit einem gebundenes Formular machen"

Wenn es sich um ungebundene Formulare handelt, so gibt es dort keine Recordset- und  Recordsetclone-Eigenschaften und demzufolge auch keine Möglichkeit zu deren Verwendung...

MaggieMay

Hi,

dann hast du dies hier wohl überlesen:
Zitatich habe für die Unterformular im "Eigenschaftenblatt -> Daten -> Herkunftsobjekt" die entsprechende Tabelle dafür auserwählt. Daher kommen die Daten ins Unterformular an.

Es ist doch so, dass das Hauptformular ungebunden ist, das Unterformular aber nicht. Nun soll auf Button-Klick der aktuelle DS aus dem UF ins HF geholt und dort geändert werden können. Von dieser Vorgehensweise weiterhin abzuraten, wo es doch der erklärte Wunsch des TE ist, finde ich wenig sinnvoll.

Ich warte jetzt auf eine Beispiel-DB mit Bedienungsanleitung. Das muss man jetzt einfach mal mit eigenen Augen sehen.
Freundliche Grüße
MaggieMay

Crashbreaker

Zitat von: MaggieMay am Oktober 02, 2015, 15:31:50
ZitatAlso denke ich schon das der Code fehlerfrei kompilierbar ist.
Du bist echt witzig! Das sollst du nicht denken, sondern überprüfen. (-> Debuggen -> Kompilieren)

Außerdem hattest du selbst das Auftreten von Kompilierfehlern anfangs erwähnt. Wie hast du sie beseitigt?

ZitatBin echt da am verzweifeln.
Da hilft wohl nur noch das Hochladen einer Beispiel-DB, damit man sich das mal genauer anschauen kann.

Ach so lol ... Stimmt, habe es nun kompiliert und bekam so kein Fehler raus.

Na gut, dann baue ich das gleiche in abgespeckter Version nach um euch das zur Verfügung zu stellen.

MfG
Daniel