Neuigkeiten:

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

Mobiles Hauptmenü

Access Benutzerdefinierte Abfragen durch ein Formular

Begonnen von RBFade, November 23, 2016, 17:29:53

⏪ vorheriges - nächstes ⏩

RBFade

Hallo meine lieben Access Freunde!

ich bin auf der suche nach einer Lösung zu meinem derzeitigen Problem. Ich möchte mit einem Formular eine benutzerdefinierte Abfrage aus einer Tabelle starten. Dieses Formular sollte mir anhand der eingegebenen Informationen diese Datensätze auch ausgeben, welche ich dann abspeichern/drucken kann. Aber der Inhalt der Quelltabelle sollte sich ändern können.

Bevor ich weitere Informationen zu meinem Projekt poste würde ich von euch gerne wissen ob das mit einem Formular überhaupt möglich ist.

Danke schonmal für die Hilfe!

MzKlMu

Hallo,
Zitatwelche ich dann abspeichern/drucken kann
ja das geht, aber nochmaliges Abspeichern ist überflüssig.
Gruß Klaus

crystal

Hallo,
also ich verstehe das ungefähr so:
1. du möchtest ein Formular erstellen, in dem der Anwender eigene Abfragen definieren kann.
2. in diesem Formular werden vermutlich einige Vorgaben für Abfragefelder gemacht, z.B. Komboboxen für Firmen oder Produkte oder Projekte, die vielleicht sogar benutzer-(gruppen-)abhängig sind.
3. die Eingaben in diesem Formular sollen letztendlich an ein vorbereitetes Abfragen-Skelett übergeben werden, um
4. ein Ergebnis zu erhalten und dieses Ergebnis dann zu drucken oder sonstwie auszugeben.

Also das würde natürlich gehen, indem du die "frei gestalteten" Abfragen in einer neuen Tabelle speicherst (natürlich nur die ausgewählten bzw. eingegebenen Werte). Dann könnte man immer auf solche Datensätze zurückgreifen - also seine einmal definierte Abfrage immer wieder benutzen.

Im Prinzip musst du nur eine parametrisierte Abfrage erstellen und die Parameter per Formular auswählen/eingeben lassen. Oder du stellst im Formular gewünschte Auswahl-Möglichkeiten zur Verfügung und erstellst daraus per VBA eine Abfrage, die man auch testen (Unterformular) und natürlich auch als Text speichern kann (oder besser nur die ausgewählten Kriterien, aus denen die Abfrage zusammengesetzt wird).

Alles ist möglich, es kommt darauf an, wieviel Freiheit bzw. Freiheitsgrade du dem Anwender überlassen möchtest. Du kannst an der Oberfläche, also im Formular, alle möglichen Daten, Kriterien usw. eingeben und als solche unter irgend einem Namen ("Suche nach Kunde xyz im letzten Monat; Ausgabe als pdf" oder "Suche nach Kunde xyz im letzten Monat; Ausgabe als Liste") abspeichern. Es liegt dann an dir, diese Eingaben dann zur Laufzeit richtig zu interpretieren, ich denke da z.B. an "letzter Monat", und zu einer funktionierenden Abfrage per VBA zusammenzubauen.

Wird sicher nicht ganz einfach werden, kommt eben auf die Freiheitsgrade an...

Wenn du etwas konkreter wirst, kann man dir sicher besser antworten.

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

RBFade

Hey Crystal!

Danke erstmal für deine ausführliche Rückmeldung! :D

So jetzt zu deinen aufgeführten Punkten. Du hast genau verstanden was ich haben möchte. Es ist halt schwierig umzusetzen. Ich besitze schon eine Grundlage in VBA Programmierung, aber nur mit den Forms in der Entwicklungsumgebung. Deswegen sollte man vielleicht auch nochmals nach dem einfacheren Weg unterscheiden, da du ja schon zwei aufgeführt hast.

Jetzt zu meinem Projekt:

Der Anwender hat vor sich eine Benutzeroberfläche, die mit dem Formular-Tool erstellt worden ist.

Um Konkret zu sein sollte das Formular 3 Komboboxen beinhalten:
Die erste Kombobox wählt den Benutzer aus nachdem man filtern möchte, diese sind in der Quelltabelle/Abfrage enthalten.(Plus eine Eingabe falls der Benutzer nicht in der liste steht)
Die zweite Kombobox sollte einen vorgegebenen Zeitraum filtern, bspw. Heute, Gestern, letzte Woche usw.
In der letzten Kombobox ist die Rufnummerart aufgeführt (Intern, Ausland usw.), d.h. die Nummern aus der Quelltabelle werden nochmals gefiltert.

