none
Requery eines Formulars von einem anderen Formular

    Frage

  • Hallo Zusammen,

    ich habe ein Formular, dass beim schließen prüft, ob ein bestimmtes Feld einen Wert hat. Hat das Feld keinen Wert wird das schließen abgebrochen damit der Nutzer den Wert setzt.

    Jetzt will ich aber genau dieses geöffnete Formular aus einem anderen Formular heraus schließen und zwar unabhängig davon ob der Wert gesetzt ist oder nicht. Da der ganze Datensatz dabei gelöscht wird ist es auch völlig egal welcher Wert in dem Feld steht.

    Daher habe ich mir überlegt vor dem Schließen in das Betreffende Feld einfach einen Wert zu schreiben:

    Forms!MeinFormular!MeinFeld = 1

    Das scheint aber wohl nicht zu reichen. Ich muss wohl vorher noch ein Requery oder so duchführen? Aber das Requery Forms!MeinFormular!Form.requery

    geht nicht. Ich bekomme die Meldung, dass das recordset nicht aktualisert werden kann und der Code hält an. Starte ich ihn einfach wieder geht es dann doch.

    Hat jemand eine Idee wie ich es hinbekomme, dass men Code durchläuft?

    Danke für Hilfe und viele Grüße

    Patrick

    Mittwoch, 10. April 2013 12:44

