Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: aisha am September 24, 2014, 10:06:23

Titel: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 24, 2014, 10:06:23
Hallo an alle,

Ich habe folgendes Problem. Ich habe ein Formular mit dem ich durch ein Kobinationsfeld filtern möchte. Jedoch bekomme ich ständig den Fehler. "Unzulässiger oder nicht ausreichend definierter Verweis".
Das Kombifeld ist ungebunden und hat den Namen "cbofilterstadt". Das Feld nach dem er suchen soll ist ein Textfeld mit dem Namen "Stadt".
Die Beide angehängten Bilder zeigen meinen VBA Code und die Formularansicht mit dummydaten.
Kann mir einer Sagen wo mein Fehler liegt? Ich würde mich über Hilfe sehr freuen.
Danke schon mal im Voraus.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MzKlMu am September 24, 2014, 11:25:32
Hallo,
der . vor Filter nutzt nichts, hier muss der Verweis auf das Formular dazu.
Entweder so:With Me
    .Filter = ......
    .FilterOn = ....
End With

oder so:
    Me.Filter = ......
    Me.FilterOn = ....


Warum stellst Du VBA Code als Bild ein?
Der direkte Text wäre besser, man hätte das alles direkt kopieren können. Zum Abschreiben habe ich keine Lust.

Die If Bedingung und den Else Zweig kannst Du löschen, ist überflüssig. Das Kombi kann nicht Null (leer) sein.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MaggieMay am September 24, 2014, 12:56:12
Hi,
ZitatDas Kombi kann nicht Null (leer) sein.
man kann ein Kombifeld auch löschen, dann hat es im AfterUpdate-Ereignis den Wert NULL.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 24, 2014, 15:36:18
Hallo MaggieMay und MzKlMu

Vielen Dank für die Antworten. Hier ist die korriegierte Version noch mal.

Private Sub cbofilterstadt_AfterUpdate()
    Me.Filter = "Stadt = " & Me!cbofilterstadt
    Me.FilterOn = True
End Sub

Nun sagt er mir aber ich soll einen Pararmeter eingeben. Woran kann das liegen?

Mfg
aisha
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 24, 2014, 15:46:14
Ich habe jetzt nochmal nachgeschaut.
Meine Felder heißen alles so wie sie da stehen.
Stadt ist mein Textfeld und cbofilterstadt ist mein Kombifeld. Mehr Felder spreche ich ja nicht an.
Danke nochmals für eure Hilfe
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MaggieMay am September 24, 2014, 16:03:12
Wenn das Kombifeld dir lediglich den Namen der Stadt liefert, also einen Text, muss der Wert in Hochkommata gesetzt werden:Me.Filter = "Stadt = '" & Me!cbofilterstadt & "'"Der ursprüngliche CodeIf Not NZ(Me!cbofilterstadt, 0) = 0 Thenließ vermuten, dass die gebundene Kombispalte eine ID sei.

Meinen Kommentar zu Klaus' Null-Theorie hast du gelesen? Diesbezüglich gab es an deinem Code nichts zu korrigieren.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MzKlMu am September 24, 2014, 20:43:06
Hallo,
unabhängig davon ob das Kombi jetzt leer sein kann, würde das ja keinen Sinn machen. Warum soll ein Kombi das man zum Suchen verwendet leer (Null) sein können?
Wenn man DS such würde die Null enthalten müsste man das ohnehin anders filtern.
Und wenn das Feld Text ist, müsste auch das NZ geändert werden. Der Code müsste also in jedem Fall korrigiert werden.

Ich bleibe daher bei meiner Aussage, die Prüfung auf Null (mit Nz) und der Else Zweig machen im gezeigten Kontext keinen Sinn.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MaggieMay am September 24, 2014, 23:16:50
Es ist nunmal so, dass man ein Kombifeld mit Hilfe der Entf-Taste auch löschen kann und dann ist es nunmal leer (bzw. NULL).

ZitatWarum soll ein Kombi das man zum Suchen verwendet leer (Null) sein können?
Der Sinn könnte bspw. sein, dass man den zuvor gesetzten Filter wieder entfernen möchte.

Dass ein erfahrener Access-Programmierer diesen Fakt negiert bzw. nicht kennt, finde ich schon ein wenig merkwürdig, gelinde gesagt.

(auch wenn ich mir hiermit möglicherweise schon wieder neue Feinde mache...)
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MzKlMu am September 25, 2014, 00:06:16
Hallo,
ein Kombi zum Suchen ist an eine Tabelle gebunden. Das Leeren des Feldes per Entf Taste würde also einen Datensatz löschen. Würde das ein erfahrener Programmierer zulassen ? Wohl eher nicht, der würde das Löschen eher noch extra unterbinden.

