Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Sonnensalat am März 22, 2016, 17:52:27

Titel: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: Sonnensalat am März 22, 2016, 17:52:27
Hallo zusammen,

ich habe jetzt schon sehr lange versucht ohne fremde Hilfe auszukommen, aber bevor der Bildschirm aus dem Fenster fliegt lasse ich mir doch lieber helfen!  ::)

Mein für mich unerreichbares Ziel ist folgendes:

Beim öffnen der DB gelangt man auf ein Formular, über welches man zu 4 weiteren Formularen (bzw. den entsprechenden Tabellen) gelangt.
In diesen Formularen habe ich schon eine geeignete Suchfunktion hinbekommen, möchte aber über das Startformular ganz bequem den gesuchten Datensatz in dem dazugehörigen Formular angezeigt bekommen. Zum Anfang reicht mir eine vereinfachte Suche über lediglich zwei Felder, der Apparatebezeichnung und der Revisionsnummer (sind insgesamt ca 100 Felder).

Die beiden Felder haben in allen Tabellen allerdings andere Bezeichnungen, was prinzipiell kein Problem darstellt, da ich die in der Abfrage ja auswählen kann. Mir fehlt nur der Trick ein Makro mit einer Abfrage zu kombinieren - glaube ich. ;D

Zusammengefasst:
1.vom Einstiegsformular ein Befehlsfeld anklicken
2.ein Eingabefeld soll sich öffnen
3.der gesuchte Begriff "xy 1234" wird eingegeben mit Enter bestätigt
4.und es öffnet sich das gewünschte Suchergebnis in dem jeweiligen Formular (alle 4 sind unterschiedlich)

Vorab vielen Dank!

Sonnensalat
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: MzKlMu am März 22, 2016, 18:44:25
Hallo,
kannst Du das mal etwas ausführlicher erklären ?
Wie ergibt sich der Zusammenhang zwischen dem Suchbegriff und dem zu öffnenden Formular ?
Wieso kann ein Suchbegriff in 4 Formularen (bzw. Tabellen) vorkommen ?
In einer Datenbank sollte ein Suchbegriff nur in einer Tabelle vorhanden sein.
Wie unterscheiden sich die Formulare ?

100 Felder in einer Tabelle ?
Wie bekommt man in einer Datenbanktabelle 100 Felder zusammen ?
Bist Du sicher, dass das Datenmodell stimmt ?
Zeige mal ein Bild des Beziehungsfensters.
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: JotGe am März 23, 2016, 01:16:31
Hallo Sonnensalat,
Zitat2.ein Eingabefeld soll sich öffnen
erfolgt die Eingabe über eine Inputbox oder über ein eigeständiges Formular?
Zitat3.der gesuchte Begriff "xy 1234" ....
hat der Suchbegriff eine bestimmte Struktur?
Zitat4.und es öffnet sich das gewünschte Suchergebnis in dem jeweiligen Formular (alle 4 sind unterschiedlich)
spätestens ab diesem Schritt ist m.E.ein zweites Kriterium erforderlich, welches entweder vor dem Suchbegriff, oder direkt mit dem ihm eingegeben werden muß und an eine Variable übergeben wird, damit das richtige Formular geöffnet wird.
Hier würde sich die CaseSelect Anweisung anbieten.
Ich habe mal eine Volltextsuche beigefügt, vieleicht hilft diese beim Verstehen weiter.

Gruß JG.
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: Beaker s.a. am März 23, 2016, 15:37:56
Hallo JG,
Zitatspätestens ab diesem Schritt ist m.E.ein zweites Kriterium erforderlich,
Eigentlich nicht. Er weiss doch welche Tabelle zu welchem Formular gehört.
Es müssen ja eh die vier Tabellen/Abfragen der Reihe nach durchsucht werden
(per VBA). Sowie da ein Ergebnis feststeht kann er das zugehörige
Form öffnen. Voraussetzung natürlich, dass der Suchbegriff nur in einer
Tabelle enthalten ist, - ansonsten hast Du natürlich Recht.