Nach der Auswahl sollte man alles per Knopfdruck (button im Formular) ausgegeben bekommen (Also mit einer Abfrage denke ich) oder im Formular diese per Drucken ausdrucken können.

Das alles mit einer Quelltabelle, welche immer den gleichen Aufbau hat und die ich auch neu einfügen kann oder aktualisieren kann.

Also so viel Freiheit sollte der Benutzer nicht haben.

Ich hoffe mal du kannst dadurch erkennen was ich genau haben möchte.



crystal

Hallo,
also alles klar.
Du brauchst also schlicht ein Formular, in das du deine Komboboxen und Textfelder einfügst.
Lege erstmal eine neue Tabelle an, die folgende Felder (und mehr hat) - Name z.B. "tbl_UserAbfrage" (kürzel UA)
UAId   Autowert
UAText   kurzer Text zur Beschreibung
UAMARefB   Zahl, Referenz auf MA-Tabelle (Besitzer der Abfrage)
UAMARefS   Zahl, Ref. auf MA-Tabelle, MA für die Suche
UAZeitraum   Zahl entspr. Zeitraum-Index in der Kombobox
UANrArt   Zahl entspr. Nummern-Art-Index...

Anhand dieser Tabelle kannst du dann dein Such-Definitions-Formular aufbauen (Phase I). In dieses Formular setzt du noch einen Button "Jetzt ausführen" und ein Unterformular, dass dir die Call-Liste darstellt.

Dann musst du etwas programmieren. Im Click-Event des Buttons musst du die einzelnen Eingaben in eine Abfrage-Gerüst einbauen.
Bsp.
strAbfrage = "Select * from Quelltabelle where Quelltabelle.MA= "&cboMARefS ...
Die fertige Abfrage weist du dann dem Unterformular als Datenquelle zu. Das wars. Hört sich einfach an, ist es aber nicht, besonders der Zeitraum muss anhand der Auswahl berechnet und in ein Where-Statement umgesetzt werden. evtl. mit BETWEEN... Das Wort "Where" darf im gesamten Abfragetext (hier) nur einmal vorkommen, du musst die einzelnen Kriterien also mit "AND" und Klammern zusammensetzen.

So würdest du zumindest schon deine Abfrage-Kriterien in deiner neuen Tabelle speichern und könntest natürlich auch neue anlegen und auf alte zurückgreifen (Navigationbereich unten im Formular).

In Phase II könntest du dann das Formular so verändern, dass zuerst eine Abfrage-Definition (gefiltert durch den Besitzer) ausgewählt wird (Kombobox) und es einen Button "Neu" (und "Löschen") gibt, so dass der Benutzer eben eine neue Definition zufügen oder eine auch löschen kann. (Dann kannst den Navigationsbereich abschalten).

Ich fürchte allerdings, dass du damit als Neuling etwas überfordert bist, es sei denn, du investierst entsprechend Zeit, suchst hier im Forum nach ähnlichen Fragestellungen und arbeitest dich ein.

Ansonsten wäre mein Angebot, dir ein solches Such-Definitions-Formular in deine Anwendung einzubauen, wenn du eine anonymisierte Version zur Verfügung stellst.

lg
crystal

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Beaker s.a.

Hallo crystal,
ZitatIch fürchte allerdings, dass du damit als Neuling etwas überfordert bist, es sei denn, du investierst entsprechend Zeit, suchst hier im Forum nach ähnlichen Fragestellungen und arbeitest dich ein.
Na so schwer ist das dann auch nicht mehr einen im Vorgang generierten Filterstring
in eine tblGespeicherteSuchen abzulegen.
I.Ü. frage ich mich eh, woraus du diese (für mich zusätzliche) Anforderung (Filter zur
Wiederverwendung speichern,Phase II) erlesen hast. Für mich sieht das nach der Frage
nach einem einfachen Formular zur DS-Suche aus; - HFO mit den drei Kombis und ein
UFo zur Anzeige der gefilterten DS.
gruss ekkehard

P.S. Nicht, dass ich die Idee mit den gespeicherten Suchen schlecht finde, - habe ich
selber schon gemacht.
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)

crystal

Hallo Ekkehard,

