collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 128
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 3
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 14471
  • stats Beiträge insgesamt: 72212
  • stats Themen insgesamt: 9746
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Brauche ein paar (Einsteiger-)Tipps für Kombination von Abfragen und Formularen  (Gelesen 6855 mal)

Offline luzidarius

  • Newbie
  • Beiträge: 25
Liebe Forum-Gemeinde
ich habe das Problem, ohne viel Ahnung von Access eine recht ambitionierte Datenbank angelegt zu haben. Jetzt stehe ich vor der Herausforderung, die eingegebenen Daten leicht zugänglich zu machen. Das heißt, Nutzer der Datenbank sollten über leicht zu verstehende Formulare Abfragen bedienen können. Leider ist die Datenbank so aufgebaut, dass man gewünschte Ergebnisse nicht immer über nur eine Abfrage erhalten kann. Vielmehr müssen bisweilen die Abfrageergebnisse einer ersten Abfrage über eine zweite Abfrage gefiltert werden.

Ich hatte mir die Datenbank so vorgestellt, dass man über ein Startformular gefragt wird, was man sucht, und dann entsprechend auf weitere Formulare verwiesen wird, bei denen man Suchkriterien in Feldern oder Kombifeldern angeben kann und dann entsprechend eine Ergebnisliste erhält. Folgende Probleme hatte ich dabei bisher:

-Abfragen aktualisieren sich nicht: Gibt der Nutzer in ein genanntes Feld einen neuen Wert ein, muss er die (alte) Abfrage erst wieder schließen und neu starten, bevor der neue Wert zur Anwednung kommt.

-Nicht ausgefüllte Kriterienfelder gelten weiter als Kriterium: Im Ergebis werden alle Treffer ausgefiltert, wenn kein Wert angegeben ist. Will man also beispielsweise kein Jahr angeben, weil das Jahr für die Suchanfrage unerheblich ist, filtert die Abfrage alle Einträge raus, zu denen ein Jahr angegeben ist (was sie nicht soll).

-Abfragenergebnisse werden immer in neuem Reiter dargestellt: Mir ist es nicht gelungen, wie ich es ursrprünglich vorhatte, Abfragenergebnisse als Liste im unteren Teil des Bildschirms anzuzeigen. Mir schwebte vor, dass man ein Formular hat, in dem man an den Suchkriterien herumspielt, und im unteren Teil, wie ein Unterformular, eine Liste mit den aktuellen Treffern.

Ich weiß, dass dieser Eintrag sehr unpräzise gehalten ist. Ich würde mich aber sehr freuen, wenn hier Leute mit Erfahrungen einfach ein paar Hinweise geben würden, wie ich meinen Zielen näher kommen könnte (möglichst simpel natürlich). Ich habe das Problem, dass alle Einsteigertutorials, die ich angesehen habe, diese Themen nicht oder kaum ausreichend berühren, die meisten Diskussionen hier im Forum jedoch auf einem Niveau geführt werden, dem ich nicht folgen kann.
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23813
Hallo,

Abs. 1) 
Heißt das, die DB besteht z. Z. nur aus Tabellen und Abfrage, ohne Formulare und Berichten?
Sind die Tabellen entspr. den Normalisierungsregeln aufgebaut? Aufeinander aufbauende Abfragen sind eher als Ausnahme denn als Normalfall zu betrachten.
Zeige mal die SQL-Strings einer solchen hierarchischen Abfrage-Kombination.


Abs. 2)
das wäre auch der normale Vorgang. Dabei sollten die Abfragen dynamisch per VBA (Programmierung) zusammengesetzt und mit Hilfe geeigneter Formulare oder Steuerelemente (Listenfelder z. B.) angezeigt werden. Berichte für Ergebnisdarstellung sollten auch nicht vergessen werden.

Abs. 3)
Wenn die Abfrage-Ergebnisse als Abfrage-Ansicht dargestellt werden, wird die Ansicht (die Ergebnisdaten) nur durch ein erneutes Ausführen der Abfrage aktualisiert. Das kann allerdings auch mit dem Button/Menüpunkt "Aktualisieren" erreicht werden.

