Juli 14, 2020, 21:27:01

Neuigkeiten:

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


Lzf 2455, Filterprozedur

Begonnen von mad, Juni 20, 2020, 20:02:52

⏪ vorheriges - nächstes ⏩

mad

Hallo Zusammen,

bin gerade am umstellen meiner Inventar-DB und seitdem habe ich das Problem das mein Suche-Ereignis nicht mehr funktioniert. Eigentlich habe ich gedacht ich müsste nur die neuen Feld-Bezeichnungen übernehmen, aber das war wohl zu einfach gedacht.

Meine Vorgängerversion hatte folgende Tab-Beziehungen:

,,Inv_Beziehung_alt.PNG"

Mit den Kombifeld ,,SucheKategorien" wird nachfolgende Ereignisprozedur abgearbeitet.
Private Sub SucheKategorie_AfterUpdate()
    'Datenherkunft des Formulars einschränken... 
    Me.RecordSource = "SELECT tblKategorien.Kategorienr, tblKategorien.Kategorie" _
                    & " FROM tblKategorien" _
                    & " WHERE(tblKategorien.Kategorie)=[Forms]![frmKategorien]![SucheKategorie];"   
    'Datenherkunft des ersten Unterformulars einschränken, sonst werden nach Kategorienwechsel keine Arten angezeigt...
    Me.UFArten.Form.RecordSource = "SELECT tblArten.ArtenNr, tblArten.Arten, tblArten.KategorienNr" _
                    & " FROM tblArten" _
                    & " WHERE (((tblArten.Kategorien)=[Forms]![frmKategorien]![SucheKategorie]));"   
    'Suchkombi im 1. Unterformular aktualisieren...
    Me.UFArten.Form.SucheArten.Requery
    '...und aktivieren...
    Me.UFArten.Form.SucheArten.Enabled = True
    'Suchkombi im 2. Unterformular leeren ....
    Me.UFArten.Form.UFTypen.Form.SucheTypen = ""
    '...und deaktivieren, damit erst nach der Arten-Wahl ein Typ gewählt werden kann...
    Me.UFArten.Form.UFTypen.Form.SucheTypen.Enabled = False   
End Sub


In der neuen DB habe ich folgende Tabellen-Beziehungen:

,,Inv_Beziehung_neu.PNG"

Wie gesagt, ich dachte ich muß jetzt nur die alten Feldbezeichnungen gegen die neuen austauschen.
Kategorienr (Text) in KatID (Zahl)
Kategorie (Text) in Kat_Bez (Text)
ArtenNr (Text) in ArtenID (Zahl)
Arten (Text) in Arten_Bez (Text)
etc.
Nun bekomme ich folgende Fehlermeldung: ,,LZF 2455"

Meine aktuelle Ereignisprozedur sieht wie folgt aus:
Private Sub SucheKategorie_AfterUpdate()
    'Datenherkunft des Formulars einschränken...   
    Me.RecordSource = "SELECT tblKategorien.KatID, tblKategorien.Kat_Bez" _
                    & " FROM tblKategorien" _
                    & " WHERE(tblKategorien.Kat_Bez)=[Forms]![frmKategorien]![SucheKategorie];"
    'Datenherkunft des ersten Unterformulars einschränken, sonst werden nach Kategorienwechsel keine Arten angezeigt...
        Me.UFArten.Form.RecordSource = "SELECT tblArten.ArtenID, tblArten.Arten_KatID, tblArten.Arten_Bez" _
        & "FROM tblArten" _
        & "WHERE (((tblArten.Arten_KatID) = [Forms]![frmKategorien]![SucheKategorie]));"   
    'Suchkombi im 1. Unterformular aktualisieren...
    Me.UFArten.Form.SucheArten.Requery
    '...und aktivieren...
    Me.UFArten.Form.SucheArten.Enabled = True   
    'Suchkombi im 2. Unterformular leeren ....
    Me.UFArten.Form.UFTypen.Form.SucheTypen = ""
    '...und deaktivieren, damit erst nach der Arten-Wahl ein Typ gewählt werden kann...
    Me.UFArten.Form.UFTypen.Form.SucheTypen.Enabled = False   
