Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

"Check All"-Button auf Unterformular anwenden

Begonnen von lutschi83, April 26, 2017, 13:24:19

⏪ vorheriges - nächstes ⏩

lutschi83

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.

MzKlMu

Gruß Klaus

lutschi83

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

Frank77

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
Selbstständig = Selbst und Ständig

Josef P.

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

lutschi83

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.

lutschi83

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!

el_gomero

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?
Gruß
Jürgen


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

lutschi83

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.

el_gomero

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
Gruß
Jürgen


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

lutschi83

#10
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.

lutschi83

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.

Lachtaube

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 und ggf. für's fortgeschrittene Stadium Parameterabfrage per VBA öffnen.

PS: wenn Du der Execute-Methode den zweiten optionalen Parameter als dbFailOnError spendierst, wird auch inhaltlich eine Prüfung der Abfrage vorgenommen.
Grüße von der (⌒▽⌒)

Beaker s.a.

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
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)

lutschi83

#14
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