Acc97:

Hallo liebe Access-Wissende!

Bin noch immer ziemlicher Laie in Sachen Access, ich hoffe, einer von Euch kann mir helfen.

Ich habe 2 Formulare. Auf dem ersten kann ich 5 Schlagworte auswählen. Wenn ich dann auf einen Button klicke wird das zweite Formular angezeigt, mit den Datensätzen, die auf die Schlagworte zutreffen. Die Abfrage dazu steht im zweiten Formular unter „Datenherkunft“.

Mein Problem ist nun, daß ich bei jedem Schlagwort auch „alle Eigenschaften“ auswählen kann. Z.B. Schlagwort 1 beeinhaltet: alle, Mercedes, Man, Volvo, Scania oder Renault. Wenn ich nun „alle“ angebe, sollen die angezeigten Datensätze durch das erste Schlagwort nicht eingeschränkt werden. Es soll egal sein, ob ein Datensatz unter Volvo oder Scania in der DB steht.
Kann ich in die Abfrage ne Art if-Abfrage (unter „Kriterien“) einbauen, oder muß ich das mit VB machen?

Mein Problem hört sich eigentlich simpel an, aber ich hab keine Ahnung, wie ich’s lösen soll.
Es wäre wirklich super-klasse, wenn jemand einen Tipp für mich hätte.

Danke,
Gruß Lena

Abfrage für Spedition oder so? :wink:
Hallo.
Methodisch würde ich mit VB darangehen. Es ist einfacher, später noch was zu ändern, falls ihr mal einen DAF bekommt, denn die SQL mit den ganzen IFs und IIFs ist doch sehr, sehr unübersichtlich … außerdem kannst Du auch noch Mehrfachauswahlen treffen. Du definierst in VB einen String, der den ganzen SQL-Sermon aufnimmt, also in etwa so :

If Auswahl=„alle“ Then
SQLString=„SELECT * FROM haumichtot …“ 'ohne WHERE-Klausel!
Else
SQLString=„SELECT * FROM haumichtot WHERE Marke=Auswahl“
EndIf

Den auf diese Weise zusammengebastelten String bringst Du dann mit ExecSQL zur Ausführung.

Solltest Du noch Schwierigkeiten haben, mehl mich bitte unter [email protected] an. Da habe ich dann etwas mehr Zeit & kann Dich ausführlicher geholfen worden haben sollen gewesen sein hätte (such Dir was aus, kosten alle dasselbe :wink: …).
Gruß & viel Erfolg
kw

Hallo Lena,

Dü könntest deine Schlagworte in verschiedenen Kombinationsfeldern (2-zeilig, 1. Zeile gebunden, 1.Zeile 0 cm breit, 2. Zeile lesbare Breite) zeigen;
Die Kombinationsfelder beruhen auf einer Abfrage, in der das
Schlagwort ist und eine ID.
In der Abfrage gibst du in der SQL-Ansicht zusätzlich folgendes ein:
Select „*“ As TypID , „“ as Typ from tblTyp
UNION
(hier kommt der Rest der Abfrage)
wobei TypID deine SchlagwortID und Typ dein Schlagwort ist.

Bei der Abfrage für dein zweites Formular mußt du dann einfach den Inhalt des Kombinationsfelds abfragen.
[Bei Kriterien „Wie [forms]![MeinFormular1]![MeinKombifeld]“]
Wichtig ist nur, das Access mit dem *, also in diesem Fall mit der ID rechnet, denn das Schlagwort nützt in der Abfrage nicht viel.

Hoffe, ich konnte dir erst mal helfen,
bis dann, Jan

Hi Jan!

Danke für Deine Antwort! So ganz verstanden hab ich aber noch nicht alles…

Mein Problem ist genau dieser Absatz:

Du könntest deine Schlagworte in verschiedenen
Kombinationsfeldern (2-zeilig, 1. Zeile gebunden, 1.Zeile 0 cm
breit, 2. Zeile lesbare Breite) zeigen;