End Sub


Wenn ich diesen Bereich
Zitat...
Me.UFArten.Form.RecordSource = "SELECT tblArten.ArtenID, tblArten.Arten_KatID, tblArten.Arten_Bez" _
        & "FROM tblArten" _
        & "WHERE (((tblArten.Arten_KatID) = [Forms]![frmKategorien]![SucheKategorie]));"   
...


ZitatSELECT tblArten.ArtenID, tblArten.Arten_KatID, tblArten.Arten_Bez FROM tblArten WHERE (((tblArten.Arten_KatID) = [Forms]![frmKategorien]![SucheKategorie]));

als Abfrage erstelle, kommt das richtige Ergebnis!



Hätte jemand einen Tipp an was es liegen könnte?

Gruss
Mad

crystal

Hallo,
ganz einfach, in:
Zitat
        Me.UFArten.Form.RecordSource = "SELECT tblArten.ArtenID, tblArten.Arten_KatID, tblArten.Arten_Bez" _
        & "FROM tblArten" _
        & "WHERE (((tblArten.Arten_KatID) = [Forms]![frmKategorien]![SucheKategorie]));"   


fehlt vor "FROM" und "WHERE" jeweils ein Leerzeichen, das zuvor jeweils noch da war...

Gruß,
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

mad

Hallo,

habe die "Leerzeichen" eingefügt, aber leider hat sich nichts geändert.
ZitatMe.UFArten.Form.RecordSource = "SELECT tblArten.ArtenID, tblArten.Arten_KatID, tblArten.Arten_Bez" _
                & " FROM tblArten" _
                & " WHERE((tblArten.Arten_KatID) = [Forms]![frmKategorien]![SucheKategorie]);"

Vielleicht hilft die dazugehörge Abfrage:
ZitatSELECT tblArten.ArtenID, tblArten.Arten_KatID, tblArten.Arten_Bez
FROM tblArten
WHERE (((tblArten.Arten_KatID)=[Forms]![frmKategorien]![SucheKategorie]))
ORDER BY tblArten.ArtenID;

Gruss
mad

Beaker s.a.

@mad
Deine Beziehungen sind nicht korrekt. Du hast ja eine Hierarchie
von Kategorie über Arten zu Typen. Dann musst der FK in tblArtikel
auch auf die Kategorie verweisen, - Art und Typ hängen ja davon ab.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

mad

Hallo,

die Beziehungen wurden gemeinsam bzw. von DF6GL so festgelegt.

Hättest Du das sinngemäß event. so gemeint (Anhang)?

Ich habe mir mal erlaubt eine Test_DB anzuhängen.


Gruss
mad

Beaker s.a.

@mad
ZitatHättest Du das sinngemäß event. so gemeint (Anhang)?
Nicht ganz, - "Artikel_TypID" muss dann natürlich "Artikel_KatID" heissen,
und die Beziehung eine normale 1:n sein, so wie vorher auch.
Zitatdie Beziehungen wurden gemeinsam bzw. von DF6GL so festgelegt.
Da ich Franz ungern widersprechen möchte, würde ich mich freuen, wenn er
noch was dazu sagen würde.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

DF6GL

Hallo,

na denn...

Die gezeigten Beziehungen sind nicht von mir so festgelegt worden.

Von mir war Artikel_TypID  mit TypID  in Beziehung gesetzt worden.

@mad:  Ich versteh nicht, warum Du dauernd an der Tabellenstruktur änderst und Dir damit unnötige Probleme einfährst.

Zudem sind die gezeigten 4 Tabellen nicht der gesamte Tab-Aufbau.



