Neuigkeiten:

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

Mobiles Hauptmenü

ComboBox als Auswahlliste der ganzen Abfragen

Begonnen von accessy, Dezember 10, 2012, 20:38:03

⏪ vorheriges - nächstes ⏩

accessy

Geht vermutlich nur über VBA, aber ich frage doch erst einmal hier in diesem Forumsteil.
Kann man eine ComboBox mit einer Liste von erstellten Abfragen befüllen.

Ich habe eine Menge Abfragen erstellt.
Z.B. habe ich 19 indentische Abfragen, die sich nur hinsichtlich der PLZ unterscheiden.
Ich muss dann immer das Formular schließen und dann die entsprechende Abfrage starten.

Ich könnte auch nur eine Abfrage nehmen, die beim Start über einen Commandbutton die PLZ abfragt.
Das wäre wohl die beste Lösung.
Aber ich weiß nicht wie das geht.



MzKlMu

#1
Hallo,
Zweckmäßerweise solltest Du für die PLZ (und Ort) eine eigene Tabelle haben. Genau genommen nicht zweckmäßerweise, sondern sollte in einer normalisierten DB ohnehin so sein. Das setze ich jetzt mal vorraus.
Dann erstellst Du eine Kombi mit der PLZ Tabelle als Datenherkunft.

Im Ereignis "Nach Aktualisierung" des Kombis kommt folgender Code:

Me.Filter = "PLZ = '" & Me.NameDesKombis" & "'"
Me.FilterOn = True


ZitatIch habe eine Menge Abfragen erstellt.
Davon sind wahrscheinlich 90% überflüssig. ;D
Gruß Klaus

accessy

Mist, ich kann der Sache mal wieder nicht so ganz folgen.

Also, die Abfrage besteht aus 2 Tabellen als Grundlage. Das geht nicht anders.
Ich will dir mal die Abfrage per Bild zeigen, damit du das besser verstehst.


Geht das jetzt immer noch so wie du es vorschlägst?

MzKlMu

#3
Hallo,
ja, das geht auch dann. Willst Du immr nur nach PLZ Gruppen filtern?
Und wieso sind das dann 19 Abfragen für die PLZ?

Eine Abfrage die zum Filtern eines Formulars verwendet wird, braucht in der Abfrage kein Kriteium für den Filter.

Die Beziehung zwischen den beiden Tabellen halte ich übrigens für falsch. Ein Beziehung erfolgt über den Primärschlüssel und ein Fremdschlüsselfeld und nicht über die KNR.

[Anhang gelöscht durch Administrator]
Gruß Klaus

accessy

Na ja, ich habe eine Abfrage, die mir die Umsätze aller Kunden im PLZ Gebiet 5 zeigt.
Eine, die mir die Umsätze im PLZ Gebit 59 zeigt.
Usw....

Mir fehlen einfach viel zu viel Grundkenntnisse.
Ich denke Beziehungen zwischen 2, oder mehr Tabellen müssen immer den gleichen Schlüssel haben.
Also Kundennummer KNR mit Kundennummer KNR.
Die ID ist für mich eine Nummer, die Access als laufende Nummer einfügt. Dieses Feld blende ich überall aus, weil das ein uninteressantes Feld ist. Ist doch egal, ob da 1256, oder 5893 als Nummer steht. Hauptsache, die KNR ist in einer Beziehung.

Dein Vorschlag mit
Me.Filter = "PLZ = '" & Me.NameDesKombis" & "'"
kann ich nicht nachvollziehen. Was soll denn in der ComBo drin sein?
Eine der Abfragen OHNE dem Feld PLZ?

MzKlMu

#5
Hallo,
ZitatIst doch egal, ob da 1256, oder 5893 als Nummer steht. Hauptsache, die KNR ist in einer Beziehung.
Nein, ist es eben nicht. Die Beziehung läuft auf der 1-Seite immer über den Primärschlüssel, auf der n-Seite wird ein extra Zahlenfeld erstellt das den Fremdschlüssel aufnimmt. Oftmal sind Kundennummern oder ähnliches gar nicht reine Zahlen sondern Textfelder was diese als Schlüsselfelder ungeeignet macht. Das Ausblenden wird in jedem Fall gemacht. Auch die extra Schlüsselfelder sind nicht sichtbar.
Wie sieht denn bei Dir die KNR aus, Zahl oder Text?
Das Feld "Kunde" in der Tabelle "Werkzeug_Artikel" ist übrigens überflüssig.
Du hast auch keine referentielle Integrität eingestellt, was zu Fehlern in der Datenkonsistenz führen kann.
Vermutlich sind gar keine Beziehungen im Beziehungsfenster eingestellt.
Als ich den Vorschlag mit der Kombo gemacht habe, wusste ich ja noch nichts vom Joker (*), da geht das natürlich nicht.

Das Filtern sollte mit einem ganz normalen Textfeld erfolgen.

Willst Du dann einfach das Formular gefiltert anzeigen, also immer die Kunden die dem PLZ Gebiet entsprechen?
Gruß Klaus

accessy

KNR ist als Text definiert.
Eigentlich ist alles als Text definiert, bis auf MENGE und UMSATZ.

Wenn ich in die Beziehungen gehe und auf eine der Linien einen Doppelklick mache, erscheint dieses kleine Fenster mit der Beziehung.
Setze ich in das Kontrollkästchen einen Haken, gibt eine Hinweismeldung, die da heißt.
"Es wurde kein eindeutiger Index für das in Beziehung stehende Feld in der Primärtabelle angegeben"
Also schnell wieder raus mit dem Haken.