Was bewirkt diese 0 cm-breite Zeile?

Meine Schlagworte gebe ich bereits über Kombifelder ein, genaugenommen hab ich 5 Stück, und das erste beeinhaltet z.B. die Fahrzeugmarken, hat also 8 Zeilen, die erste davon heißt „alle“, dann kommen die Marken.
Wie meinst du das mit dem 2-zeiligen Kombifeld? Die Zeile „alle“ hat bei mir schon eine ID, genau wie alle anderen Zeilen in allen Kombifeldern.

Die Kombinationsfelder beruhen auf einer Abfrage, in der das
Schlagwort ist und eine ID.

Ist bei mir der Fall.

In der Abfrage gibst du in der SQL-Ansicht zusätzlich
folgendes ein:
Select „*“ As TypID , „“ as Typ from tblTyp
UNION
(hier kommt der Rest der Abfrage)
wobei TypID deine SchlagwortID und Typ dein Schlagwort ist.

*ähem*räusper* Wo denn genau? Es ist mir echt unangenehm, aber ich weiß echt nicht wo das hin muß…

Bei der Abfrage für dein zweites Formular mußt du dann einfach
den Inhalt des Kombinationsfelds abfragen.
[Bei Kriterien „Wie [forms]![MeinFormular1]![MeinKombifeld]“]

Die Abfrage für mein zweites Formular sieht genau so aus, und funktioniert auch.

Wichtig ist nur, das Access mit dem *, also in diesem Fall mit
der ID rechnet, denn das Schlagwort nützt in der
Abfrage nicht viel.

Wäre echt prima, wenn Du mir nochmal antworten würdest…
Daaanke,
…Gruß Lena

Hi Jan!

Danke für Deine Antwort! So ganz verstanden hab ich aber noch
nicht alles…

Mein Problem ist genau dieser Absatz:

Du könntest deine Schlagworte in verschiedenen
Kombinationsfeldern (2-zeilig, 1. Zeile gebunden, 1.Zeile 0 cm
breit, 2. Zeile lesbare Breite) zeigen;

Was bewirkt diese 0 cm-breite Zeile?

Wenn Du eine Abfrage hast, in der das erste Feld die ID und das zweite Feld die Marke ist, heißt das beim Kombifeld:
2 zeilig -> beide Zeilen

  1. Z, gebunden -> Access ‚rechnet‘ mit den Werten der 1. Zeile. (Der Wert sollte eindeutig sein)
    Zeilenbreite: 0 cm -> Die Zeile wird im Kombinationsfeld nicht angezeigt, nur die andere Zeile wird gezeigt (sofern die Breite >0 ist)
    So vermeidest du es, das ein Benutzer durch Zahlen-IDs verwirrt werden. Der Benutzer will schließlich Volvo auswählen, und nicht Marken-ID 65

Meine Schlagworte gebe ich bereits über Kombifelder ein,
genaugenommen hab ich 5 Stück, und das erste beeinhaltet z.B.
die Fahrzeugmarken, hat also 8 Zeilen, die erste davon heißt
„alle“, dann kommen die Marken.

Wenn in der Fahrzeugmarken-Tabelle schon das Schlagwort steht, muß es da raus, es darf keine ID haben.
Dann machst du eine neue Auswahl-Abfrage, mit dem Feld Fahrzeugmarken-ID (da wo die ID drin ist) und dem Feld Fahrzeugmarke (da wo die Marken drinstehen).

Oben links kannst du von der Entwurfsansicht in die Datenblattansicht wechseln, das ergebnis sieht irgendwie so aus:
ID | Marke
2 | Merzer
43 | VW
45 | MAN