Abs. 4)
Es könnte helfen, im Kriteriumsfeld etwa solches einzutragen:
=[Bitte Jahreszahl eingeben]  Oder [Bitte Jahreszahl eingeben] ist Null


Abs. 5)
Die "Reiterdarstellung" ist eine Einstellungssache in den Access-Optionen. Mann kann auch die "Reiter" als einzelne separate Fenster innerhalb des Access-Fensters darstellen.

Abs. 6)
Naja,  gewisse Grundkenntnisse an Datenbank-Design, Access-Bedienung und Programmierung wie auch die Benutzung des gleichen "Jargons" sind halt unumgänglich.. Tutorials hier zu vermitteln , ist schwierig und auch nicht angedacht.
 

Offline luzidarius

  • Newbie
  • Beiträge: 25
Hallo
vielen Dank für deine Antwort. Ich versuche mal, auf deine Kommentare zu antworten:

1.: Die DB besteht in erster Linie aus Tabellen. Es bestehen bereits Formulare, die dem Eingeben der Daten gedient haben. Es geht jetzt darum, die Daten zugänglich zu machen.
Die Datenbanktabellen dürften den Normalisierungsregeln entsprechen. Es handelt sich um eine DB, die Personeninformationen zu politischen Versammlungen des 16. Jh. sammelt. Um zu erklären, warum ich zwei Abfragen hintereinander nutze, muss ich kurz den Aufbau der DB in diesem Punkt erklären:
Es gibt eine Tabelle zu den Personen, die alle mehr oder weniger unveränderlichen Daten zu den einzelnen erfassten Personen enthält (wie Name), dann gibt es eine Tabelle, die alle festen Daten zu den Versammlungen enthält (wann, wo, war der Kaiser anwesend?). Dann gibt es eine Tabelle, die jeder Versammlungsteilnahme eines Fürsten einen Datensatz zuordnet. Dies geschieht unabhängig davon, ob der Fürst persönlich da war oder nur über Gesandte. Eine weitere Tabelle verbindet die ID dieser Versammlungsbeteiligungen mit den tatsächlich anwesenden Personen. Also beispielsweise mit den IDs der Personentabelle, die die Gesandten des Fürsten darstellen, und/oder mit dem Fürsten selbst, wenn er selbst zugegen war (eventuell mit weiteren Beratern). Eine weitere Tabelle verknüpft die Beteiligungsdatensätze mit den Personen-IDs der eigentlichen Fürsten. Diese Verbindung steht für die Urheberschaft einer Präsenz. War also ein Fürst persönlich anwesend, wird er in beiden Tabellen mit der Präsenz verknüpft (einmal als Anwesender und nochmal als sein eigener Auftraggeber). Waren nur seine Gesandte bei der Versammlung, wird die Präsenz in der Urhebertabelle mit diesem Fürsten verknüpft, in der Anwesendentabelle jedoch nur mit den Gesandten. Wenn ich die Datenbank nun fragen möchte: Wer war 1529 für den Kurfürsten von Köln auf der Reichsversammlung (inklusive eventuell des Kurfürsten persönlich)? muss ich eine Abfrage starten, bei der die Präsenzen nach den Kriterien ID der Versammlung von 1529 und ID des Kurfürsten in der Urhebertabelle gefiltert werden. In einer zweiten Abfrage (ich habe alles als Accessanfänger mit diesem bequemen aber für Profis sicher abstoßenden Menü gemacht, wo man Abfragen per Drag&drop erstellen kann) lasse ich mir aus der Personantabelle alle Personen anzeigen, deren ID in der Anwesendentabelle mit denjenigen Präsenzen verknüpft ist, die bei der ersten Abfrage herauskamen. Ich habe dazu in dem Abfragemenü die Präsenzen-ID aus der ersten Abfrage als Quelle angegeben.

2.: Das scheint mir der Hauptknackpunkt zu sein. Ich hatte gehofft, das Programm ließe sich auch ohne VBA-Programmierung bedienen.

3.: Deine Formulierung impliziert, dass es andere Wege gibt, sich die Ergebnisse anzuzeigen, als die Abfrage-Ansicht. Welche wären das?

4.: Das hat funktioniert, vielen Dank! "ist Null" bedeutet wohl, dass kein Filter angewandt werden soll?

