Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Filtern in einem Access Formular

Mitglied: MoeSys

MoeSys (Level 1) - Jetzt verbinden

30.09.2013 um 13:22 Uhr, 3327 Aufrufe, 18 Kommentare, 3 Danke

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

Mitglied: SlainteMhath
30.09.2013 um 13:32 Uhr
Moin,

Versuch's doch mal mit der Funktio "dlookup" oder der .Filter Eigentschaft des Formulars.

lg,
Slainte
Bitte warten ..
Mitglied: MoeSys
30.09.2013 um 14:06 Uhr
Hi Slainte,

die Filtereigenschaften des Formulars können sowas nicht und wie ich das mit "dlookup" realisieren soll wüsste ich jetzt auch nicht, aber vll stehe ich ja nur auf n Schlauch....

Nochmal zum Verständnis: ich will mich dem eingegebenen Wert annähern
d.h. wenn dieser Wert nicht drin steht soll der nächste (der dieser Eingabe am nächsten ist) genommen werden.

Schönen Gruß
Bitte warten ..
Mitglied: Joe2011
30.09.2013 um 14:29 Uhr
Moin Moin,

dazu eine Frage:

was ist näher an 2,10 €: 2,09 € oder 2,11 €?

Zuerst nach oben oder unten annähern? Kaufmännische Rundung? Rundung auf wieviele Dezimalstellen (nur zum Rechnen)?

Das soll mehr eine Gedankenstütze als eine Lösung sein. Die Lösung haben bestimmt schlauere Köpfe.

Gruss


Joe
Bitte warten ..
Mitglied: SlainteMhath
30.09.2013 um 14:41 Uhr
In etwa so:
Bitte warten ..
Mitglied: MoeSys
30.09.2013 um 14:46 Uhr
Hey Joe,

also wenn 2,09€ und 2,11€ rauskommt dann kommen andere Kriterien dazu, z.B. Preislistendatum etc.
2 Dezimalstellen dürfen auch nur eingegeben werden also keine Rundung ;)

Danke für deine Hinweise!!!
Bitte warten ..
Mitglied: MoeSys
30.09.2013 um 14:48 Uhr
aaah OK versuche ich gleich mal... DANKE!!
Bitte warten ..
Mitglied: MoeSys
30.09.2013 um 15:52 Uhr
das bekomme ich so nicht hin... der button macht gar nix (also nicht mal eine Fehlermeldung)
Was genau ist denn "Preis"? das Feld in der DB oder soll ich das einfach so stehen lassen?
Bitte warten ..
Mitglied: SlainteMhath
01.10.2013 um 08:35 Uhr
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
Bitte warten ..
Mitglied: MoeSys
01.10.2013 um 13:53 Uhr
erstmal danke für deine tipps... wie du schon mitbekommen hast ist dies nicht mein Fachgebiet, ich bin hier der totale DAU...
Nichts desto trotz würde ich gerne nachvollziehen was du meinst..

hier mein angepasster code, vielleicht siehst du ja was ich falsch mache/verstehe.

Dim p As Long

p = Nz(DLookup("Ekp", "unerledigte_RB_Pos", "Ekp=txtEingabePreis"), 0)
If p = 0 Then
p = Nz(DLookup("Ekp", "unerledigte_RB_Pos", "Ekp>txtEingabePreis"), 0)
If p = 0 Then
p = Nz(DLookup("Ekp", "unerledigte_RB_Pos", "Ekp<txtEingabePreis"), 0)
End If
End If
'MsgBox "" & p & ""

Wie du siehst lass ich mir p zum Schluss anzeigen...
Wenn ich nun 2,11€ eingebe dann ist p = 2... obwohl die Abfrage genau diesen Wert (2,11€) enthält!!!

D.h. wenn ich das so schreibe:

Me.Form.Filter = "Ekp = " & Me!txtEingabeMenge & "
Me.Form.FilterOn = True

dann bekomme ich genau das gewünschte Ergebnis, funktioniert natürlich nur wenn dieser Wert in meiner Abfrage vorkommt...

Wie kann ich "Full Gas DAU" deine Methode so anpassen dass der gewünschte Effekt erzielt wird ;)
Bitte warten ..
Mitglied: SlainteMhath
01.10.2013 um 13:59 Uhr
IM Doolkup muss es auch

... "Ekp<" & txtEingabePreis ...

lauten.
Bitte warten ..
Mitglied: MoeSys
02.10.2013 um 10:34 Uhr
Oh ja da haste natürlich Recht, hätte ich auch drauf kommen können.
Das DLookup habe ich nun zum Laufen gebracht danke deiner Unterstützung

Leider funktioniert es damit nicht so wie ich mir das vorstelle.
wenn ich z.B. 2,10 eingebe und in der DB sind 2,11 / 2,12 etc hinterlegt dann spuckt er hierdurch:
p = Nz(DLookup("Ekp", "unerledigte_RB_Pos", "Ekp>txtEingabePreis"), 0)
den ersten Preis den er in der DB findet der größer 2,10 ist, also auch 16,50 (als Beispiel)...

Kann man ihm vll sagen dass er erst die ganze Spalte durchsuchen und nicht beim ersten Wert stehen bleiben soll?
Bitte warten ..
Mitglied: Biber
02.10.2013, aktualisiert um 15:36 Uhr
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
Bitte warten ..
Mitglied: MoeSys
02.10.2013 um 15:45 Uhr
Hey Biber,

Danke für den Hinweis!!
Genau das habe ich auch schon gemacht, ich komme dem Ganzen schon näher