@Sonnensalat
Beantworte Klaus' Fragen, - da lösen sich bestimmt einige Probleme auf,
wenn das Datenmodell stimmt.

gruss ekehard
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: Sonnensalat am März 23, 2016, 15:43:10
Danke für die schnellen Antworten!

Zitat von: MzKlMu am März 22, 2016, 18:44:25
Wie ergibt sich der Zusammenhang zwischen dem Suchbegriff und dem zu öffnenden Formular ?

So ganz verstehe ich deine Frage nicht. Die Eingabe soll über eine Inputbox erfolgen. Die Abfrage soll über 4 Tabellen in jeweils zwei Felder laufen und das Ergebnis im Formular angezeigt werden.

Zitat von: MzKlMu am März 22, 2016, 18:44:25
Wieso kann ein Suchbegriff in 4 Formularen (bzw. Tabellen) vorkommen ?
In einer Datenbank sollte ein Suchbegriff nur in einer Tabelle vorhanden sein.

Die Datenbank wurde 2003 erstellt und ich habe sie so übernommen und darf das jetzt ausbaden. Es wurden damals nicht alle Überlegungen wie sie auszsehen hat umgesetzt. Auch wurde Sie nicht weiterentwickelt/gepflegt. Aber es funktioniert gut, nur soll es noch besser werden ;)

Zitat von: MzKlMu am März 22, 2016, 18:44:25
Wie unterscheiden sich die Formulare ?
100 Felder in einer Tabelle ?
Wie bekommt man in einer Datenbanktabelle 100 Felder zusammen ?

Sie unterscheiden sich in der Menge und Art an Feldern. Wobei die zwei wichtigsten Felder (über die ich suchen möchte) fast identisch sind (Feld 1: Apparatebezeichnung bzw Standort ist im Prinzip identisch, Feld 2:Revisionsnr., Maschinennummer, Inventarnummer)
Es sind technische Datenbanken über komplexe Apparate aus der chemischen Industrie. Ich könnte da wenn ich mehr ins Detail gehen sollte locker auf 1000 kommen.

ZitatBist Du sicher, dass das Datenmodell stimmt ?

Der Felddatentyp ist Text und das ist für unseren Zweick mE auch iO. Oder nicht?

ZitatZeige mal ein Bild des Beziehungsfensters.
Ist im Anhang. Ich hatte in einem Experiment alle 4 miteinander verknüpft. Die bestehenden Verknüpfungen sind irrelevant, das sind lediglich Unterformulare.

Zitaterfolgt die Eingabe über eine Inputbox oder über ein eigeständiges Formular?
Für die vereinfachte Suche, die ich als erstes hinbekommen möchte reicht eine Inputbox.
Zitathat der Suchbegriff eine bestimmte Struktur?
Prinzipiell schon, aber es gibt leider Ausnahmen, die ich betriebsbedingt nicht ändern kann.  ::) Der Felddatentyp ist Text.
ZitatIch habe mal eine Volltextsuche beigefügt, vieleicht hilft diese beim Verstehen weiter.
Mein Hightech-Konzern arbeitet noch mit Access 2002, sodass ich deine File nicht öffnen kann :o Ich werde hier auch mit dem uralten Internet Explorer gequält... :-\ Ich freue mich auf Ostern...

Danke für eure Hilfe!
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: DF6GL am März 23, 2016, 17:27:15
Hallo,

was glaubst Du, kann man mit einem solchen Layout (Tabellendarstellung) des Beziehungsfenster denn anstellen?

Zieh bitte die Tabellenfenster soweit auf , dass man den kompletten Tabellenamen und die Gesamtheit der Tabellenfelder lesen kann...


ZitatDie Eingabe soll über eine Inputbox erfolgen

Davon rate ich grundsätzlich ab..  Benutze je ein Formular´mit Basis zu den 1-Tabellen und bau darin ein UFO-Steuerelement ein, das die Daten mit einem Formular auf Basis der dazugehörenden n-Tabellen anzeigt.


