Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

spezielles Filtern im Formular

Begonnen von bwergen, Mai 27, 2011, 17:28:27

⏪ vorheriges - nächstes ⏩

bwergen

Hallo,

ich werkel seit etwa 2 Monaten an Access 2007 herum und bin daher eher ein Neuling als denn ein fortgeschrittener User, daher bedarf es an einigen kleinen Stellen noch etwas Hilfe. Ich habe mir eine kleine Datenbank gebastelt, die im Großen und Ganzen auch so reibungslos funktioniert, wie ich es von ihr erwarte und auch haben will. Nun habe ich aber folgendes Anliegen:

Gegeben ist ein Listenfeld, wie ich es auf dem Bild unten zeige. Dort drin befinden sich etliche Namen in alphabetischer Reihenfolge. Nun habe ich Kombinationsfelder angelegt, um den in der Liste stehenden Namen Eigenschaften zuzuordnen. Jetzt kann ich ja diese Eigenschaften filtern, und zwar z.B. so:
Gefiltert werden soll das Kombinationsfeld xxx, es soll "Acer (Ahorn)" enthalten. Nun zeigt die Datenbank beispielsweise 10 Datensätze an. Wie kriege ich es hin, dass dann auch die Namen des Listenfeldes entsprechend der Filterung aktualisiert werden, also so, dass auch dort nur noch 10 Datensätze zur Auswahl stehen?

Viele Grüße,
bwergen

Fotos:




database

Hallo,

dein Vorhaben ist mir nicht ganz klar.

Also ... du klickst auf eine der Namen im Listenfeld ... nehmen wir an es handelt sich um 'Aleuria aurantia ...'

In den Kombifeldern und Textboxen erscheinen daraufhin die Eigenschaften, wenn bereits welche erfasst wurden oder die Kombis
bieten auswählbare Eigenschaften an, die nun deiner Auswahl im Listenfeld zugewiesen werden können, wobei zu bedenken ist,
dass in der Regel nur eine einzelne Auswahl möglich ist.

ZitatJetzt kann ich ja diese Eigenschaften filtern
...und da schwindet dann mein Verständnis...
Was willst du wo, wie filtern?

ZitatGefiltert werden soll das Kombinationsfeld xxx, es soll "Acer (Ahorn)" enthalten
Hmmmm...  da ist ja nix gefiltert, diese Auswahl hast DU getroffen.

ZitatNun zeigt die Datenbank beispielsweise 10 Datensätze an
... und welche sind das? Wo siehst du diese 10 Datensätze?

ZitatNamen des Listenfeldes entsprechend der Filterung aktualisiert werden, also so, dass auch dort nur noch 10 Datensätze zur Auswahl stehen
... wenn zwischen der Auswahl im Kombifeld und den anzuzeigenden Namen ein Bezug hergestellt werden kann (im Datenmodell eine Bezihung festgelegt wurde) sollte das realisierbar sein.


Kannst mal einen Screeshot von deinem Datenmodell machen - so dass alle Tabellen- und Feldbezeichnungen sichtbar sind - und hier reinstellen?

bwergen

Hi database,

Nein, gefiltert habe ich das Feld "Substrat", es soll nur diejenigen Datensätze anzeigen, die "Acer (Ahorn)" enthalten. Das ist bereits geschehen (es wurden 9 Datensätze gefunden!). Das Listenfeld rechts zeigt aber immer noch ALLE Datensätze an. Es soll aber nur die 9 Datensätze anzeigen, die ich gefiltert habe.
Sry dass das etwas unverständlich rüberkam ;)

Ich denke auch dass es das eig tun müsste, nur wie? Ne Beziehung zwischen den Kombifeldern und dem Listenfeld herstellen?

Danke schonmal und LG
bwerben


Foto



database

Hallo,

naja - zwischen einem Listenfeld und einem Kombifeld kannst du keine Beziehung erstellen.
Das geht nur zwischen Tabellen oder Haupt - und Unterformular.

So nun ist es so, dass dein Listenfeld ja eine Datenherkunft haben muss, ansonsten würde es ja keine Daten anzeigen.
Und das ist der Punkt an dem du (wir) ansetzen müssen.

Wenn die Datenherklunft des Listenfeldes eine Abfrage ist (hoffentlich) kann diese zur Laufzeit geändert werden um so jene
Datensätze ins Listenfeld zu bringen, die deiner Auswahl im Kombifeld 'Substrat' zugeordnet werden können.

Ist es eine Abfrage? Und wenn ja - wie lautet deren SQL?

bwergen

Hi,

nein, das Listenfeld bezieht seine Daten von einer Tabelle (keine Abfrage). Ich habe noch nicht richtig durchschaut, was eine Abfrage bezweckt (bzw. sie scheint für die Elementarfunktionen nicht notwendig zu sein, denn Abfragen habe ich keine einzige eingebaut).