Alle Antworten

  • Hallo,
     
    Patrick Pohlmann wrote:
     
    > ich habe ein Formular, dass beim schließen prüft, ob ein bestimmtes Feld
    > einen Wert hat. Hat das Feld keinen Wert wird das schließen abgebrochen
    > damit der Nutzer den Wert setzt.
    >
    > Jetzt will ich aber genau dieses geöffnete Formular aus einem anderen
    > Formular heraus schließen und zwar unabhängig davon ob der Wert gesetzt
    > ist oder nicht. Da der ganze Datensatz dabei gelöscht wird ist es auch
    > völlig egal welcher Wert in dem Feld steht.
    >
    > Daher habe ich mir überlegt vor dem Schließen in das Betreffende Feld
    > einfach einen Wert zu schreiben:
    >
    > Forms!MeinFormular!MeinFeld = 1
    >
    > Das scheint aber wohl nicht zu reichen. Ich muss wohl vorher noch ein
    > Requery oder so duchführen?
     
    Woher weisst du das? Welche Meldung bekommst du in welcher Zeile?
     
    > Aber das Requery Forms!MeinFormular!Form.requery geht nicht. Ich bekomme
    > die Meldung, dass das recordset nicht aktualisert werden kann und der
    > Code hält an. Starte ich ihn einfach wieder geht es dann doch.
    >
    > Hat jemand eine Idee wie ich es hinbekomme, dass men Code durchläuft?
     
    Zeig mal den Code, die Stelle, wo er abbricht und die entsprechende
    Meldung.
     
    Gruss - Peter
     
    --
     
    Sonntag, 14. April 2013 22:39
    Moderator
  • Hallo Patrick,

    Was ist denn "MeinFeld" für ein Feld? hat es einen Steuerelementinhalt, ist es an ein Rercordset-Feld gebunden?

    Grundsätzlich kannst Du jedes Formular von einem anderen Formular aus aktualisieren, bei deiner Syntax muss allerdings das erste Requery weg. Aus dem 2. Ausrufezeichen musst Du einen Punkt machen, weil Form ein eingebautes Property des Formulars ist.

    Roland


    It's no problem, it's just the syntax

    Montag, 15. April 2013 14:17
  • Hallo Peter,

    hier der Code:

    Private Sub btn_TicketVerschieben_Click()
    Dim strSQL As String
    Dim strTicketNrZiel As String, strTicketNrQuelle As String
    Dim intAntwort As String
    Dim stLinkCriteria As String

    strTicketNrQuelle = Me!txt_TicketNrQuelle
    strTicketNrZiel = Me!TicketNr

    'Fragen ob verschoben und gelöscht werden kann

    intAntwort = MsgBox("Wollen Sie wirklich die Tickverfolgungseinträge des Tickets " & strTicketNrQuelle & " in das " & _
    "Ticket " & strTicketNrZiel & " verschieben und das Ticket " & strTicketNrQuelle & " löschen?", vbOKCancel, "Tickets vereinigen")

    If intAntwort = vbCancel Then
    Exit Sub
    End If

    'Kategoie für zu löschendes Ticket auswählen um es löschen zu können
      
    Forms!frm_Tickets!Kategorie = 1
    Forms!frm_Tickets.Form.Requery

    'Ticketverfolgung verschieben

    strSQL = "UPDATE dbo.OS_Ticketverfolgung " & _
    "Set TicketNr = " & strTicketNrZiel & _
    " WHERE (TicketNr = " & strTicketNrQuelle & ")"

    DoCmd.RunSQL strSQL

    'Ticket löschen
    strSQL = "DELETE FROM dbo.OS_Tickets " & _
    "WHERE (TicketNr = " & strTicketNrQuelle & ")"

    DoCmd.RunSQL strSQL

    'Zielticket anzeigen

    stLinkCriteria = "[TicketNr]=" & strTicketNrZiel


    DoCmd.Close acForm, "frm_Tickets"
    DoCmd.OpenForm "frm_Tickets", , , stLinkCriteria, , , stLinkCriteria
    DoCmd.Close acForm, "frm_Tickets_alle_Liste"

    End Sub

    Kann es daran liegen, dass das zu bearbeitenden Formular auch ein Unterformular hat?

    Nochmal Danke für die Hilfe.

    Viele Grüße

    Patrick

    Montag, 6. Mai 2013 13:46
  • Hallo Patrick,

    Patrick Pohlmann wrote:

    Private Sub btn_TicketVerschieben_Click()
    Dim strSQL As String
    Dim strTicketNrZiel As String, strTicketNrQuelle As String
    Dim intAntwort As String
    Dim stLinkCriteria As String

    strTicketNrQuelle = Me!txt_TicketNrQuelle
    strTicketNrZiel = Me!TicketNr

    'Fragen ob verschoben und gelöscht werden kann

    intAntwort = MsgBox("Wollen Sie wirklich die Tickverfolgungseinträge des Tickets " & strTicketNrQuelle & " in das " & _
    "Ticket " & strTicketNrZiel & " verschieben und das Ticket " & strTicketNrQuelle & " löschen?", vbOKCancel, "Tickets vereinigen")

    If intAntwort = vbCancel Then
    Exit Sub
    End If

    'Kategoie für zu löschendes Ticket auswählen um es löschen zu können
       Forms!frm_Tickets!Kategorie = 1
    Forms!frm_Tickets.Form.Requery

    Der Zweck dieser beiden Zeilen erschliesst sich mir nicht. Kannst du
    erklaeren, was das bezwecken soll?

    'Ticketverfolgung verschieben

    strSQL = "UPDATE dbo.OS_Ticketverfolgung " & _
    "Set TicketNr = " & strTicketNrZiel & _
    " WHERE (TicketNr = " & strTicketNrQuelle & ")"

    strTicketNrQuelle und ...Ziel sind als Strings deklariert, daher wuerde bei
    numersicher TicketNr eine implizite Konvertierung stattfinden, was zwar
    nicht sauber ist, aber immer noch funktioniert. Sollten sich aber
    tatsaechlich alphanumerische Werte in den TicketNr befinden, waere der
    Update wirkungslos. Die Syntax muesste danach so lauten:

    " WHERE TicketNr = '" & strTicketNrQuelle & "'"

    (man beachte die einfachen Hochkommas vor bzw. zwischen den doppelten)

    DoCmd.RunSQL strSQL

    Hier solltest du besser schreiben:

    CurrentDb.Execute strSQL, dbFailOnError

    Siehe auch http://www.donkarl.com?FAQ2.4

    'Ticket löschen
    strSQL = "DELETE FROM dbo.OS_Tickets " & _
    "WHERE (TicketNr = " & strTicketNrQuelle & ")"

    DoCmd.RunSQL strSQL

    Hier ebenfalls.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Dienstag, 7. Mai 2013 10:02
    Moderator