Neben der Datenblattansicht ist ein kleiner Pfeil, wenn du da drauf klickst, kriegst du ein Pull-Down-menü mit drei Auswahlmöglichkeiten (Entwurfs-, Datenblattansicht und SQL)
Du klickst auf SQL und es erscheint ein „Textfeld“ in dem etwa folgendes steht:
_SELECT tblTyp.TypID, tblTyp.Typ

FROM tblTyp;_
(natürlich nicht Typ, sondern Marke oder sowas)
wobei die Select-Zeile die Felder sind und die From-Zeile die Tabelle angibt, wo die Daten herkommen.

Vor diesen Kram schreibst du dann
Select „*“ As TypID , „“ as Typ from tblTyp
UNION
(natürlich wieder nicht Typ, sondern Marke oder sowas, je nachdem, wie deine Felder heißen)

Durch die UNION kannst du die Abfrage nicht mehr in der Entwurfsansicht öffnen, macht aber gar nichts, die ist nicht wichtig.
Oben links kannst du jetzt wieder in die Datenblattansicht klicken, das müßte dann ungefähr so aussehen:

ID | Marke
* |
2 | Merzer
43 | VW
45 | MAN

Und damit hast du dein Sternchen („Wildcard“).
Mußt nur noch das Kombifeld auf die Abfrage machen.

Bei der Abfrage für dein zweites Formular mußt du dann einfach
den Inhalt des Kombinationsfelds abfragen.
[Bei Kriterien „Wie [forms]![MeinFormular1]![MeinKombifeld]“]

Jetzt sollte es klappen.
Viel Erfolg,
Jan

Also jetzt mal langsam
Ich gehe davon aus, daß Du, wenn ich Dich richtig verstehe, die Liste zur Auswahl auf Deinem ersten Formular manuell erstellt hast?! Diese Liste besteht also nicht aus den Daten der Tabelle (z. B. mit einer „select distinct“ - Abfrage oder einer Abfrage auf eine verknüpfte Tabelle), geschweige denn aus einer select …union ALL select ) (kleiner Hinweis an Euch UNION-Empfehler: Immer an das „All“ denken, sonst kann es böse Überraschungen geben!).
Also wenn Du die Liste manuell angelegt hast, dann würde der SQL-String für die Datenherkunft Deines 2. Formulares z. B. so lauten:
SELECT * FROM DeineTabelle WHERE FahrzeugHersteller like eval(IIf([Forms]![DeinErstesFormular]![DeinAuswahlfeld]=„alle Eigenschaften“,"’*’","’" & [forms]![DeinErstesFormular]![DeinAuswahlfeld] & „’“));

So, daran siehst Du also, daß die Auswahl nach Deiner Art ein wenig kompliziert ist. Warum setzt Du denn nicht einfach einen „Formularbasierten Filter“ (mehr Infos in der Hilfe) auf Dein 2. Formular?

Hoffe geholfen zu haben.

Alex

Ich habe 2 Formulare. Auf dem ersten kann ich 5 Schlagworte
auswählen. Wenn ich dann auf einen Button klicke wird das
zweite Formular angezeigt, mit den Datensätzen, die auf die
Schlagworte zutreffen. Die Abfrage dazu steht im zweiten
Formular unter „Datenherkunft“.

Mein Problem ist nun, daß ich bei jedem Schlagwort auch „alle
Eigenschaften“ auswählen kann. Z.B. Schlagwort 1 beeinhaltet:
alle, Mercedes, Man, Volvo, Scania oder Renault. Wenn ich nun
„alle“ angebe, sollen die angezeigten Datensätze durch das
erste Schlagwort nicht eingeschränkt werden. Es soll egal
sein, ob ein Datensatz unter Volvo oder Scania in der DB
steht.
Kann ich in die Abfrage ne Art if-Abfrage (unter „Kriterien“)
einbauen, oder muß ich das mit VB machen?

Mein Problem hört sich eigentlich simpel an, aber ich hab
keine Ahnung, wie ich’s lösen soll.
Es wäre wirklich super-klasse, wenn jemand einen Tipp für mich
hätte.