5.: Da habe ich mich wohl nicht gut ausgedrückt. Ich meine gerade diese separate Ansicht. Ich hätte gerne, dass Abfrageergebnisse angezeigt werden, ohne dass sie mein Formular überdecken. Wenn man also an den Suchparametern rumspielt, sollte sich das auf die unten stehende Ergebnisliste auswirken. Scheint so, wie du schriebst, dass man dann immer einen Aktualisieren-Button verwenden muss.

Kennt jemand ein gutes Tutorial, das einen ein wenig tiefer in die Kombinationsmöglichkeiten von Formular, Abfrage und Bericht einführt? Ich habe das Gefühl, meine DB per Hand ganz gut mit den Abfragen nutzen zu können, muss sie aber bequemer zugänglich machen.
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23813
Hallo,


zu 1.
um das (die Zusammenhänge) ad hoc besser zu verstehen , solltest Du einen Screenshot des Beziehungsfensters machen und hier hochladen. Ich befürchte, es gäbe noch ein paar Anpassungen bzgl. der Normalisierung.  Das ist aber, glaube ich, jetzt nicht das eigentliche Problem.

zu 2.
ein Mindestmaß an VBA (von Makros will ich jetzt nicht sprechen, weil die zwar anfänglich als einfach erscheinen, aber relativ unflexibel sind) ist erforderlich, wenn eine bequeme und optimierte Bedienerführung gewünscht ist.


zu 3.
sagte ich schon: Formulare, Berichte, darin enthaltene Listenfelder (Steuerelemente) etc. In Formularen (und Berichten) kann man auf (dedizierte) Ereignisse (Klicken, Tastendrücke, Aktualisierungsvorgänge, etc.) reagieren, entweder mit Makros oder besser VBA-Code (--> Ereignisprozeduren) , um sinnvolle/gewünschte Reaktionen (-->Ablaufsteuerung) zu erreichen. Schau Dir mal in der Entwurfsansicht und da in den Formulareigenschaften unter Ereignisse die einzelnen Einträge an... Auch jedes Steuerelement hat eine Satz von Ereignissen, die bei diesem Steuerelement auftreten können. Zudem sind die Formulare und Berichte gut zu formatieren, weil sie eben für Darstellungszwecke und im Fall des Formulars für Datenpflege entwickelt wurden.

zu 4.
Nein, nicht in diesem Sinn.  "Null" ist in SQL ( und im Abfrageentwurf, d. h. Datenabfrage , wird immer mit SQL gearbeitet)  ein feststehender Begriff und bedeutet soviel wie "nicht existent").   "Ist Null"   vergleicht ein Feld (einen Feldinhalt, z. B. den des Abfrageparameters [Bitte Jahreszahl eingeben]) daraufhin, ob der Wert existiert oder nicht.  Gibt es keinen Wert  (-->NULL) , dann liefert der Vergleich True und das wiederum bedeutet, dass der Filter für die Abfrage (Where-Condition-Teil der Abfrage-SQL) eben genau diesen Datensatz zurück liefert (anzeigt).


zu 5.
sagte ich auch schon,  in den Access-Optionen einstellen (Optionen/Aktuelle DB/Anwendungsoptionen/Überlappende Fenster). Weitergehend können Formulare und Berichte auch als "Popup-Fenster" (Form-/Bericht-Eigenschaft "Popup") dargestellt werden, befinden sich in diesem Fall also nicht IM Access-Fenster selber, sondern außerhalb und können überall auf dem Bildschirm platziert werden.


In meiner Signatur  und bei anderen Forenmitgliedern findest Du Links (2, 3, 6)  zu solchen "Tutorials".  Weitere Fundgrube wäre z. B. www.yaccess.de

Offline luzidarius

  • Newbie
  • Beiträge: 25
Hallo
nochmal vielen Dank für die Hilfe. Ich werde mir die vorgeschlagenen Tutorials ansehen, ob ich etwas finde, was mir weiterhilft.

