Filtern in einem Access Formular
Hallo zusammen,
ich habe ein Formular basierend auf eine Abfrage im Access zusammengebastelt.
Nun habe ich ein Textfeld für die Eingabe eines Preises eingefügt.
Nach diesem Preis soll in der DB/Abfrage gesucht werden.
Falls dieser Preis nicht existiert soll der nächste Preis angezeigt werden.
Beispiel: Eingabe 2,10 €
Daten:
2,08 €
2,13 €
2,06 €
Hier wäre der gesuchte Preis 2,08€
Wie schreibt man sowas in VBA bzw. gibt es einen Operator oder eine Funktion die soetwas schon kann?
Vielen Dank im Voraus für eure Hilfe!!!
ich habe ein Formular basierend auf eine Abfrage im Access zusammengebastelt.
Nun habe ich ein Textfeld für die Eingabe eines Preises eingefügt.
Nach diesem Preis soll in der DB/Abfrage gesucht werden.
Falls dieser Preis nicht existiert soll der nächste Preis angezeigt werden.
Beispiel: Eingabe 2,10 €
Daten:
2,08 €
2,13 €
2,06 €
Hier wäre der gesuchte Preis 2,08€
Wie schreibt man sowas in VBA bzw. gibt es einen Operator oder eine Funktion die soetwas schon kann?
Vielen Dank im Voraus für eure Hilfe!!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 218150
Url: https://administrator.de/contentid/218150
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
18 Kommentare
Neuester Kommentar
Ja natürlich "´macht" der Button nix. Die Variable P musst du dann schon irgendwie weiterverwenden - wie musst du selber entscheiden.
Und bei dlookup hilft auch mal ein Block in die Access Hilfe oder bei google: http://www.techonthenet.com/access/functions/domain/dlookup.php
Und bei dlookup hilft auch mal ein Block in die Access Hilfe oder bei google: http://www.techonthenet.com/access/functions/domain/dlookup.php
Moin moeSys,
die Tabelle "unerledigte_RB_Pos" wird ja wahrscheinlich nach Rechnungsnummern und/oder Datum sortiert sein - und in dieser logischen Reihenfolge wird ja gesucht.
Wenn die Tabelle zumindest fachlich richtig ist, was ich nicht beurteilen kann, da ich die Tabellenstrukturen und Beziehungen nicht kenne, dann solltest du auf diese Tabelle einen View (bzw. in Access-Sprech "eine Abfrage" ) erzeugen nach dem Muster
oder
Speichern als "unerledigte_RB_Pos_nach_ekp" und diese Quelle in deinem DLookup() verwenden.
Grüße
Biber
die Tabelle "unerledigte_RB_Pos" wird ja wahrscheinlich nach Rechnungsnummern und/oder Datum sortiert sein - und in dieser logischen Reihenfolge wird ja gesucht.
Wenn die Tabelle zumindest fachlich richtig ist, was ich nicht beurteilen kann, da ich die Tabellenstrukturen und Beziehungen nicht kenne, dann solltest du auf diese Tabelle einen View (bzw. in Access-Sprech "eine Abfrage" ) erzeugen nach dem Muster
SELECT [die Felder, die du brauchst]
from unerledigte_RB_Pos
order by EKP;
SELECT distinct ekp as ekp
from unerledigte_RB_Pos
;
Speichern als "unerledigte_RB_Pos_nach_ekp" und diese Quelle in deinem DLookup() verwenden.
Grüße
Biber
Moin MoeSys,
dafür ist ein DLookup nicht geeignet.
Was dein Wunsch-Statement leisten sollte, das wäre sinngemäß ja ein
-> in diesem Beispiel taucht dein Suchwert, die "2,10€" an 4 Stellen auf - du kannst aber einen Parameter nur einmal übergeben bzw. einen übergebenen Parameter nur einmal verwenden..
Schreib ein Stück Code/VBA von Hand, die vorgefertigte DLookup-Funktion kann das nicht.
Und VBA mit zwei einzelnen abgefeuerten Statements wäre in diesem Fall auch schneller als ein um jeden Preis in ein Statement geschraubtes SQL.
Oder revidiere die Anforderungen an die Funktionalität: der nächsthöhere oder der nächstniedrigere Preis ist mit DLookup() kein Thema.
Aber der "am nächsten gelegene Preis".
Was soll denn die fachliche Aussage sein, wenn du einen "nächstgelegenen Preis" gefunden hättest bzw wieso wäre denn "2,09€" eher das einleuchtende Ergebnis als "2,14€"?
Grüße
Biber
dafür ist ein DLookup nicht geeignet.
Was dein Wunsch-Statement leisten sollte, das wäre sinngemäß ja ein
SELECT Min( EKP )
FROM deineEKPAbfrage
WHERE EKP in (
(2.10 - (select min( abs(EKP - 2.10) ) FROM deineEKPAbfrage ) )
, (2.10 + (select min( abs(EKP - 2.10) ) FROM deineEKPAbfrage ) )
);
-> in diesem Beispiel taucht dein Suchwert, die "2,10€" an 4 Stellen auf - du kannst aber einen Parameter nur einmal übergeben bzw. einen übergebenen Parameter nur einmal verwenden..
Schreib ein Stück Code/VBA von Hand, die vorgefertigte DLookup-Funktion kann das nicht.
Und VBA mit zwei einzelnen abgefeuerten Statements wäre in diesem Fall auch schneller als ein um jeden Preis in ein Statement geschraubtes SQL.
Oder revidiere die Anforderungen an die Funktionalität: der nächsthöhere oder der nächstniedrigere Preis ist mit DLookup() kein Thema.
Aber der "am nächsten gelegene Preis".
Was soll denn die fachliche Aussage sein, wenn du einen "nächstgelegenen Preis" gefunden hättest bzw wieso wäre denn "2,09€" eher das einleuchtende Ergebnis als "2,14€"?
Grüße
Biber
Moin MoeSys,
ich hatte dir eine Programmlogik unterstellt, die genau einen Wert erwartet - wenn zwei Werte gleich weit entfernt vom "Wunschwert" sind, dann habe ich mit "SELECT MIN( EKP) ...." den kleineren genommen.
Weil... man spart ja, wo man kann.
Wenn du beide Werte anzeigen willst, dann einfach mit "SELECT EKP FROM..." (also ohne MIN()-Aggregatsfunktion.
Wie aber auch schon oben geschrieben - ich würde es nicht um jeden Preis in EINE SQL-Abfrage quetschen aus Performanzgründen.
Ich würde zuerst mit "SELECT. min( abs(EKP - 2.10) ) FROM deineEKPAbfrage " den kleinsten Abstand vom Wunschwert ermitteln und mit diesem Wert ein zweites Statement hinterherjagen (Statement wie oben, aber das Ergebnis von Statement1 eingesetzt).
Falls du das über irgendeinen VBA-Schnipsel machst.
Grüße
Biber
ich hatte dir eine Programmlogik unterstellt, die genau einen Wert erwartet - wenn zwei Werte gleich weit entfernt vom "Wunschwert" sind, dann habe ich mit "SELECT MIN( EKP) ...." den kleineren genommen.
Weil... man spart ja, wo man kann.
Wenn du beide Werte anzeigen willst, dann einfach mit "SELECT EKP FROM..." (also ohne MIN()-Aggregatsfunktion.
Wie aber auch schon oben geschrieben - ich würde es nicht um jeden Preis in EINE SQL-Abfrage quetschen aus Performanzgründen.
Ich würde zuerst mit "SELECT. min( abs(EKP - 2.10) ) FROM deineEKPAbfrage " den kleinsten Abstand vom Wunschwert ermitteln und mit diesem Wert ein zweites Statement hinterherjagen (Statement wie oben, aber das Ergebnis von Statement1 eingesetzt).
Falls du das über irgendeinen VBA-Schnipsel machst.
Grüße
Biber