Hallo liebe Accessgemeinde,
seit etwa 6 Stunden lese und Suche ich im Netz nach einer Lösung aus folgender Ausgangsposition zum Ziel zu finden:
Ich habe eine Kundentabelle in der jeder Datensatz für eine Person steht. Jeder Datensatz enthält eine Spalte, in derjeweils die Anrede "Herr" oder "Frau" gespeichert ist.
Dazu habe ich eine Abfrage, die diese Spalte "Anrede" zunächst(!) ungefiltert übernimmt.
Die nächsten Beteiligten sind eine Optionsgruppe("Frau"=1;Herr=2;"beide"=3;Standartwert=3) und ein Listenfeld, welches zur Übersicht die Namen der Abfrage enthält. Beide befinden sich auf demselben Formular.
Wenn ich das Formular öffne, bleibt das Listenfeld bei "beide"(also Ausgabewert 3) leer, wohingegen es bei "Frau" oder "Herr" entsprechend mit Männer- oder Frauennamen gefüllt wird. Ändere ich die Position des Radioknopfes von "Frau" oder "Herr" wieder auf "beide" bleibt das Feld leer.
Einer der vielen Abfragecodes, der zu diesem Ergebnis führt ist folgender:
WHERE (((tblKunden.Vorname) Like "*" & [Formulare]![frmDatensaetzeKomplett]![txtSuchVorname] & "*") AND ((tblKunden.Name) Like "*" & [Formulare]![frmDatensaetzeKomplett]![txtSuchNachname] & "*") AND ((tblKunden.Anrede)=IIf([Formulare]![frmDatensaetzeKomplett]![optSuchGeschlecht]=1,"Frau") Or (tblKunden.Anrede)=IIf([Formulare]![frmDatensaetzeKomplett]![optSuchGeschlecht]=2,"Herr") Or (tblKunden.Anrede)=IIf([Formulare]![frmDatensaetzeKomplett]![optSuchGeschlecht]=3,Not ([tblKunden].[Anrede])="0")) AND ((tblKunden.[Daten aktualisiert])=Yes) AND ((tblKunden.[Kunde löschen])=No));
>>>Da stehe ich jetzt.
Um das Fettgedruckte gehts mir. Das Unterstrichene ist nur einer von zig missglückten Versuchen, dieses Ding doch dazu zu bewegen mir beide Datensätze anzuzeigen. Ich habe auch schon versucht "Herr"Or"Frau" in die Syntax einzubauen und auch vieles anderes. Ich weiß einfach nicht weiter. Was muss ich tun, um beide angezeigt zu bekommen? Funktioniert das überhaupt mit Werten im Textformat?
Habe auch schon Beiträge hier im Forum gelesen, aber das, was ich mir da angesehen habe drehte sich immer um Zahlen. Ich habe zwar versucht, den Code von da zu übertragen aber meine Abstraktionfähigkeiten scheinen nicht gut genug zu sein.
Ich freu mich auf eure Hilfe.
Hallo,
also, ich rate Dir, sich von den Texteinträgen zu verabschieden und die (ungeliebten?) Zahlen zu verwenden.DAnn kann einfach mit dem Optionswert (als Zahl) gefiltert werden und das ganze IIF-Getönse entfällt ersatzlos.
(wobei ich die Notwendigkeit dieser vielen verschiedenen Einzelkriterien nicht so recht nachvollziehen kann. Es reicht doch, nach Vor/Nachname und evtl. Daten_aktualisiert (btw: Leerzeichen in Namen vermeiden!) und/oder Kunde Löschen zu filtern) Dass der Kunde m oder w ist, sieht man dann doch...
##gelöscht
Okay...nur bevor ich jetzt meine Tabelle umschreibe:
gibt es keine Möglichkeit das als Text formatiert zu lassen?
Meine wichtigste Frage ist aber: warum funktioniert das nicht? Was an der Syntax ist falsch?
Ich werde nochmals in die Situation kommen, dass ich entweder den einen oder den anderen oder aber beide Werte gefiltert brauche.
Ich weiß da echt nicht weiter.
Hi,
versuche es mal hiermit:
WHERE (
((tblKunden.Vorname) Like "*" & [Forms]![frmDatensaetzeKomplett]![txtSuchVorname] & "*") AND
((tblKunden.Name) Like "*" & [Forms]![frmDatensaetzeKomplett]![txtSuchNachname] & "*") AND
((tblKunden.Anrede)=IIf([Forms]![frmDatensaetzeKomplett]![optSuchGeschlecht]=1,"Frau",
IIf([Forms]![frmDatensaetzeKomplett]![optSuchGeschlecht]=2,"Herr","")) Or
([Forms]![frmDatensaetzeKomplett]![optSuchGeschlecht]=3)) AND
((tblKunden.[Daten aktualisiert])=Yes) AND
((tblKunden.[Kunde löschen])=No)
);
Hallo MaggyMay,
herzlichen Dank für Deinen Beitrag - er hat mein Problem gelöst. Warum verstehe ich bis jetzt nur so halb. Aber das stört mich auch grad nicht ;)
Access hat mir den SQL Code nach dem Speichern etwas anders geordnet. Ich hoffe, das führt nicht zu Komplikationen, wenn ich gleich noch mehr von diesen Bedingungen einbaue.
lG
TTB
Access behält leider die eingegebene Formatierung nicht bei, aber inhaltlich bleibt der Code derselbe.
Dein Hauptfehler war die Nichteinhaltung der Syntax eines IIF-Statements - es fehlte jeweils der Else-Zweig.
Und im letzten Fall
(tblKunden.Anrede)=IIf([Formulare]![frmDatensaetzeKomplett]![optSuchGeschlecht]=3,Not ([tblKunden].[Anrede])="0")
hast du keinen gültigen Vergleichswert für die Anrede erzeugt, da der Ausdruck
Not ([tblKunden].[Anrede])="0"
einen Wahrheitswert erzeugt.
Aha ;)
Das heißt quasi, dass logisch folgendes passiert, (Entweder es ist "1" dann Frau oder bei "2" Herr)oder(es ist einfach nur auf "3" - womit dann keine Bedingung für das Feld gegeben wird?)
Lieben Dank für die Erklärung. Es funktioniert :)
Jetzt habe ich nur eine Folgefrage:
Ich möchte auch das Alter filtern. In der Datenbank sind noch ne Menge Daten drin, die "unmöglich" sind aber ich möchte sie dennoch nicht verändern (es muss ja auch im Fall der Fälle funktionieren) und keine Probleme beim filtern haben:
Ich habe zwei Textfelder und Weise in der Abfrage dem Feld "Alter" (welches ein aus dem Geburtstagsfeld errechnetes Feld ist) das Kriterium (ZWISCHEN "txtAltervon" und "txtAlterbis") zu. Funktioniert auch wunderbar bis Zahlen über 100 ins Spiel kommen. Bei den Werten zwischen 1 und einhundert zeigt er mir nur Datensätze an, die Mit 1 beginnen. Also 18 und 110. Wie kann ich das umgehen?
Hilft es, wenn ich per VBA für jedes txtFeld eine Variable deklariere und mich im "Zwischen"-vergleich auf diese beziehe?
lG
Chris
Hallo,
wie soll man helfen, wenn man nicht sieht was Du machst ?
Zeige bitte den SQL Text der Abfrage mit der Berechnung für das Alter und den Kriterien ?
Vermutlich verwendest Du Texte und keine Zahlen (Datentypen).
Nun gut; das stimmt nun auch wieder.
Unter SELECT: DateDiff("yyyy",[Geburtsdatum],Date())+(Format(Date(),"mmdd")<Format([Geburtsdatum],"mmdd")) AS [Alter]
und unter HAVING: ((DateDiff("yyyy",[Geburtsdatum],Date())+(Format(Date(),"mmdd")<Format([Geburtsdatum],"mmdd"))) Between [Formulare]![frmDatensaetzeKomplett]![txtSuchVonAlter] And [Formulare]![frmDatensaetzeKomplett]![txtSuchBisAlter])
ACCESS hat mir WHERE durch HAVING ersetzt und einen GROUP BY "Bereich" erstellt. Ist das irgendwie nachteilig?
lG
Chris
Hat keiner eine Ahnung? Oder habe ich gegen irgendwelche Forenregeln verstoßen? Ich hänge immer noch an dem Problem und wäre für Hilfe wirklich dankbar.
lG
Chris
Hallo,
es wäre vermutlich sinnvoller, wenn du den vollständigen SQL-Code zeigst und nicht nur Teile davon, da das geschilderte Problem nicht so ohne weiteres nachgestellt werden kann.
PS:
Der AusdruckDateDiff("yyyy",[Geburtsdatum],Date())+(Format(Date(),"mmdd")<Format([Geburtsdatum],"mmdd"))liefert erwartungsgemäß eine Zahl, also sollte das Kriterium "Between 1 and 100" auch alle dazwischen liegenden Werte berücksichtigen.
Da komm ich mal wieder dazu, an der Datenbank weiter zu machen und es fiel mir bei erneuter Überprüfung vom Anfang an auf, dass ich das Eingabeformat für die Textfelder falsch hatte. Habe das wohl damals nicht gespeichert oder weiß der Kukuck...dennoch Danke für die Hilfe