zu 1.: Mir dämmert, was du meinst. Ich habe einen Screenshot beigelegt. Aus meiner Sicht müsste man aber auch bei anderem DB-Design zwei Abfragen koppeln. Ich muss in den meisten Fällen erst nach einer bestimmten Menge Datensätze aus der tbl_Gesandtschaften fragen und dann ausgehend von diesem Suchergebnis nach Personen, die mit diesen Datensätzen in Verbindung stehen.

zu 3.: Danke für die Hinweise. An die Möglichkeit, Abfragen wieder als Quellen von Unterformularen anzugeben, hatte ich nicht mehr gedacht. Das könnte hilfreich sein für meine Zwecke. Berichte scheinen mir eher fürs Ausdrucken oder externe Nutzen der Daten geeignet zu sein.

zu 4.: Auch hier nochmal vielen Dank für die Erklärung. Der Filter kommt also zur Anwendung, filtert aber bei fehlendem Suchkriterium nicht aus. Genau das hatte ich benötigt!
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23813
HAllo,

1)
m.E. ist die Tabelle "tbl_Gesandschaftsurheber" überflüssig (,falls es für eine Gesandschaft nur einen Urheber gibt). Die Tabelle "tbl_Gesandtenzuordnung" sollte in "tbl_GesandtschaftenPersonen" umbenannt werden (zeigt besser die Zusammenhänge) und ein weiteres ja/Nein ("istUrheber") enthalten, das die Bedeutung/Sinn der (entfernten) Tabelle "tbl_Gesandschaftsurheber" darstellt.

2)
Dringend nötig ist eine Korrektur der Benamsung in Bezug auf Vermeidung von Sonder- und Leerzeichen, sowie von reservierten Wörtern in den Feldnamen. Zudem wäre es transparenter und führte zu eindeutigen Feldnamen, wenn ein Prefix (Abkürzung des Tabellennamens) vorangestellt wäre, z. B. Vorname --> Pers_Vorname,  ID-Person --> Pers_ID  usw.

3) 
Aufbauende Abfragen sind ja nicht verboten... Oft sind sie nur nicht nötig, derweil sie einschränkende Eigenschaften haben. Wenn solche in Formularen verwendet werden, kann es aber leicht vorkommen, dass Änderungen/Eingaben von Daten nicht mehr möglich sind.

Offline luzidarius

  • Newbie
  • Beiträge: 25
zu 1: Mehrere Urheber sind möglich, auch kann ein Urheber gleichzeitig im Namen anderer abwesender Fürsten ein Beauftragter sein. Die Benennungen sind in der Tat irreführend. Ich sehe derzeit als Alternative zum derzeitigen Aufbau, als Ja/Nein-Felder "Urheber" und "Anwesend" einzubauen. Dann müsste man damit eigentlich alles erfassen, was ich durch die zwei Tabellen abdecken wollte. Hast du Vorschläge, wie man die Tabellen gut zusammenführen kann? Die meisten Felder sind ja gleich. Problematisch ist nur, dass oft Personen bei einer Gesandtschaft in beiden Tabellen stehen, also einmal, weil sie anwesend sind, und andererseits, weil sie Urheber sind.

Zu 3.: Siehst du denn bei der derzeitigen DB eine Möglichkeit, mittels einer einzigen Abfrage beispielsweise zu beantworten, wer alles in einer Gesandtschaft war, die die Kriterien erfüllt: 1. Urheber war eine bestimmte Person, 2. bestimmter Reichstag? Ich sehe nur die Möglichkeit, erst nach der ID der Gesandtschaft zu suchen und dann in einer zweiten Abfrage dieses Ergebnis als Suchkriterium zu verwenden.
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23813
Hallo,

1)

Zitat
Ich sehe derzeit als Alternative zum derzeitigen Aufbau, als Ja/Nein-Felder "Urheber" und "Anwesend" einzubauen. Dann müsste man damit eigentlich alles erfassen, was ich durch die zwei Tabellen abdecken wollte

Das ist wohl zielführend.


3)
(nicht beim derzeitigen Aufbau, eher beim geänderten)  geh einfach in den Abfrageentwurf,  füge alle nötigen Tabellen hinzu, verbinde die über die Schlüsselfelder(falls das noch nicht schon durch die Beziehungs-Definitionen gemacht ist) und setz die Kriterien ein. Dazu braucht es keine 2 Abfragen.