Beaker s.a.

Hallo Franz,
ZitatVon mir war Artikel_TypID  mit TypID  in Beziehung gesetzt worden.
So hatte er es, und ich habe es bemängelt.
Ist es denn nicht so, dass man bei der Art Hierarchie die unterste
Stufe in Beziehung setzt?

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

DF6GL

Hallo,

"tblTypen" ist doch die unterste Ebene...


So war es jedenfalls zum Zeitpunkt der "Datenanalyse" definiert.


Beaker s.a.

Hallo Franz,
Nach intensiverem Nachdenken und Visualisierung muss ich dir wohl recht geben.

@mad
Dann vergiss meinen Einwand am Besten schnell wieder und mache mit dem Gehabten
weiter. Sorry, aber ich habe manchmal echt 'nen Knoten im Gehirn.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

mad

Das beruhigt mich wenn ihr Profis auch mal einen Hänger habt.
Ich möchte meine Tabellenstruktur natürlich nicht ändern ,wenn nicht nötig. Aber ich nehme immer gerne Hinweise zur verbesserung an.

Dann würde ich gerne bei #3 weitermachen. Ich bekomme immer noch die Fehlermeldung, auch nach einfügen der Leerzeichen wie von "crystal" angemerkt, siehe Anhang.


Gruss
mad

Beaker s.a.

@mad
Na, wie man Formularbezüge in SQL-Strings einbaut solltest du
aber schon gelernt haben.
Zu meiner Schande muss ich allerdings gestehen, das mir dieser
Fehler von Anfang an nicht aufgefallen ist.
Beispiel gilt für alle ähnlichen Codezeilen
"... WHERE tblArten.Arten_KatID = " & Forms!frmKategorien!SucheKategorie
Andere Frage, warum filterst du in der Abfrage vorher mit "Kat_Bez"?
Warum nimmst dufür das Suchfeld kein Kombi? Da kannst du die Bezeichnung
eingeben und gefiltert wird mit der ID.
Wie geht das überhaupt, das gleiche Feld für einen Vergleich mit Text
(auch noch mit falscher Syntax, s.u.) uns anschliessend mit einer Zahl?

Bei Textfelder lautet die Syntax
"... WHERE tblKategorien.Kat_Bez = '" & Forms!frmKategorien!SucheKategorie & "'"
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

mad

Hallo,

Danke schon mal.
Habe aber Deinen Hinweis
Zitat von: undefinedWarum nimmst du für das Suchfeld kein Kombi? Da kannst du die Bezeichnung
eingeben und gefiltert wird mit der ID.
aufgegriffen.

Nur mal so zum testen!

Habe mal für jedes SuchKombi,
"SucheKategorie"
"SucheArten"
"SucheTypen"
eine Ereignisprozedur erstellt.
Funktioniert soweit ich im Folgekombi die richtige Auswahl treffe:
zB.
SucheKategorie 2 (Geräte)
SucheArten 204 (Rettungsgerät)
SucheTypen 204001 (Abseilgerät)

Aber wie kann ich jetzt zB das Kombi "SucheArten" so filtern das wenn ich im "SucheKategorie" 2 (Geräte) ausgewählt habe im "SucheArten" nur noch alle Arten die dann eben mit 20x beginnen? Für das Kombi "SucheTypen" würde dann ähnliches gelten. Das ist ja Sinngemäß die alte Prozedur.

Die Test-DB habe ich im Anhang.


Gruss
Manfred

mad

Hallo Zusammen,

habs jetzt mit folgenden Kriterien in der jeweiligen Datenherkunft des Kombifelder umgesetzt.

Kombifeld "SucheArten" --> [Forms]![frmKategorien]![SucheKategorie]
Kombifeld "SucheTypen" -->[Forms]![frmKategorien]![UFArten]![SucheArten]

Funktioniert soweit.

Danke für eure Unterstützung.


Gruss
mad