Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Suchtextfeld mittels Makro bei Hinzufügen-Schaltfläche zurücksetzen

Begonnen von Paule, Mai 27, 2016, 14:45:32

⏪ vorheriges - nächstes ⏩

Paule

Hallo,

in meinem Warenhaus-Bereich der Datenbank gibt es ein Formular wo man die Warenbewegungen von A nach B eingeben kann.

Bei der Auswahl des Produkt/Teils, welches bewegt wird, habe ich ein "Such-Textfeld" dazwischengeschaltet.

Im Listenfeld mit allen Produkten/Teilen wird dann der Inhalt des Suchtextfeldes als Kriterium genommen sodass nur noch die entsprechenden Teile angezeigt werden, die zur Suche passen (Bsp.: Ich gebe "Ca" ein und er zeigt mir nur noch die Produkte/Teile, die "Ca" im Namen haben).

Der SQL-Code der Abfrage für die Datensatzherkunft für das Listenfeld ist:
SELECT WH_ItemsT.ItemID, WH_ItemsT.ItemName, WH_ItemsT.ItemType
FROM WH_ItemsT
WHERE (((WH_ItemsT.ItemType)=[listType]) AND ((WH_ItemsT.[ItemName]) Like '*ca*'));


Der VBA-Befehl bei dem Ereignis "Bei Änderung" (des Suchtextfeldes) lautet:
Private Sub txtItem_Change()
    Me!listItem.RowSource = "SELECT WH_ItemsT.ItemID, WH_ItemsT.ItemName, WH_ItemsT.ItemType FROM WH_ItemsT WHERE (((WH_ItemsT.ItemType)=[listType])) and ItemName Like '*" & Me!txtItem.Text & "*'"
End Sub


Dies funktioniert insgesamt sehr gut und ohne Probleme.
Allerdings ist es nun so, dass wenn ein neuer Datensatz durch Klicken der Schaltfläche hinzugefügt wurde, die Eingabe aus dem Suchtextfeld dann weiterhin in dem Kriterium der Abfrage für die Datensatzherkunft des Listenfeldes enthalten ist. Gehe ich nun in ein anderes Formular nach Hinzufügen des Datensatzes werde ich gefragt, ob ich die Änderungen am Formular speichern möchte.

Hier müsste ich jetzt immer auf "Nein" klicken um zu verhindern, dass er die Eingabe aus dem Suchtextfeld als Abfragekriterium abspeichert.
Allerdings ist das natürlich etwas nervig mit der Zeit.

Ich würde nun gerne mit Klick auf dem Button nicht nur einen neuen Datensatz hinzufügen, sondern die EIngabe aus dem Suchtextfeld rückgängig machen.
Kann ich so etwas mit dem Makro-Generator erstellen? Oder brauche ich VBA? Ersteres wäre mir lieber, da schon ein Makro bei Klick auf dem Button besteht und ich dieses dann erst wieder in VBA umwandeln müsste.
Meine Suche durch die Makro-Optionen haben nichts Passendes ergeben. Übersehe ich etwas oder muss das zwingend mit VBA gemacht werden?

Danke für eure Hilfe!

Beaker s.a.

Hallo Paul,
Hört sich so an als wäre das Suchfeld an ein Tabellenfeld gebunden.
Nimm das da raus. Suchfelder gehören IMO ungebunden.
Mit Macros kenne ich mich nicht aus, aber ich glaube die Aktion heißt
"Setzen Wert". Der musst Du beibringen das Suchfeld auf "" zu setzen.
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)

Paule

Hallo Ekkehard,

nein, das Suchfeld ist ungebunden.

Mein Listenfeld wird damit nur mit dem Kriterium gefüttert, sodass nicht alle Produkte angezeigt werden (außer ich lasse das Suchfeld leer).

SetzenWert gibt es leider nicht.

Danke trotzdem für deine Idee!

MaggieMay

Hallo,

"SetzenWert" gehört zu den "riskanten" Aktionen, die du per Button einblenden lassen musst.
Freundliche Grüße
MaggieMay

Paule

Hallo,

ah ok, ich habe es gefunden. Danke für den Hinweis.