Und zum Entfernen des Filters das Kombifeld leeren, würde ich auch nicht für guten Programmierstil halten. Da würde man eher per Union noch <Alle> anzeigen und darüber den Filter löschen.

Du kannst mich nicht überzeugen, das Kombi auf Null zu prüfen kann man sich sparen.

PS:
Sachliche Diskussionen erzeugen keine Feinde. An der Sache auf die Du Bezug nimmst, hattest Du den deutlich geringeren Anteil.  ;D ;D

Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MaggieMay am September 25, 2014, 10:11:01
Hallo Klaus,
ZitatDas Leeren des Feldes per Entf Taste würde also einen Datensatz löschen.
muss ich mir jetzt Sorgen machen?  ???

Ein Kombifeld das zur Datensatzsuche eingesetzt wird ist ungebunden. Die Datensatzherkunft kann eine Tabelle oder Abfrage sein. Das Löschen des angezeigten, zuvor ausgewählten Eintrags hat keine Auswirkungen auf die dahinter liegende Tabelle.

Und ob man das Leeren von Kombifeldern (bspw. per Funktionsschaltfläche) zum Entfernen eines Filters wählt oder den Eintrag "alle" dafür vorsieht ist mAn Geschmacksache und hat nichts mit gutem oder schlechtem Programmierstil zu tun.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 25, 2014, 11:10:44
Hey. Super vielen Dank. Es funktioniert ;D ;D

Das letzte Problem was ich habe ist das ich mehrere gleiche Einträge im Kombifeld habe. z.B. Würzburg oder Hamburg ...
Ich weiß in SQL kann man mit distinct die doppelten Datensätze nur einmal anzeigen lassen. Aber ich habe ja keine Abfrage hinter dem Kombifeld sondern eine Tabelle.
Gibt es irgendwie die Möglichkeit in den Eigenschaften des Kombifeldes zu sagen das er die die Städte nur einmal anzeigt oder vielleicht aus in der Tabelle.
Ich würde mich über eure Hilfe sehr freuen.

aisha
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: DF6GL am September 25, 2014, 11:17:45
Hallo,

ZitatIch weiß in SQL kann man mit distinct die doppelten Datensätze nur einmal anzeigen lassen. Aber ich habe ja keine Abfrage hinter dem Kombifeld sondern eine Tabelle.


dann nimm doch eine Abfrage statt der Tabelle.. oder wo ist das Problem?
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 25, 2014, 11:32:24
Ich habe das Problem das ich wenn ich eine Abfrage mache mit allen Feldern und ich die Stadt so "filtern" möchte, das dann keine DS mehr angezeigt werden.

Wenn ich jedoch in der Abfrage nur mein Feld Stadt nehme, und distinct nehme funktioniert es in der SQLansicht und Tabellensicht aber natürlich nicht im Formular, da dann keine weiteren Daten vorhanden sind.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MaggieMay am September 25, 2014, 11:55:52
Ich verstehe das Problem ehrlich gesagt nicht. Zeig doch mal den SQL-Code der Abfrage bei dem keine Datensätze mehr herauskommen.

Wie viele Spalten hat denn das Kombifeld? Vielleicht kannst du das Problem anders lösen...
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: DF6GL am September 25, 2014, 12:01:05
Hallo,

Du sprichst in Rätseln..

Das Formular an sich kann eine Abfrage in seiner DATENHERKUNFT enthalten. Dann können mit Textfeldern im Formular auch die Tabellen-/Abfragefelder (deren Inhalte) angezeigt werden.

Ein Kombinationsfeld kann auch eine Abfrage, bzw. Tabelle in seiner DATENSATZHERKUNFT enthalten, deren Ergebnis dann in der Kombifeld-LISTE angezeigt wird und damit aus den Einträgen ein bestimmter ausgewählt werden kann.

Wenn also nach dem Städtenamen gefiltert werden soll, dann muss zunächst das Tabellenfeld für den Städtenamen in der Datenherkunft des Formulars vorhanden sein. Das Kombifeld erhält eine Abfrage etwa so in seiner Datensatzherkunft:

  Select distinct Stadt from tblDeineTabelle order by Stadt


Gefiltert wird enspr.  den vorangegangenen Hinweisen:

Me.Filter = "Stadt Like '" & Me!cbofilterstadt & "*'"

Datentyp von "Stadt": Text
Nutzung von "Like" und "Sternchen" , um bei  einem leeren Kombifeld alle Datensätze im Formular anzuzeigen.


Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 25, 2014, 12:22:53
Ich habe noch ein wenig rumprobiert mit den Verbesserungen die Ihr mir gegeben habt. Danke dafür.
Also Hier ist der Code