Soweit ich es anhand der fragmentierten Screenshots beurteilen kann, ist das Datenmodell überarbeitungsträchtig. (Es dürften alle Daten aus den 1-Tabellen in einer einzigen 1-Tabelle zusammenfassbar, dito für die n-Tabellen. Die Unterscheidung, um was es sich dann handelt, erfolgt mit einer weiteren Tabelle "tblGerätetypen" ).

Zitatnur soll es noch besser werden

Wenn das eintreffen soll, berücksichtige den oben st. Vorschlag.

ZitatWobei die zwei wichtigsten Felder (über die ich suchen möchte) fast identisch sind (Feld 1: Apparatebezeichnung bzw Standort ist im Prinzip identisch,
Was heißt "im Prinzip" , bzw. "fast"  ?

Sind sie es oder sind sie es nicht?

ZitatFeld 2:Revisionsnr., Maschinennummer, Inventarnummer)

siehe  oben... und siehe u. st. Links 1 und 1a. Diese Regeln sollten zuallererst umgesetzt werden.


ZitatEs sind technische Datenbanken über komplexe Apparate aus der chemischen Industrie. Ich könnte da wenn ich mehr ins Detail gehen sollte locker auf 1000 kommen.


Selbst wenn man noch mehr Details erfassen/pflegen wollte, wird das nicht zutreffen, wenn die Tabellen normalisiert sind.  Es könnte lediglich mehr Datensätze auftreten, aber das ist bei einer DB nichts Ungewöhnliches.

ZitatDer Felddatentyp ist Text und das ist für unseren Zweick mE auch iO. Oder nicht?
Das ist nicht die Antwort auf die Frage.  Und allgemein gesagt ist das auch nicht ok.. Es geht nicht um "Deinen Zweck", es geht um die korrespondierende Darstellung der realen Daten.  Soll heißen,  eine "Menge" ist kein Text, sondern eine Zahl und da ist noch zu unterscheiden, ob es sich dabei um ganze Zahlen handelt oder auch Dezimalzahlen auftreten könne.


ZitatDie bestehenden Verknüpfungen sind irrelevant, das sind lediglich Unterformulare.

???   was haben Beziehungen mit Formualren zu tun?

Und warum sind sie da, wenn sie doch "irrelevant" sind?

ZitatFür die vereinfachte Suche, die ich als erstes hinbekommen möchte reicht eine Inputbox.

Oben auch schon kommentiert..  Vermutlich meinst Du aber ein Abfrage-Parameterfenster... Auch das ist i. A. nicht zu empfehlen.

Suchvorgänge sollte in selben Formular ablaufen, das auch die Daten anzeigt.  Außnahmen (z. B. ein speziellen Suchformular) sind natürlich  nicht "verboten"...

ZitatPrinzipiell schon, aber es gibt leider Ausnahmen, die ich betriebsbedingt nicht ändern kann.  ::) Der Felddatentyp ist Text.

Dann musst Du eben auch die Ausnahmen erklären/beschreiben.....


ZitatIch freue mich auf Ostern...
Und ich dachte, Du freust Du über Verbesserungsvorschläge...

Wenn Du so frustiert an die Sache herangehst, wird es schwer werden.