Ich habe es nun mit "", '', '*', IstNull etc. probiert. Leider funktioniert es immer noch nicht.
Die Abfrage für die Datensatzherkunft des Listenfeldes mit den auszuwählenden Produkten/Teilen speichert nachwievor das zuvor eingetragene "ca" als Kriterium ab. Das Zurücksetzen hat also nicht funktioniert.

Habt ihr eine Idee, woran das liegen könnte?

MaggieMay

Hallo Paule,
Zitat von: Paule am Mai 27, 2016, 14:45:32
Gehe ich nun in ein anderes Formular nach Hinzufügen des Datensatzes werde ich gefragt, ob ich die Änderungen am Formular speichern möchte.
setzt du ein Navigationsformular ein?
Freundliche Grüße
MaggieMay

Paule


Beaker s.a.

Hallo Paul,
ZitatIch habe es nun mit "", '', '*', IstNull etc. probiert. Leider funktioniert es immer noch nicht.
Als erstes; - "IstNull" ist eine Funktion, die einen Wahrheitswert zurück gibt.
Also True oder False. Wenn auf NULL gesetzt werden soll also " = NULL ".

Ansonsten; - wird das Feld denn geleert wenn du es auf "" setzt?

Damit das Listenfeld neu angezeigt wird musst du natürlich auch die
RowSource des Listfeldes neu setzen. Ohne den Filter auf das Suchfeld.

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)

Paule

Zitat von: Beaker s.a. am Mai 28, 2016, 11:10:02
Ansonsten; - wird das Feld denn geleert wenn du es auf "" setzt?

Ja, das Textfeld wird immer leer.
Aber das Problem ist, dass wenn ich beim Anlegen des 1. Datensatzes "ca" eingegeben habe, wird das als Kriterium in der Abfrage zur Datensatzherkunft gespeichert.
Dann ist das Textfeld zwar leer, aber ich sehe in dem Listenfeld trotzdem nur alle Produkte/Teile mit "ca" beim Anlegen des 2. Buchungssatzes. Zumindest bis ich das Textfeld verändere.  :(

SELECT WH_ItemsT.ItemID, WH_ItemsT.ItemName, WH_ItemsT.ItemType
FROM WH_ItemsT
WHERE (((WH_ItemsT.ItemType)=[listType]) [b]AND ((WH_ItemsT.[ItemName]) Like '*ca*'))[/b];


ZitatDamit das Listenfeld neu angezeigt wird musst du natürlich auch die
RowSource des Listfeldes neu setzen. Ohne den Filter auf das Suchfeld.

Ok, macht Sinn. Das geht dann aber nur über VBA - richtig?

Beaker s.a.

Hallo Paul,
Ehrlich gesagt, weiss ich nicht. Ich verwende keine Macros. Sollte aber
auch möglich sein.
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)

Paule

Hallo Ekkehard,

ich hatte nun noch eine Idee.

Ich sage ja zuerst, dass er das Listenfeld gemäß meiner Eingabe in das Suchtextfeld aktualisieren soll:

Private Sub txtItem_Change()
    Me!listItem.RowSource = "SELECT WH_ItemsT.ItemID, WH_ItemsT.ItemName, WH_ItemsT.ItemType FROM WH_ItemsT WHERE (((WH_ItemsT.ItemType)=[listType])) and ItemName Like '*" & Me!txtItem.Text & "*'"
End Sub


Nun könnte ich ja mit dem Ereignis Bei Klicken folgendes tun:

Private Sub Befehl52_Click()
    DoCmd.GoToRecord , , acNewRec
Me!txtItem = ""
    Me!listItem.RowSource = "SELECT WH_ItemsT.ItemID, WH_ItemsT.ItemName, WH_ItemsT.ItemType FROM WH_ItemsT"
End Sub


Das funktioniert auch jetzt genau so, wie es sein soll. :)


Beaker s.a.

Hallo Paul,
Ja, genau so geht es. VBA ist doch deutlich einfacher zu handeln als
diese blöden Macros.
Noch eine Kleinigkeit, - gib deinen Steuerelementen sprechende Namen.
Bei so was wie "Befehl52" weisst du irgendwann nicht mehr, was da
passieren soll.
gruss ekkehard

P.S. zum anderen Thema komme ich später, bastele da noch dran rum.
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)