SELECT DISTINCT Klinik.Titel, Klinik.Leiter_NN, Klinik.Leiter_VN, Klinik.K_Fax, Klinik.K_Telefon, Klinik.Klinkname, Klinik.Institut, Klinik.Straße, Klinik.PLZ, Klinik.Stadt, Klinik.Klinikkürzel, Klinik.Funktion, Klinik.D_NN, Klinik.D_VN, Klinik.D_Tel, Klinik.D_Fax
FROM Klinik
ORDER BY Klinik.Stadt;

Er zeigt mir die Tabelle jetzt ohne Fehlermeldung an, jedoch nimmt mein Kombifeld die Spalte Leiter_NN und nicht die Straße.
Mein Kombifeld hat 1 Spalte. (nur Stadt)
aisha
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MaggieMay am September 25, 2014, 12:28:44
Wenn das die Datensatzherkunft des Kombifeldes sein soll und es tatsächlich nur eine Spalte hat (ich tippe mal auf mindestens zwei), wozu dann die ganzen Datenfelder?

Möglicherweise wärest du mit zwei abhängigen Kombifeldern besser bedient. Eins zur Auswahl der Stadt und ein weiteres zur Auswahl der Klinik, bspw.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 25, 2014, 13:01:45
Die anderen Datenfelder habe ich für den Deteilbereich eingeordnet. Die Datenfelder werden angezeigt wenn ich die Stadt ausgewählt habe.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: DF6GL am September 25, 2014, 13:05:38
HAllo,

red doch mal verständlich...

Zeige einfach den SQL-String aus der Datenherkunft des Formulars, bzw. den SQL-String der Abfrage, wenn dort eine solche steht.

Zeige zusätzlich den SQL-String aus der Datensatzherkunft des Kombifeldes, bzw. wenn dort ein Abfragename steht, den SQL-String dieser Abfrage.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 25, 2014, 14:10:37
@DF6GL
Hey, du musst mich nicht so angehen auch wenn du voll der checker in Access bist. Ich kann mich nicht besser ausdrücken.

SQL-String Kombifeld:Klinik Abfrage und wenn ich auf ... klicke kommt
SELECT DISTINCT Klinik.Titel, Klinik.Leiter_NN, Klinik.Leiter_VN, Klinik.K_Fax, Klinik.K_Telefon, Klinik.Klinkname, Klinik.Institut, Klinik.Straße, Klinik.PLZ, Klinik.Stadt, Klinik.Klinikkürzel, Klinik.Funktion, Klinik.D_NN, Klinik.D_VN, Klinik.D_Tel, Klinik.D_Fax
FROM Klinik
ORDER BY Klinik.Stadt;

Beim Formular steht Datensatzquelle ebenfalls Klinik Abfrage.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MaggieMay am September 25, 2014, 14:15:52
Erkläre doch bitte mal, warum du die Abfrage als Datensatzherkunft des Kombifeldes einsetzt, wenn es lediglich dazu dient, eine Stadt auszuwählen.

Und dann schau doch einmal die folgenden Eigenschaften des Kombifeldes nach:
- Anzahl Spalten
- Spaltenbreiten
- gebundene Spalte

Und dann äußere dich bitte auch noch zu meinem Vorschlag mit den zwei Kombifeldern.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: DF6GL am September 25, 2014, 14:21:20
Hallo,

wo "geh ich Dich denn an" ??

Ich(wir) brauchen genaue und konkrete Angaben, um Dir helfen zu können. 

Ich zitiere mich selber:
Zitat
Wenn also nach dem Städtenamen gefiltert werden soll, dann muss zunächst das Tabellenfeld für den Städtenamen in der Datenherkunft des Formulars vorhanden sein. Das Kombifeld erhält eine Abfrage etwa so in seiner Datensatzherkunft:

  Select distinct Stadt from Klinik order by Stadt


Gefiltert wird entspr.  den vorangegangenen Hinweisen:

Me.Filter = "Stadt Like '" & Me!cbofilterstadt & "*'"

Datentyp von "Stadt": Text
Nutzung von "Like" und "Sternchen" , um bei  einem leeren Kombifeld alle Datensätze im Formular anzuzeigen.


Demnach ist die Datensatzherkunft für das Kombifeld falsch, was schon mehrfach angesprochen wurde.  Wenn Du nun zu einer Lösung des Problems kommen willst, dann ändere die Einstellung für das Kombi nach o. g. Vorschlag.


PS: weitere Einstellungen für das Kombifeld:

