Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: lutschi83 am April 26, 2017, 13:24:19

Titel: "Check All"-Button auf Unterformular anwenden
Beitrag von: lutschi83 am April 26, 2017, 13:24:19
Hallo Leute,
ich habe ein Formular frm_invoice_create mit einem Unterformular subform_invoice. Wenn ich im Hauptformular den Distributor auswähle, dann werden die Datensätze im Unterformular gefiltert. Nun möchte ich, dass bei allen gefilterten Datensätze das Ja/Nein-Feld "Status_invoiced" auf JA (True) gesetzt wird.
Könnt ihr mir bitte dabei helfen?
Vielen Dank schon einmal im Voraus.
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: MzKlMu am April 26, 2017, 16:54:58
Hallo,
zeige den Filter.
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: lutschi83 am April 27, 2017, 07:53:40
Hallo,

also einmal habe ich folgenden Filter
Private Sub btn_filter_Click()
Dim strVon As String
Dim strBis As String
Dim strKrit As String
Dim strkrit2 As String
    If IsDate(Me.txtvon) And IsDate(Me.txtbis) Then
        strVon = Format(Me!txtvon, "\#yyyy\-mm\-dd\#")
        strBis = Format(Me!txtbis, "\#yyyy\-mm\-dd\#")
        strKrit = "delivery_note_date Between " & strVon & " AND " & strBis
        strkrit2 = " and distributor='" & Me!distributor & "'"
        Forms!frm_invoice!subfrm_invoice.Form.Filter = strKrit & strkrit2
        Forms!frm_invoice!subfrm_invoice.Form.FilterOn = True
        Else
        Forms!frm_invoice!subfrm_invoice.Form.Filter = ""
        Forms!frm_invoice!subfrm_invoice.Form.FilterOn = False
    End If
Forms!frm_invoice!subfrm_invoice.Requery
End Sub

Dieser funktioniert irgendwie nicht  :'(
und dann habe ich noch diesen Filter:
Private Sub distributor_AfterUpdate()
If Nz(Me!distributor) <> "" Then
Me!subfrm_invoice.Form.Filter = "distributor='" & Me!distributor & "'"
Me!subfrm_invoice.Form.FilterOn = True
Else
Me!subfrm_invoice.Form.FilterOn = False
End If
Forms!frm_invoice!subfrm_invoice.Requery
End Sub
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: Frank77 am April 29, 2017, 18:21:00
Hallo! vieleicht hilft die das weiter, musst mal testen

Gruß Frank
Private Sub btn_filter_Click()
    If IsDate(Me!txtvon) Then
        strFilter = strFilter & " AND delivery_note_date >= " & Format$(Me!txtvon, "\#yyyy\-mm\-dd\#")
    End If
    If IsDate(Me!txtbis) Then
        strFilter = strFilter & " AND delivery_note_date <= " & Format$(Me!txtvon, "\#yyyy\-mm\-dd\#")
    End If
    If Len(Me!Me!distributor) > 0 Then
        strFilter = strFilter & " AND distributor = '" & Me!distributor & "'"
    End If
    If Len(strFilter) > 0 Then
        strFilter = Mid(strFilter, 6)
        With Me!subfrm_invoice.Form
            .Filter = strFilter
            .FilterOn = True
            .Requery
        End With
    Else
        With Me!subfrm_invoice.Form
            If .FilterOn = True Then
                .FilterOn = False
                .Requery
            End If
        End With
    End If
End Sub



Private Sub distributor_AfterUpdate()
    If Len(Me!distributor) > 0 Then
        With Me!subfrm_invoice.Form
            .Filter = "distributor = '" & Me!distributor & "'"
            .FilterOn = True
            .Requery
        End With
    Else
        With Me!subfrm_invoice.Form
            If .FilterOn = True Then
                .FilterOn = False
                .Requery
            End If
        End With
    End If
End Sub
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: Josef P. am April 29, 2017, 20:40:37
Hallo!

Falls die Daten im Unterformular bearbeitbar sind, könntest du dessen Recordset durchlaufen und das Datenfeld auf True setzen.

Falls die Datenquelle keine Änderung erlaubt, könntest du den Formularfilter inkl. eventuell in der Datenquelle enthaltene Filter für eine Update-Anweisung verwenden.

Falls das auch nicht möglich ist, könntest du die Primärschlüsselwerte aus dem Formular ermitteln und damit eine Update-Anweisung ausführen.

Wenn du beschreibst, wo du Probleme hast, dein Vorhaben umzusetzen, kann besser geholfen werden.