Habe die Db in eine 2002-mdb-Datei konvertiert....
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: MzKlMu am März 23, 2016, 19:25:23
Hallo,
auch von mir einige Anmerkungen.
Was soll man mit den Bildern anfangen, da ist nicht zu erkennen, weder Tabellenamen geschweige denn die Felder einer Tabelle. Und wenn es im Beziehungsbild Tabelle ohne Beziehungen gibt, ist das Ganze ohnehin mehr als fraglich.
ZitatDer Felddatentyp ist Text und das ist für unseren Zweck mE auch iO. Oder nicht?
ich habe doch nicht nach dem Datentyp gefragt. Ich zweifelte das Datenmodell an.
ZitatIch könnte da wenn ich mehr ins Detail gehen sollte locker auf 1000 kommen.
Wenn Du 1000 Felder anlegen willst, so hast Du mit absoluter Sicherheit einen Fehler in der Struktur der Tabellen (dem Datenmodell) gemacht.
Da kann die Anlage noch so groß sein. Abgesehen davon kann eine Accesstabelle maximal 255 Felder haben. Und wenn Du jetzt denkst, dann nehme ich halt 4  Tabellen, so wäre das noch eine größere Katastrophe.
Wenn man in einer Accesstabelle mal 20 Felder hat, so ist das schon eine große Tabelle. Ich bin überzeugt, bei normalisiertem Aufbau der Tabellen bleiben von den 100 Feldern nicht mehr viel übrig.
Nenne mal einige Felder die da vorkommen können und von deren Art es viele gibt.
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: JotGe am März 24, 2016, 00:11:20
Hallo Sonnensalat,
schönen guten Abend...
nach Deinen angehängten Bilder, welche die Tabellen leider nur erahnen lassen, scheint mir das ganze Datenmodell nicht zu passen.
Du hast vier Tabellen, davon sind drei mit jeweils einer dazugehörigen Reparaturtabelle verbunden.

Grunsätzlich gehören alle Maschinen und Geräte sowie die Hebezeuge (vierte Tabelle) in eine Tabelle. Für die Reparaturen gibt es eine weitere Tabelle, welche dann über die einen Fremdschlüssel mit der Maschinentabelle in Beziehung gebracht wird.
Ich habe Dir ein Beispiel (Maschinen) unten angehängt, das Dir vieleicht mehr über den Begriff Datenmodell Aufschluß gibt. Der Feldatentyp hat nichts mit dem Datenmodell zu tun. Ein ordentliches Datenmodell spiegelt die Betriebsabläufe, Arbeitsprozesse oder Geschäftsgeschehnisse wieder.
Zur Eingabe des Suchkriteriums mittels Inputbox, ist nichts mehr hinzuzufügen.
ZitatApparatebezeichnung bzw Standort ist im Prinzip identisch,
Ich kann mir leider nicht vorstellen daß ein Standort wie ein Apparat benannt wird.
ZitatFeld 2:Revisionsnr., Maschinennummer, Inventarnummer
Dies sind drei verschiedene Informationen und werden in drei dafür vorgesehene Felder gespeichert. Wie werden aktuell diese Daten erfasst? Wenn eine der Nummern vorhanden ist, werden dann die beiden anderen einfach hintendrangehängt oder etwa weggelassen
Mir scheint, daß auch die Tabellen einer Überarbeitung bedürfen.
Zitat...ins Detail gehen sollte locker auf 1000 kommen
Ich gehe mal von Datensätzen aus, was aber in einer DB nicht ungewöhnlich viel ist.

Ich habe Dir als weiteren Denkanstoß und -hilfe noch ein weiteres Beispiel (LgrDb_V_2.0) angehängt.

@ Beaker
ich bin von einem mehfachen Vorkommen des Suchkriteriums ausgegangen. Ansonsten stimme ich Dir selbstverständlich zu.

@ DF6GL
vielen Dank für das Umwandeln ins 2002er Format. :D

Ich hoffe etwas weiter geholfen zu haben
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: Sonnensalat am März 24, 2016, 12:55:59
Wow, ich bin echt sprachlos wie ihr euch ins Zeug legt!!! Damit habe ich nicht gerechnet. Vielen Dank!! :)

Vorab die Info: Ich bin kein Informatiker, sondern Verfahrenstechnikingenieur und habe ohne Access-Vorkenntnisse die Aufgabe bekommen eine "Inventur" aller Apparate usw. vorzunehmen und in eine DB einzupflegen. Da es schon eine gab mit der man ganz vernünftig arbeiten konnte, habe ich sie übernommen, erweitert und in Teilen verbessert. Jetzt scheint es mir, als müsste ich eine neue anlegen, da die Struktur nicht der "Norm" entspricht und sie sehr unflexibel ist. Das sehe ich auch ein und bin bereit dazu.