Danke,
Gruß Lena

Ohoh, da habe ich doch einen kleinen Fehler:

Du könntest deine Schlagworte in verschiedenen
Kombinationsfeldern ( 2-zeilig , 1. Zeile gebunden, 1.Zeile 0 cm breit, 2. Zeile lesbare Breite) zeigen;

Ich meine natürlich zwei Spalten
Es müssen zwei Spalten nebeneinander sein, die Anzahl der Zeilen ist ja egal. Und natürlich meine ich auch die _Spalten_breite und nicht die Zeilenbreite

kurz und gut, da wo Zeile steht muß Spalte hin.

bis dann,
Jan

Ich meine natürlich zwei Spalten
Es müssen zwei Spalten nebeneinander sein, die Anzahl der
Zeilen ist ja egal. Und natürlich meine ich auch die
_Spalten_breite und nicht die Zeilenbreite

Hi Jan!

Hab ich gestern zum Glück auch irgendwann bemerkt.
Deine Erklärung war aber prima!
Dein Code funktioniert auch, ich hätte da nur noch ein kleines Problem:

Der Code ist ja nur für 1 Schlagwort, wie „verbinde“ ich ihn mit den anderen 4 Schlagworten?
Ich hab gestern schon rumprobiert, es ist mir aber nicht gelungen. Aber es müßte doch funktionieren, daß alle 5 Schlagworte in einer Abfrage sind, oder?

Gruß Lena

Hi Jan!

Hab ich gestern zum Glück auch irgendwann bemerkt.
Deine Erklärung war aber prima!
Dein Code funktioniert auch, ich hätte da nur noch ein kleines
Problem:

Der Code ist ja nur für 1 Schlagwort, wie „verbinde“ ich ihn
mit den anderen 4 Schlagworten?

Hallo Lena,

wenn ich es recht verstehe, hast du 5 Kombifelder, also brauchst du für jedes Kombifeld diese Abfrage (nur ggf. mit einer anderen Tabelle als Datenherkunft).

In der Abfrage, auf der dein zweiten Formulars beruht, hast du dann (hoffentlich) 5 Felder, die die IDs der versch. Schlagworte sind.
Bei jedem der 5 Felder gibst du als Kriterium ein:
„Wie [forms]![Formular eins]![meinKombifeld]“
wichtig ist nur, daß das Kombifeld mit dem entsprechenden Abfrage-Feld zusammenpasst, soll heißen, das Kombifeld für die Automarken bringt nicht viel als Kriterium für den Spritverbrauch.

Ich hab gestern schon rumprobiert, es ist mir aber nicht
gelungen. Aber es müßte doch funktionieren, daß alle 5
Schlagworte in einer Abfrage sind, oder?

Gruß Lena

In der Abfrage mußt du natürlich die Tabellen / Abfragen haben, in denen deine Schlagworte sind.
Wenn du also z.B. Automarken und Verbrauch pro 100 km in Litern als Schlagworte hast, brauchst du zwei (je eine) Abfragen für die Kombifelder und eine Abfrage, auf der Formular2 beruht (nenen wir sie qryForm2).
In qryForm2 brauchst du dann mind. die Tabelle mit den Automarken und den Automarken-IDs und die Tabelle mit dem Verbrauch und der Verbrauchs-ID [und wahrscheinlich noch die eine oder andere Tabelle mit irgendwelchen Daten, die du dann im Fornular2 zeigen willst].
Du wählst dann die Felder mit den IDs aus, und gibst o.g. Kriterium ein (natürlich das entsprechende).
Dann sollte es klappen.
Kriterien in einer Abfrage, die nebeneinander stehen, sind UND-verknüpft, untereinander ODER, schräg untereinander ENTW.ODER
(1Feld | 2Feld
Krit. | nichts
nichts | Kriterium )

bis dann,
JAn