2 Stimmen

Wie verwende ich ein Kontrollkästchen in einem Formular, um einen Datensatz in ein Unterformular in Microsoft Office Access einzufügen?

Ich habe eine Datenbank für ein Teppichunternehmen. Ich habe ein Formular, mit dem der Benutzer ein Angebot erstellen kann, einschließlich der Auswahl des Kunden usw. Es gibt auch ein Unterformular, das sich mit den Produkten und Extras beschäftigt, mit Mengen und Stückpreisen. Um anzugeben, ob der Benutzer eine Anpassung wünscht, gibt es ein Kontrollkästchen. Wenn es angekreuzt ist, möchte ich, dass die Anpassung im Unterformular als eines der Produkte hinzugefügt wird. Die Produkte werden normalerweise manuell über eine Auswahlliste ausgewählt.

Wichtige Eigenschaften sind:
Name des Formulars: Bestellungen
Name des Unterformulars: Unterformular Auftragsdetails
Name des Kontrollkästchens: Einbau
Feldname für Produkte: Produkt-ID
Unterformular verknüpft mit Tabelle: Details zur Bestellung
Das Formular ist mit der Tabelle verknüpft: Bestellungen

Ich gehe davon aus, dass VBA oder die Makroerstellung erforderlich ist.

Auf jeden Fall vielen Dank im Voraus!!

2voto

Fionnuala Punkte 89346

Ich denke, der einfachste Weg ist, eine Append-Abfrage zu verwenden.

If Me.Fitting Then
   strSQL="INSERT INTO [Order Details] (ProductID,OtherTextField) Values ("
         & Me.ProductID & ",'" & Me.OtherTextField & "')"
   CurrentDB.Execute strSQL, dbFailOnError

   Me.[Subform control name here].Form.Requery
End If

1voto

BIBD Punkte 14729

Auf dem Kontrollkästchen-Steuerelement fügen Sie eine [Ereignisprozedur] für das Ereignis "Nach der Aktualisierung" für das Kontrollkästchen hinzu (siehe das Eigenschaftsfenster). Dadurch wird der VBA-Code überflüssig. Klicken Sie auf die Ellipse ("..."), um zum VBA-Code zu gelangen.

Sie können den Code von Remou (nach einer bestimmten Methode) verwenden, um das neue Produkt einzufügen:

If Me.Fitting Then
    strSQL="INSERT INTO [Order Details] (ProductID,OtherTextField) " & _
        "Values (" & _
        Me.ProductID & ",'" & Me.OtherTextField & "')"
    CurrentDB.Execute strSQL, dbFailOnError

    Me.[Subform control name here].Form.Requery
End If
'[code not tested]

Wahrscheinlich möchten Sie aber auch überprüfen, ob das Produkt nicht bereits für den Auftrag existiert (erlauben Ihre Geschäftsregeln, dass mehrere Anproben geplant werden), und Sie möchten vielleicht auch zulassen, dass das Anprobenprodukt entfernt wird, wenn es nicht markiert ist - das könnten Sie mit einer else-Bedingung auf dem if vor dem "end if" tun:

if 'blah
     'blah blah
else
    strSQL="Delete [Order Details] " & _
        "where ProductID = " & Me.ProductID & " " & _
            "and OtherTextField = 'fitting' " 
    CurrentDB.Execute strSQL, dbFailOnError

    Me.[Subform control name here].Form.Requery
end if
'[code not tested]

Sie müssen auch Ihr Unterformular "Produkte" so bearbeiten, dass Sie das Kontrollkästchen aktualisieren, wenn Sie das Produkt "Armatur" daraus löschen (oder so, dass Sie Armaturen nicht auf diese Weise löschen können).

Vielleicht möchten Sie aber auch kein Kontrollkästchen verwenden, sondern die Anpassung einfach als weitere Dropdown-Option, wie bei den anderen Produkten, anbieten. Sie könnten immer dafür sorgen, dass sie automatisch in [Bestelldetails] ausgefüllt wird, wenn eine neue Bestellung erstellt wird, damit sie nicht vergessen werden kann. Dies wäre konsistenter mit dem Rest der Benutzeroberfläche der Produktauswahl.

0voto

JeffO Punkte 7827

Dies ist die No-Code-Lösung:

Deaktivieren Sie das Kontrollkästchen Fitting. Machen Sie die Anprobe zu einem Produkt und fügen Sie es wie alle anderen hinzu. Wenn Sie wissen möchten, ob eine Bestellung eine Anprobe erfordert (ich nehme an, dass Sie deshalb das Kontrollkästchen haben), können Sie eine Abfrage erstellen, um zu sehen, ob die Anprobe eines der Produkte in Ihren Berichten/Rechnungen ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X