mfg
Josef
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: lutschi83 am Mai 04, 2017, 10:35:13
Zunächst einmal Danke Frank77, aber leider funktioniert dein Code nicht bei mir.
Die Daten im Unterformular sind editierbar. Mein Problem ist, dass mein oben aufgezeigter Filter nicht funktioniert. Der "Datumsfilter" liefert kein Ergebnis und ich benötige dann noch einen Button "check all", der die gefilterten Ergebnisse den Status "invoiced", welches ein JA/Nein-Feld ist,  auf "ja" setzt.
Ich hoffe ich konnte es einigermaßen erklären.
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: lutschi83 am Mai 08, 2017, 11:54:01
Hallo,

ich habe es mit folgendem code Private Sub btncheck_Click()
     Dim dbs As Database

Set dbs = CurrentDb

    dbs.Execute "UPDATE qry_for_invoice SET status_invoiced = -1 WHERE status_invoiced = 0 ;"

dbs.Close

End Sub
hinbekommen, dass alle Werte "angehakt" werden. Bei meiner manuellen Aktivierung der Schaltfläche Status_invoiced hab ich aber noch folgende Prozedur angehängt:
Private Sub status_invoiced_AfterUpdate()
If Me.status_invoiced = True Then
Me.invoice_number.Value = Forms!frm_invoice_create!invoice_number
Me.invoice_number_id.Value = Forms!frm_invoice_create!ID
End If

End Sub

Wie bekomme ich nun hin, dass dies ebenfalls mit dem Button "btncheck" geschieht.
Ich habe die Prozedur einfach mal hinten angehängt, doch dann funktionert der Button überhaupt nicht mehr!

Hat jemand eine Lösung dafür?

Vielen Dank schon einmal im Voraus!
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: el_gomero am Mai 08, 2017, 12:06:29
Hallo,

erste Prozedur überarbeitet:


Private Sub btncheck_Click()
     Dim dbs As DAO.Database

Set dbs = CurrentDb

    dbs.Execute "UPDATE qry_for_invoice SET status_invoiced = -1 WHERE status_invoiced = 0 ;"

SET dbs = nothing

End Sub


Zur 2. gibt es zuwenig Infos. Einzel- Endlosform? Wie sah dein gescheitertet Versuch aus? Was soll der Sinn der Aufgabe sein?
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: lutschi83 am Mai 08, 2017, 13:28:04
Hi, erstmal danke für die Überarbeitung.
Der gescheiterte Versuch sah wie folgt aus:
Private Sub btncheck_Click()
     Dim dbs As Database

Set dbs = CurrentDb

    dbs.Execute "UPDATE qry_for_invoice SET status_invoiced = -1 WHERE status_invoiced = 0 ;"

dbs.Close
If Me.status_invoiced = True Then
Me.invoice_number.Value = Forms!frm_invoice_create!invoice_number
Me.invoice_number_id.Value = Forms!frm_invoice_create!ID
End If
End Sub

Die Daten kommen aus einer Abfrage und sind in einem Unterformular angezeigt. Wenn der Status_invoiced = true ist, dann sollen sie die Rechnungsnummer zugeordnet bekommen. Dies soll automatisch passieren. Es funktioniert wenn ich das Häkchen manuell setze. Ich hätte es halt gern zusätzlich wenn "check_all" geklickt wird.
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: el_gomero am Mai 08, 2017, 14:30:54
so wie ich das jetzt verstehe, sollen alle DS mit Status invoiced = True die ID und invoice_number aus dem aktuell geladenen DS im Form erhalten ... das wäre dann auch per Aktualisierungsabfrage zu lösen


dbs.execute "UPDATE DeineTabelle SET invoice_number = " & Forms!DeinForm!invoice_number & ", invoice_number_id = " & Forms!DeinForm!invoice_number_id
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: lutschi83 am Mai 08, 2017, 14:44:54
Danke dafür, aber irgendwie funktioniert dies nicht. Zudem benötige ich auch noch vorher einen Datumsfilter auf dem Hauptformular! Hat dies dann irgendeinen Einfluss darauf? Folgenden Code habe ich dafür Private Sub btn_filter_Click()
Dim strVon As String
Dim strBis As String
Dim strKrit As String
Dim strkrit2 As String
    If IsDate(Me.txtvon) And IsDate(Me.txtbis) Then
        strVon = Format(Me!txtvon, "\#yyyy\-mm\-dd\#")
        strBis = Format(Me!txtbis, "\#yyyy\-mm\-dd\#")
        strKrit = "delivery_note_date Between " & strVon & " AND " & strBis
        strkrit2 = " and distributor='" & Me!distributor & "'"
        Forms!frm_invoice!subfrm_invoice.Form.Filter = strKrit & strkrit2
        Forms!frm_invoice!subfrm_invoice.Form.FilterOn = True
        Else
        Forms!frm_invoice!subfrm_invoice.Form.Filter = ""
        Forms!frm_invoice!subfrm_invoice.Form.FilterOn = False
    End If

Doch leider funktioniert dieser nicht.
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: lutschi83 am Mai 24, 2017, 10:35:23
Private Sub btncheck_Click()
     Dim dbs As DAO.Database