Spaltenanzahl: 1
gebundene Spalte: 1
Spaltenbreiten: 4cm

mit Ereignisprozedur:

Sub cbofilterstadt_Afterupdate()
Me.Filter = "Stadt Like '" & Me!cbofilterstadt & "*'"
Me.FilterOn=True
End Sub

Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 25, 2014, 14:24:14
Also ich hatte das so verstanden, das ich die Abfrage machen sollte, weil ich ja die mehrfach vorkommenden Ausgaben weg haben wollte. Damit meine ich zum Beispiel Würzburg, Hamburg und so weiter. Ich hatte vorher ja die Tabelle mit dem Feld Stadt als Datensatzherkunft drin.

Eigenschaften des Kombis
Anzahl Spalten: 2
Spaltenbreite:0cm;2,54cm
gebundene Spalte: hab ich nicht gefunden

Zwei von einander abhängende Kombifelder benötige ich miner Meinung nach nicht, da ich meist in einer Stadt nur 1 Klinik habe. 
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 25, 2014, 14:26:19
Gefunden:
Gebundene Spalte :1
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: DF6GL am September 25, 2014, 14:27:32
Siehe mein erweitertes letztes Posting..
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 25, 2014, 14:36:54
OK jetzt geht es wieder aber mein Problem mit der Auflistung der mehrfachen Städten hab ich trotzdem noch. Deswegen hatte ich ja die Umstellung mit der Abfrage gemacht
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MaggieMay am September 25, 2014, 14:48:26
Wenn du das Kombifeld aus der Klinik-Tabelle fütterst und die ID mitführst nützt dir DISTINCT wenig. Doppelte Städte bekommst du immer dann, wenn du mehr als eine Klinik in der Stadt gespeichert hast. Andererseits nützt dir die Auswahl der Stadt allein nichts, wenn sie mehrere Kliniken hat.
So geht es also nicht, das solltest du mal einsehen. Und daher der Vorschlag mit den zwei Kombifeldern.

Oder du nimmst es in Kauf, durch die nach Ort gefilterten Datensätze zu blättern, um die gesuchte Klinik zu finden.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 25, 2014, 15:21:34
Anbei habe ich einen Bildschirnscreen gemacht. So ungefähr sieht das dann Später aus.
Es ist alles gleich ausser der Name und Vorname und eventuell Fax oder so was. Die Klinik jedoch ist gleich für diese Stadt. Und trotzdem hat mein Kombifeld 2x Würzburg enthalten. Wenn ich eins von denen anklicke erscheinen auch beide DS aber ich will nun mal nur einmal im Kombifeld Würzburg drinstehen haben. Anbei habe ich eine Anfrage aus einem anderen Forum gefunden die das beschreibt was ich möchte. Hier wurde auch geraten eine Abfrage zu machen.

"
ich habe eine Frage... bzw. ein Problem, ich habe eine Tabelle in der 200 Einträge vorhanden sind! Im Formular habe ich eine Combobox erstellt (RowSourceType: Tabelle/Abfrage ;; RowSource: "Name der Abfrage")!
Nun sind in dieser Tabelle 10 mal "Computer" vorhanden, wie kann ich nun machen, dass "Computer" in dieser Combobox nur 1 mal und nicht 10 mal dargestellt wird? "
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: MaggieMay am September 25, 2014, 15:32:33
Ich verstehe nicht, warum du dem Vorschlag von Franz von Heute um 14:21:20 nicht folgst.
Dann wäre das Problem doch längst erledigt.

PS:
Dass es sich um ein Endlos-Formular handelt hättest du gleich zu Anfang sagen können.
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: DF6GL am September 25, 2014, 16:22:10
Hallo,

ich verstehe nicht, warum das nicht verständlich ist:  :'(

ZitatIm Formular habe ich eine Combobox erstellt (RowSourceType: Tabelle/Abfrage ;; RowSource: "Name der Abfrage")!
Nun sind in dieser Tabelle 10 mal "Computer" vorhanden, wie kann ich nun machen, dass "Computer" in dieser Combobox nur 1 mal und nicht 10 mal dargestellt wird? "



--->  RowSource:  Select distinct Computer from [Name der Abfrage]

In der Select-Liste NUR EIN Feld mit DISTINCT davor...
Titel: Re: mit Kombifeld mittels VBA filtern
Beitrag von: aisha am September 26, 2014, 09:37:36
Hey Leute.

Ich möchte mich entschuldigen das ich so von Begriff gewesen bin.
Ich hatte nur die Hälfte von Franz seiner Nachricht durchgeführt. Jetzt geht es aber. Vielen Dank nochmal. Auch für die Gedult mit mir. Danke.