Wie kann das Listenfeld denn die Daten aus einer Abfrage bekommen? Soll ich aus der Haupttabelle (da kommen die Daten her, aus dem Feld "Gattungsname", welches den Primärschlüssel besitzt, da der Inhalt jeweils einzigartig ist) eine Abfrage bzgl. des Feldes "Gattungsname" erstellen und dem Listenfeld diese Abfrage als Datensatzherkunft einbauen?

Vielen Dank für die Hilfe schonmal ;)

LG bwergen

bwergen

Das Problem ist noch nicht gelöst, also ran an die Arbeit, ich weiß mittlerweile wie das in etwa mit der SQL aussieht, es geht nach wie vor darum, dass das Listenfeld nur noch diejenigen Datensätze anzeigen soll, die nach einem bestimmten Filter übrig bleiben. Die Struktur sieht dabei wie folgt aus: Das Listenfeld hat eine Abfrage als Grundlage mit dem Namen I Funghi_Haupttabelle Abfrage1. Vielleicht lässt sich dieses letzte wichtige Problem noch lösen.

gruß bwergen

bwergen

Hallo,

das Problem wurde noch nicht gelöst. Sry dass ich damit schon wieder nerve aber hier wäre die SQL der Abfrage, die dem Listenfeld zugrunde liegt.
ZitatSELECT [I Funghi_Haupttabelle].Gattungsname, [I Funghi_Haupttabelle].Phänologie, [I Funghi_Haupttabelle].Verbreitung, [I Funghi_Haupttabelle].[Eigene Funde], [I Funghi_Haupttabelle].Familie, [I Funghi_Haupttabelle].Gattung, [I Funghi_Haupttabelle].Cde_Lebensweise, [I Funghi_Haupttabelle].Cde_Lebensweise2, [I Funghi_Haupttabelle].Cde_Substrat
FROM [I Funghi_Haupttabelle];

Andere Idee: Ich habe ein ungebundenes Textfeld als mögliches Suchfeld eingerichtet. Dort könnte man doch auch einfach etwas eingeben, und nach jedem Buchstaben würde sich ja die Auswahl, die im Listenfeld angezeigt wird, verkleinern. Wenn sich dieses so aktualisieren würde, wäre das die Lösung und somit wäre ich mit der DB fertig (müssten nur noch weitere Daten eingegeben werden...). Wäre nett, wenn mir da jemand helfen könnte. Ich könnte auch eine Version der DB per email versenden, falls sich da jemand reinknien will, ist sehr einfach gestrickt denke ich, da ich nicht vorhabe, mich da zu 100% auskennen zu wollen (zeitlich wäre das unmöglich, aber ich möchte auch wirklich nur das notwendige haben, alles weitere wäre sowieso zu umständlich).

Viele Grüße,
bwergen

database

#7
Hallo,

mit dieser Aussage...
ZitatDas Problem ist noch nicht gelöst, also ran an die Arbeit ...
...wirst du hier nicht leicht jemanden dazu motivieren dir zu helfen  :-\
Das ist ja kein Wunschkonzert - solltest du nicht vergessen!  ;)


ZitatAndere Idee: Ich habe ein ungebundenes Textfeld als mögliches Suchfeld eingerichtet ...

Ändere die Abfrage folgendermaßen ab (Die Abfrage MUSS die Datenherkunft des Listenfeldes sein!):


SELECT [I Funghi_Haupttabelle].Gattungsname, [I Funghi_Haupttabelle].Phänologie, [I Funghi_Haupttabelle].Verbreitung,
[I Funghi_Haupttabelle].[Eigene Funde], [I Funghi_Haupttabelle].Familie, [I Funghi_Haupttabelle].Gattung,
[I Funghi_Haupttabelle].Cde_Lebensweise, [I Funghi_Haupttabelle].Cde_Lebensweise2, [I Funghi_Haupttabelle].Cde_Substrat
FROM [I Funghi_Haupttabelle]
WHERE [I Funghi_Haupttabelle].Gattungsname LIKE [Formulare]![DeinFormular]![DeinTextfeld].[Text] & "*"


Erstelle für das Ereignis 'Bei Änderung' des Textfeldes eine Ereignisprozedur
1. Formularentwurf
2. Eigenschaften des Textfeldes
3. Register 'Ereignisse' auswählen
4. Ereignis 'Bei Änderung' anklicken
5. Aus dem Drpdown [Ereignisprozedu] auswählen
6. Auf die 3 Punkte neben [Ereignisprozedur] klicken

Du befindest dich in der Ereignisprozedur 'Bei Änderung' (Private Sub NameDeinesTexfeldes_Change()) ...

...trage nun zwischen Private Sub ...  und End Sub  ...  folgende Zeile ein (Namen anpassen!)

Me!DeinListenfeld.Requery


Damit sollte beim Öffnen des Formulars das Listenfeld mit ALLEN Datensätzen der Tabelle gefüllt sein und wenn du ins Textfeld was eingibst
mit jedem Tastendruck der Inhalt der Texteingabe angepasst werden.
Wird der Text aus dem Textfeld gelöscht, werden wieder alle Datensätze im Listenfeld angezeigt.

HTH