Set dbs = CurrentDb

dbs.Execute "UPDATE qry_for_invoice SET status_invoiced = -1 WHERE status_invoiced = 0 ,"
dbs.Execute "UPDATE qry_for_invoice SET invoice_number = Forms!frm_invoice_create!invoice_number,"
dbs.Execute "UPDATE qry_for_invoice SET ID = Forms!frm_invoice_create!invoice_number_id ,"
Set dbs = Nothing

End Sub


Warum funktioniert dieser Code nicht? Wenn ich die zweite und dritte Zeile weglasse, also nur den Status_invoiced ändern lasse, klappt es.
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: Lachtaube am Mai 24, 2017, 12:39:48
Es wundert mich, dass das Komma am Ende des Abfragetextes nicht angemeckert wird. Da darf - muss aber nicht - allerhöchstens ein Semikolon (;) verweilen. Ansonsten löst eine in VBA ausgeführte Abfrage keine Formularbezüge auf. Entweder setzt Du selbst den Parameter ein oder Du lässt Dir durch die Eval-Funktion helfen. Siehe: Ein Parameter wurde erwartet (http://www.donkarl.com/FAQ/FAQ6VBA.htm#6.4) und ggf. für's fortgeschrittene Stadium Parameterabfrage per VBA öffnen (http://www.donkarl.com/FAQ/FAQ6VBA.htm#6.16).

PS: wenn Du der Execute-Methode den zweiten optionalen Parameter als dbFailOnError spendierst, wird auch inhaltlich eine Prüfung der Abfrage vorgenommen.
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: Beaker s.a. am Mai 25, 2017, 02:17:47
Hallo,
Was Lachtaube sagen will,
Zitatdbs.Execute "UPDATE qry_for_invoice SET invoice_number = " & Forms!frm_invoice_create!invoice_number
dbs.Execute "UPDATE qry_for_invoice SET ID =  " & Forms!frm_invoice_create!invoice_number_id
gruss ekkehard
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: lutschi83 am Mai 31, 2017, 09:15:28
Hallo Leute,

also leider funktioniert
dbs.Execute "UPDATE qry_for_invoice SET invoice_number = " & Forms!frm_invoice_create!invoice_number
dbs.Execute "UPDATE qry_for_invoice SET ID =  " & Forms!frm_invoice_create!invoice_number_id

auch nicht. Bitte, kann mir vielleicht jemand eine Möglichkeit zeigen, wie ich die Invoice_Number und ID mit dem Check-All-Button in das Unterformular bekomme?! Bitte, ich bin total am verzweifeln!

Im Grunde möchte ich eigentlich "nur", dass folgender Code
Private Sub status_invoiced_AfterUpdate()
If Me.status_invoiced = True Then
Me.invoice_number.Value = Forms!frm_invoice_create!invoice_number
Me.invoice_number_id.Value = Forms!frm_invoice_create!ID
End If

End Sub

für alle gefilterten Datensätze im Unterformular via "check-all-Button" ausgeführt wird. Im Moment muss ich das ja für jeden Datensatz manuell machen.

Ich wäre sehr dankbar für eure Hilfe! Vielen vielen Dank schon einmal
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: DF6GL am Mai 31, 2017, 09:33:39
Hallo,

kannst Du nochmal kurz beschreiben, was Du eigentlich genau erreichen willst?


Zitatwie ich die Invoice_Number und ID mit dem Check-All-Button in das Unterformular bekomme


Wozu?  Die ID wird (automatisch) in das UFO übertragen, wenn die Eigenschaften des UFO-Steuerelementes "Verknüpfen von/nach" auf die entspr. Schlüsselfelder gesetzt sind.


Die InvoiceNumber braucht es nicht im UFO, die ist schon im HFO  (das alles, wenn es sich um eine HFO/UFO-Konstruktion (HFO==Rechnungstabelle,  UFO==Positionentabelle)


Abgesehen davon, dass es sehr "gefährlich" (unklar, weil keine klare Definition eines DS) ist, Abfragen zu aktualisieren, würde ich eher so schreiben:

dbs.Execute "UPDATE tblInvoices SET invoice_number = '" & Me!invoice_number & "'  Where ID =  " & Me!invoice_number_id
"   

wobei "invoice_number" als Datentyp TEXT angenommen ist.


Unklar ist (mir) grundsätzlich, wozu Du überhaupt die Aktualisierung brauchst.
Titel: Re: "Check All"-Button auf Unterformular anwenden
Beitrag von: lutschi83 am Juni 07, 2017, 12:02:39
Hallo Leute,

ich hab euch mal meine Datenbank angehängt.
Beim Button "Check all" möchte ich, dass die Invoice-Nummer vom Hauptformular und die "Häkchen" für invoiced gesetzt werden.

Vielen Dank schon einmal für eure Hilfe.