Eben bekam ich die Nachricht, dass zum 2.4.2016 endlich unsere Software auf MS 2013 umgestellt wird!! Juhuu! ;D Das bedeutet aber auch, dass ich jetzt keine neue DB anlegen kann, da die Konvertierung von MS 2002 auf 2013 teuer ist (Aussage IT-Abteilung).

Also werde ich mich jetzt erstmal weiter schlau machen (auch mit eurer großartigen Hilfe :)) und das Projekt "Neue DB" in Angriff nehmen!

@DF6GL: Jetzt kann ich sie auch öffen, danke!

@JotGe: Danke für den Entwurf, du hast mich verstanden. Das sieht schon nach einem guten Lösungsansatz aus. Mit der Möglichkeit den Apparatetyp konkret zuzuordnen ergeben sich ganz neue Möglichkeiten :) Bislang sind z.Bsp. auch Dachventilatoren in der Pumpendatenbank..... ::) Ich lade mal meine abgespeckte DB hoch, dann könnt ihr sehen, was das für ein Murks ist, aber auch gleichzeit erkennen worauf es mir (bzw. meinem Chef) ankommt. Mein Chef will sich häufig ein DIN4 Ausdruck des Apparateformulars machen.

Viele Grüße vom Sonnensalat

PS. Obwohl ich eben fast alle Daten gelöscht habe ist die Datei noch 14 Mb groß...
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: JotGe am März 24, 2016, 14:08:45
Hallo Sonnensalat,
Zitatfast alle Daten gelöscht habe ist die Datei noch 14 Mb groß
es hilft meistens, wenn Du die Datenbank öffnest und dann sie mittels "komprimieren und reparieren" schrumpfen läßt. Danach packst Du das ganze in eine ZIP-Datei und stellst sie ein.

Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: Sonnensalat am März 24, 2016, 14:54:44
Faszinierend!  ;D
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: MaggieMay am März 24, 2016, 15:19:18
Hallo,

Zitatda die Konvertierung von MS 2002 auf 2013 teuer ist (Aussage IT-Abteilung).
was heißt "teuer"? Notfalls kauft ihr dazu noch eine Einzelplatzlizenz für Access 2007 oder 2010, das sollte doch zu verkraften sein.
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: Sonnensalat am März 24, 2016, 15:29:33
Hallo Maggie,

bei der Kosten/Nutzen-Betrachtung wären 1 € schon zuviel... ::) Das ist ein Knauser-Konzern höchster Güte! Nicht ohne Grund wurde so lange bis zu dem Software-Update gewartet. Aber unsere Kunden können immer seltener unser Format öffnen... Ich bin ja schon froh, dass ich ohne Probleme diese Website bedienen kann  ;D
Die paar Tage bis zum 2.4. kann ich noch warten, sind ja auch noch die Feiertage dazwischen.
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: DF6GL am März 24, 2016, 15:41:31
Hallo,

ohne jetzt auf die vielen "Macken" am Tabellenaufbau (Normalisierung) und den Benamsungen (Sonder- und Leerzeichen) einzugehen, könnte es so gelöst werden:

Einbau eines Textfeldes ("txtSuchfeld") im Übersichtsform.
Anstelle der Formular-Öffnungs-Makros etwa folgende
Ereignisprozedur verwenden

Sub ÖffneBehälterdatenbank_Click()
Docmd.Openform "F-Behälterdatenbank",,,,,,Me!txtSuchfeld
End Sub


Damit wird der Suchfeld-Wert als Öffnungsargument (Openargs) an das zu öffnende Formular übergeben.

In jedem der betroffenen Formulare wird das Öffnungsargument in etwa so ausgewertet:


Sub Form_Load()

If not IsNull ( Me.Openargs) Then
  Me.Filter = "DeinZuDurchsuchendesTabellenfeld like '*" & Me.Openarges & "*'"
