Neuigkeiten:

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

Mobiles Hauptmenü

mit Kombifeld mittels VBA filtern

Begonnen von aisha, September 24, 2014, 10:06:23

⏪ vorheriges - nächstes ⏩

aisha

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.

MzKlMu

#1
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.
Gruß Klaus

MaggieMay

Hi,
ZitatDas Kombi kann nicht Null (leer) sein.
man kann ein Kombifeld auch löschen, dann hat es im AfterUpdate-Ereignis den Wert NULL.
Freundliche Grüße
MaggieMay

aisha

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

aisha

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

MaggieMay

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.
Freundliche Grüße
MaggieMay

MzKlMu

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.
Gruß Klaus

MaggieMay

#7
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...)
Freundliche Grüße
MaggieMay

MzKlMu

#8
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

Gruß Klaus

MaggieMay

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.
Freundliche Grüße
MaggieMay

aisha

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

DF6GL

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?

aisha

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.

MaggieMay

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...
Freundliche Grüße
MaggieMay

DF6GL

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.