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.
Hallo,
zeige den Filter.
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
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
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
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.
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!
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?
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.
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
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.
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.
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.
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
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
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.
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.