Offline luzidarius

  • Newbie
  • Beiträge: 25
Hallo
noch einmal muss ich wohl nachfragen bezüglich deines letzten Punkts: Wie soll eine solche Abfrage in einem Rutsch funktionieren? Wenn man nach allen Personen fragt, die in der gleichen Gesandtschaft anwesend waren, zu der ein bestimmter Fürst als Urheber eingetragen ist, komme ich auch bei dem neuen Aufbau auf zwei Abfragen: Eine, um die ID der Gesandtschaft zu ermitteln, und eine andere, um die Personen zu ermitteln, die in Verbindung zu dieser Gesandtschaft stehen und die Eigenschaft "Anwesend=ja" haben.
Bei einer Abfrage stehe ich immer vor dem Problem, dass ich pro Tabelle ja nach mehreren Kriterien hintereinander fragen muss, also erstmal: Bei welcher Gesandtschaft ist eine bestimmte Person Urheber? Und dann: Welche Personen erfüllen bei dieser bestimmten Gesandtschaft das Kriterium "anwesend"?
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23813
Hallo,

wenn Du die benötigten Tabellen im Abfrageentwurf  verknüpfst (die Schlüsselfelder miteinander  verbindest), dann kannst Du für jedes Feld in den beteiligten Tabellen entspr. Kriterien setzen.

Offline luzidarius

  • Newbie
  • Beiträge: 25
Verknüpft sind die Schlüsselfelder bereits.
Um bei dem Beispiel zu bleiben, würde ich zunächst eine Personen-ID angeben, nämlich den Urheber, dessen Gesandte ich finden will. Die Abfrage wird mir dann nur diese eine Person auflisten. Ich will aber eine Liste der Gesandten, da stört das Kriterium dieser einen Personen-ID.

Ich würde bisher so suchen:

1. Abfrage:
Tabellen:
-Reichstage (Kriterium: Auszuwählender Reichstag [dessen Datensatzschlüssel])
-Gesandtschaften (kein Kriterium)
-Zuordnungstabelle (Kriterium: Urheber=ja)
-Personentabelle (Kriterium: Personen-ID des Fürsten)

2. Abfrage:
Tabellen:
-Gesandtschaften aus der 1. Abfrage
-Zuordnungstabelle (Kriterium: Anwesend=ja)
-Personentabelle (kein Kriterium, anzuzeigen die Personendaten)


 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23813
Hallo,

zeig mal den SQL-String der Abfrage, die Du zusammengestellt hast...

Offline luzidarius

  • Newbie
  • Beiträge: 25
Hallo
nach längerem hin und her habe ich die Lösung, nach der ich gesucht habe: Man kann Sql-Abfragen mit "WHERE" verschachteln. Das löst die Problematik in allen diskutierten Varianten.
Vielen Dank fürs Antworten und Mitdenken!
 

 

Hilfe!!!!! Brauche dringend jemanden der mir eine Datenbank erstellt!!!

Begonnen von schnappi00Board Access-Hilfe

Antworten: 1
Aufrufe: 3112
Letzter Beitrag Juni 05, 2010, 18:26:40
von DF6GL
Brauche Hile im Verknüpfen eines Formularfeldes mit Tabelle!

Begonnen von pentaforceBoard Access-Hilfe

Antworten: 2
Aufrufe: 2593
Letzter Beitrag August 10, 2010, 16:45:01
von DF6GL
Brauche dringend einen PDF Code der Berichte generiert und komprimiert

Begonnen von Muhtar99Board Bericht

Antworten: 13
Aufrufe: 8074
Letzter Beitrag Oktober 08, 2010, 18:17:10
von database
Schreiben im Formular FEHLERMELDUNG,BRAUCHE DRINGEND HILFE BIS MORGEN!!!

Begonnen von Student587Board Formular

Antworten: 2
Aufrufe: 3003
Letzter Beitrag Januar 13, 2011, 13:30:23
von Student587
Brauche Hilfe beim Kombifeld

Begonnen von asiatBoard Access Programmierung

Antworten: 5
Aufrufe: 4577
Letzter Beitrag März 10, 2011, 08:16:08
von asiat

Advertisment / Werbung - Amazon Affiliate Links