ZitatI.Ü. frage ich mich eh, woraus du diese (für mich zusätzliche) Anforderung (Filter zur
Wiederverwendung speichern,Phase II) erlesen hast. Für mich sieht das nach der Frage
nach einem einfachen Formular zur DS-Suche aus; - HFO mit den drei Kombis und ein
UFo zur Anzeige der gefilterten DS.

Naja, also erlesen habe ich das rein aus der Vorstellung, wie das in der Praxis angewendet werden soll und aus dem Statement des Fragestellers

ZitatDieses Formular sollte mir anhand der eingegebenen Informationen diese Datensätze auch ausgeben, welche ich dann abspeichern/drucken kann. Aber der Inhalt der Quelltabelle sollte sich ändern können.

Das erschien mir - wenn auch falsch formuliert - als Wunsch, die Abfrage-Kriterien speichern zu können, um sie am nächsten Tag wieder zu benutzen.

Kann sein, dass ich damit falsch lag, aber ich versuche natürlich (wie andere selbstverständlich auch), die eigentliche Idee des Fragestellers zu erahnen, selbst wenn sie nicht eindeutig formuliert wurde.  Und wenn ein Mitarbeiter "seine" Abfrage(n) einmal definiert hat, würde es ja absolut Sinn machen, diese für die wiederholte Anwendung abzuspeichern.

Der Fragesteller hat mir nach meiner Vermutung
ZitatAlso das würde natürlich gehen, indem du die "frei gestalteten" Abfragen in einer neuen Tabelle speicherst (natürlich nur die ausgewählten bzw. eingegebenen Werte). Dann könnte man immer auf solche Datensätze zurückgreifen - also seine einmal definierte Abfrage immer wieder benutzen.

ja auch signalisiert
ZitatDu hast genau verstanden was ich haben möchte.

Und du selbst sagst ja auch
ZitatP.S. Nicht, dass ich die Idee mit den gespeicherten Suchen schlecht finde, - habe ich
selber schon gemacht.

Also braucht der Fragesteller jetzt zunächst ein paar Tipps, wie er ein solches Abfrage-Formular mit einem UFo als Ergebnis-Fenster bauen kann - dazu kann er hier im Forum einige Threads finden.

Wenn er dann die zugrunde liegende Technik gelernt und verstanden hat, ist es nicht mehr schwer, Phasen I und II zu realisieren.

Um ihm diese Lernzeit zu verkürzen mein Angebot, es ihm zu implementieren, damit er das prüfen und mit ein paar "Aha-Effekten" nachvollziehen kann. Meine Idee dabei: gebe ihm eine kleine Lösung und wecke dadurch das Interesse, sich tiefer in Access einzuarbeiten.

lg
crystal



Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Beaker s.a.

Hallo crystal,
Naja, wie man's so liest; - "speichern" war wohl der Auslöser.
Aber hierbei
ZitatDu hast genau verstanden was ich haben möchte.
wäre ich nicht so sicher ob der TS dich genau verstanden hat  ;)
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)

RBFade

Zitat von: Beaker s.a. am November 24, 2016, 15:19:36
ZitatDu hast genau verstanden was ich haben möchte.
wäre ich nicht so sicher ob der TS dich genau verstanden hat  ;)
gruss ekkehard

Es sollte ganz einfach eine Datenbank suche innerhalb eines Formulares sein. Ich glaube schon, dass er mich soweit verstanden hat. Die Umsetzung ist für Neulinge wie mich schon schwierig.


Also das mit dem abspeichern wird von mir auch nicht so dringend gefordert. Solange ich die relevanten Daten die ich haben möchte, mir angezeigt werden bin ich zufrieden.

@crystal

Vielen dank für das Angebot crystal!
Ich wäre bereit dir meine anonymisierte Datei zu zuschicken.
Es ist schwierig sich in etwas einzuarbeiten wenn einem die Erfahrung fehlt.

crystal

Hallo,

OK, die Möglichkeit, die Abfrage-Definition speichern zu können, ist vielleicht zusätzlicher Komfort, macht aber durchaus Sinn, weil Meier vielleicht anders selektieren möchte als Müller. Und es wäre eben auch lästig, jedesmal dasselbe auswählen zu müssen (aus 3 oder mehr Feldern). Da fragt sich doch jeder: wieso kann der Computer sich das nicht merken? (Antwort: weils so nicht programmiert wurde.)

Mein Angebot steht. Sobald du eine anonymisierte DB hast, kannst du sie hier öffentlich hochladen oder mir eine PN schicken.

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...