Was nun immer noch ein kleines Problem ist:
Wenn ich 2,10€ suche und die Abfrage enthält folgende Werte
2,09€
2,14€
2,16€
dann bekomme ich mit dem aktuellen DLookup den Wert 2,14€ zurück und nicht 2,09€, was ja näher an 2,10€ wäre und damit richtiger...

Schönen Gruß
Bitte warten ..
Mitglied: Biber
02.10.2013, aktualisiert um 17:39 Uhr
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
Bitte warten ..
Mitglied: MoeSys
11.10.2013 um 11:37 Uhr
Hi Biber,

der Code macht genau das was ich brauche, DANKE!!


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€"?

einfach nur weil 2,09€ näher an 2,10€ ist...
der Hintergrund ist folgender:
Man kalkuliert Produkte/Maschinen und bietet diese an.
Die Angebote gelten relativ lange, teilweise mehrere Jahre.
Wenn der Kunde nun nach einem Jahr bestellt versucht man den damals kalkulierten Preis zu halten, obwohl sich in der Zwischenzeit die Materialpreise geändert haben.
Deshalb muss man nach dem "nächstgelegenen Material-Preis" suchen um sich dem damaligen Angebotspreis zu nähern.
Manchmal zahlt man eben auch drauf....

Schönen Gruß
MoeSys
Bitte warten ..
Mitglied: MoeSys
11.10.2013 um 11:52 Uhr
Eins noch:

Wenn ich nun nach 2,05 suche und in der Abfrage sind die Werte 2,04 und 2,06 enthalten dann spuckt mir das Statement 2,04 aus. Passt ja auch soweit.
Schöner wäre es jedoch wenn ich beide Werte angezeigt bekommen könnte.

LG
MoeSys
Bitte warten ..
Mitglied: Biber
11.10.2013, aktualisiert um 23:00 Uhr
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
Bitte warten ..
Mitglied: MoeSys
14.10.2013 um 09:38 Uhr
Hi Biber,

vielen Dank für die hilfreichen Tipps, funktioniert besten

Schönen Gruß
MoeSys
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Access 2016: Formular richtig umbenennen
gelöst Frage von honeybeeMicrosoft Office1 Kommentar

Hallo, wenn das Formular in Access in der Formularansicht angezeigt wird, ist auf der Registerkarte des Formulares ein anderer ...

VB for Applications

Access-Formular über Checkbox neu sortieren

gelöst Frage von AximandVB for Applications4 Kommentare

Hallo, ich tätige meine ersten Anfänge in Access und brauche mal den ein oder anderen Denkanstoß, da ich im ...

JavaScript

Jquery Formular absenden

gelöst Frage von tobmesJavaScript1 Kommentar

Hi Experten, ich versuche mich gerade an jquery. Ich habe bis jetzt die Formular immer direkt mittels PHP übermittelt. ...

PHP

Komplexes WP Formular

Frage von pcguyPHP4 Kommentare

Guten Morgen Ich möchte ein komplexes Formular in Wordpress erstellen, das nur der Admin benutzen darf. Die Daten aus ...

Neue Wissensbeiträge
Microsoft Office

Office 365 Makro Schutz nicht immer per GPO möglich

Information von sabines vor 2 TagenMicrosoft Office5 Kommentare

Der zum Schutz gegen Verschlüsselungstrojaner wichtige Makroschutz lässt sich wohl in Office 365 nicht immer per GPO einstellen. Für ...

Netzwerkmanagement
How To Mikrotik Netinstall
Erfahrungsbericht von areanod vor 4 TagenNetzwerkmanagement

Jedes Mal wenn ich Netinstall längere Zeit nicht benutzt habe stolpere ich über die „Besonderheiten“ dieser Software. Das ist ...

Microsoft
Microsoft: LDAPS per Update als Default
Information von em-pie vor 4 TagenMicrosoft2 Kommentare

Hallo, Microsoft wird mit einem der zukünftigen Updates LDAP auf LDAPS per Default umstellen. Admins von angebundenen Systemen die ...

Humor (lol)

Funny: Warum es immer schwieriger wird, die richtigen Produkte online zu finden

Information von Dilbert-MD vor 6 TagenHumor (lol)21 Kommentare

Wir befinden uns in der Rubrik "Off Topic - Humor" und in 15 Minuten ist Freitag. und ja, es ...

Heiß diskutierte Inhalte
Netzwerkgrundlagen
Reichweite bei Netzwerkdruckern mit Kupfer
gelöst Frage von OIOOIOOIOIIOOOIIOIIOIOOONetzwerkgrundlagen32 Kommentare

Guten Tag, aus gegebenem Anlass, möchte ich euch fragen, was aus eurer Sicht, eine akzeptable Reichweite bei einem Netzwerkdrucker ...

Visual Studio
Aufgabenplaner führt Programm inkorrekt aus
Frage von TallerBiskusVisual Studio22 Kommentare

Hallo Leute :) Ich habe ein sehr seltsames Phänomen. Folgende Gegebenheiten : Wir haben einen Windows Server 2012 R2 ...

Windows Tools
Autologoff Local User Windows 10 bei idle Time von 900 Sekunden
Frage von Hendrik2586Windows Tools19 Kommentare

Hallo ihr lieben. :) Ich hatte das Thema schon mal vor einer Weile, aber nun muss ich es nochmal ...

Server-Hardware
Neuer Server - Meinung
gelöst Frage von hukimanServer-Hardware18 Kommentare

Hallo Zusammen, für einen Kunden stelle ich aktuell den ersten Server zusammen, den ich selbst verkaufe. Es soll ein ...