Me.FilterOn =True

End If



Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: Sonnensalat am März 24, 2016, 16:29:50
Danke Franz,

ja die "Macken" sind betriebsbedingt und lassen sich bloß um die Normalisierung in der DB zu erreichen nicht ändern. Aber es funktioniert für uns.(Unser Laden ist eh nicht ganz normal ;D)

ZitatVorab die Info: Ich bin kein Informatiker
;D
Also muss ich mir erst noch VBA-Code aneignen. So ein bißchen bekomme ich hin, aber das ist schon ne andere Hausnummer.

ZitatSub ÖffneBehälterdatenbank_Click()
Docmd.Openform "F-Behälterdatenbank",,,,,,Me!txtSuchfeld
End Sub
Das ist der erste Schritt und wenn der Suchbegriff nicht gefunden wurde, sollen nach obigen Schema die anderen Formulare durchsucht werden, richtig? Der zweite Befehl
ZitatSub Form_Load()

If not IsNull ( Me.Openargs) Then
  Me.Filter = "DeinZuDurchsuchendesTabellenfeld like '*" & Me.Openarges & "*'"
Me.FilterOn =True

End If
muss im txtSuchfeld-Code stehen, oder?

Ich werde mir am Wochenende mal ein paar YouTube-Tutorials anschauen  :D

Euch allen einen schönen Feierabend und ein frohes Osterfest!
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: DF6GL am März 24, 2016, 17:04:05
Hi,


Zitatsind betriebsbedingt

Nein,  die sind dem Entwickler der DB "bedingt"..   ;)


Zitat
muss im txtSuchfeld-Code stehen, oder?

so gesehen gibt es sowas  nicht...


Der (dieser) Code steht in der Ereignisprozedur für das "Beim Laden" -Ereignis des jeweils zu öffnenden Formulars.


Zitat
Das ist der erste Schritt und wenn der Suchbegriff nicht gefunden wurde, sollen nach obigen Schema die anderen Formulare durchsucht werden, richtig?

Ob das "richtig"  (so gewünscht) ist, kann ich nicht sagen...  Normalerweise weiß man, wonach man sucht....und dann weiß man auch, welches Formular zur Anwendung kommen soll. 


In dieser Konstellation ist die Suche nur nacheinander möglich.

Insofern ist die anfängliche Fragestellung zu einer gleichzeitigen umfassenden Suche  in allen Tabellen eher nicht treffend.

Ich betone nochmal die Notwendigkeit zur Normalisierung.

Natürlich gibt es auch Lösungen für eine umfassenden Suche (wenn man das nennen will) in/bei dieser Tabellenkonstruktion.

1) Im Hauptformular ein Registersteuerelement einbauen, auf dessen Seiten die jeweiligen Formulare der 3 (4) n-Tabellen platziert werden.
     Im Suchfeld-Ereignis "Nach Aktualisierung" werden die einzelnen UFOs mit dem eingegebenen Suchfeld-Wert gefiltert.

2) Verwendung einer Union-Abfrage (Abfrage, die alle entspr. Tabellen datensatzmäßig aneinanderhängt ) und die als Kriterium den Verweis auf das Suchfeld im Übersichtsform verpasst bekommt.  Zusätzlich ist ein Formular zu erstellen, das diese Union-Abfrage als Datenherkunft besitzt und im o. g. AfterUpdate-Ereignis geladen (angezeigt) wird.
Titel: Re: Abfrage über mehrere Tabellen und anzeigen des Datensatzes im Formular
Beitrag von: MzKlMu am März 24, 2016, 17:27:03
Hallo,
ZitatIch werde mir am Wochenende mal ein paar YouTube-Tutorials anschauen
das Problem ist, dass solche Tutorials fast immer von einem normalisierten Datenmodell ausgehen. Du wirst daher wohl kaum ein Tutorial finden, das auf die Suche eingeht so wie Du das willst. In einer korrekt aufgebauten DB braucht man eine solche Suche nicht.