Alle Tabellen, die ich habe stehen mit der KNR in Beziehung.
Also bisher ist alles in Funktion, was ich da gebastelt habe.

Zitat
Das Filtern sollte mit einem ganz normalen Textfeld erfolgen.
Heißt das, ich erstelle eine Textbox, gebe da z.B: PLZ 30 ein und schon läuft die Abfrage?
Zitat
Willst Du dann einfach das Formular gefiltert anzeigen, also immer die Kunden die dem PLZ Gebiet entsprechen?
Ich habe einfach die Abfrage gestartet und meine benötigten Infos aus der Tabellenansicht entnommen. Das hat mir gereicht.

Ich glaube, ich will da zuviel auf einmal.
Vielleicht sollte ich alles so lassen wie es ist. Am Ende mache ich mir noch alles kaputt.

Ich fand es halt immer blöd, dass ich mein Formular schließen muss, um eine Abfrage starten zu können.
Daher kam mir halt der Gedanke die ganzen Abfragen als Liste in einer Combo zu haben.
Aber das geht wohl scheinbar nicht....

MzKlMu

Hallo,
Zitat"Es wurde kein eindeutiger Index für das in Beziehung stehende Feld in der Primärtabelle angegeben"
Also schnell wieder raus mit dem Haken.
den haken dann wieder raus zu nehmen ist ja keine Lösung. Es ist ja etwas falsch.
Die Beziehung über die KNR ist ein grober Fehler das dieses Feld ein Textfeld ist. Textfelder sind als Schlüsselfelder ungeeignet.

Für das ganze Vorhaben brauchst Du gar keine Abfrage. Das Formular erhält sien Datenherkunft als "Select ..." Anweisung zugewiesen und dann wird einfach gefiltert.

Ich mach Dir nachher mal ein Beispiel, auch mit der richtigen Beziehung.
Gruß Klaus

MzKlMu

#8
Hallo,
im Anhang mal ein einfaches Beispiel.
Ich habe nicht alle Felder eingebaut.
Es wird für das Formular gar keine Abfrage benötigt, das wird dynamisch mit etwas VBA Code gemacht.

Bitte auch mal die Beziehungen anschauen, wie diese richtig sind. Hat auf das Filtern keinen Einfluss, aber so sollten grundsätzlich alle 1:n Beziehungen aufgebaut sein.

[Anhang gelöscht durch Administrator]
Gruß Klaus

accessy

Den VBA Code findet man wirklich nur, wenn man über den Entwurf des Formulars
in den Eigenschaften auf die 3 Punkte rechts neben der Ereignisprozedur klickt.

Also bei mir ist der VBA Code sofort sichtbar in MODULE.
Hmm. na egal.... habs ja gefunden.

Der Code, wie immer der auch zustande kommt, filtert das Feld PLZ.
Schön und gut, aber meine Abfragen sind anders ausgelegt.
"Zeige mir alle Kunden, die einen Umsatz >0 haben und im Gebiet PLZ 45 sind"
Und genau das ist im Hauptformular nicht gegeben.
Ich MUSS eine Abfrage als Basis nehmen, nur das Feld PLZ ist die Variable.

Wenn ich wüßte, wie du das hier gemeint hast.
Das geht voll an mir vorbei. Der Filter ist die PLZ und WAS aus der ComBo?
Soll die ComBo meine Basisabfrage enthalten und das Feld PLZ rauslassen?

Zitat
Me.Filter = "PLZ = '" & Me.NameDesKombis" & "'"

MzKlMu

#10
Hallo,
ZitatAlso bei mir ist der VBA Code sofort sichtbar in MODULE. Hmm. na egal.... habs ja gefunden.
VBA Code ist immer dort wo er gebraucht wird. In einem Formular ist der Code im Formularmodul. Der Code lässt sich nicht in ein allgemeines Modul verschieben, dann würde er nicht mehr funktionieren.
Nur Prozeduren und Funktionen die allgemein gültig sind kommen in Module.
Zitat"Zeige mir alle Kunden, die einen Umsatz >0 haben und im Gebiet PLZ 45 sind"
Mein Vorschlag sollte ja nur ein Gerüst sein, um genau das zu ermöglichen. Das Formular muss nur entsprechend erweitert werden.
Siehe geänderte DB im Anhang.
Umsatzgrenze eintragen PLZ Gebiet eintragen, Button drücken und schon hast Du
"Alle Kunden, die einen Umsatz >1000 haben und im Gebiet PLZ 45 sind"

Vergiss das Kombi, dass das mit dem Kombi nicht geht habe ich Dir doch bereits geschrieben.
Zitat von: MzKlMu am Dezember 11, 2012, 08:17:12
Als ich den Vorschlag mit der Kombo gemacht habe, wusste ich ja noch nichts vom Joker (*), da geht das natürlich nicht.

Vergiss die vielen Abfragen die sind zum größten Teil überflüssig.

[Anhang gelöscht durch Administrator]
Gruß Klaus

accessy

Tja, deine Beispiel-DB funktioniert prima und ich werde wohl in der Lage sein den VBA Code auf meine Datenbankfelder umzusetzen.
Aber ich kann mit dem Code nichts anfangen.
Ich dachte immer mein Miniwissen an VBA aus Excel heraus würde mir helfen.
Aber das hier ist alles ganz anders.
Hast du das manuell alles eingetragen, oder woher weiß man, dass da "FROM Kunden INNER JOIN"....usw....

Na egal... ich danke dir für deine vielen Hinweise.
Schönen Abend noch....