2.4k Aufrufe
Gefragt in Datenbanken von Mitglied (335 Punkte)
Hallo zusammen,

ich möchte mein Unterformular mit Hilfe einer Textbox filtern, die sich im Haupftformular Frm_Logistic_Data befindet.

Das Unterformular Frm_Logistic_Data_SFrm beruht auf einer Tabelle mit den Namen Tbl_Logistic_Data. Die für den Filter ausschlaggebende Textbox heißt txt_Project.

Ich habe folgenden Code geschrieben:

'Filter Subform
If IsNull(Me.txt_Project) Then
'If the combo is Null, use the whole table as the RecordSource
Me.RecordSource = "tbl_Logistic_Data"
Else
strSQL = "SELECT tbl_Logistic_Data.* FROM tbl_Logistic_Data " & _
"WHERE tbl_Logistic_Data.Project = " & Me.txt_Project & ";"
Me.RecordSource = strSQL
End If

Mein Problem ist, dass ich immer aufgefordert werde, noch einen Parameterwert einzugeben, aber das soll ja mit txt_Project geschehen.

Wisst Ihr, was ich falsch mache?

Gruß

Peter

9 Antworten

0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Peter,

du bist ja schwer am Implementieren. Dein Code hat zwei kleine Fehler.

1. Um auf einen Wert im Hauptformular zuzugreifen musst du das angeben. Verwende also
Me.parent!txt_Project

2. da es sich bei "txt_projekt" augenscheinlich um ein Textfeld handelt, musst du die Zeichenkette mit "Tüttelchen" umschließen:
strSQL = "SELECT tbl_Logistic_Data.* FROM tbl_Logistic_Data " & _
"WHERE tbl_Logistic_Data.Project = '" & Me.parent!txt_Project & "'"
Noch ein Hinweis: Auf Felder greift man über "!" zu nicht mit dem Punkt. Dieser ist für die Eigenschaften des Objekts reserviert. Bsp.: "Me.visible = true" setzt Me auf sichtbar wogegen "Me!visible = true" den Feldwert auf true setzt.

Gruß
Ralf
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Hallo Ralf,

Ja ich bin kräftig dabei aber ich hätte nie gedacht das Formulare zu erstellen länger dauern als Abfragen.

Ich habe Deinen Code übernommen und lediglich aus parent tabctl1 gemacht, da sich die Textbox wie auch das Unterformular auf einer Registerkarte befindet.

Leider kommt dann die Fehlermeldung "Type mismatch"

Ich habe hin und her probiert, aber leider klappt es nicht.

Woran könnte es liegen.

Gruß

Peter
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Peter,

.parent war schon richtig. Diese Eigenschaft enthält das Objekt des übergeordneten Formulars,
wenn man im Code des Subformulars ist.
Kennst du den Debug-Modus? Wenn nicht, hier eine kurze Info. Gehe mal in den Code oben und
setze den Cursor auf die Zeile mit "Me.recordsource ..." und drücke die Fkt-Taste F8. Du bekommst
dann einen roten Kreis vor der Zeile angezeigt. Wechsele dann wieder in das Formular und führe
die Aktion aus, die den o.g. Code ausführt. Die Codeausführung bleibt am Haltepunkt stehen. Gehe
jetzt in das Direktfenster (menü ansicht direktfenster) und führe mal den Befehl "? Strsql" aus und
poste mal das Ergebnis.

Gruß Ralf
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Peter,

Falls bei dem ?-Befehl nix raus kommt, führe statt dessen mal "? Me.parent.name" bzw.
"Me.parent.parent.name" aus. Evtl. bekommen wir da ein paar nette Infos raus.

Ich sitze gerade im Zug und auf dem G1 läuft kein Access :-)

Gruß
Ralf
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Hallo Ralf,

leider zeigt er bei strSQL immer "" an, egal was ich mache.

Dazu kommt die Fehlermeldung "The expression you entered has an invalid use to the parent property".

Liegt das vielleicht daran, dass das Textfeld txt_Project nicht mit dem Unterformular verbunden ist? txt_Projekt ist nämlich ungebunden.

Gruß

Peter
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Peter,

Hört sich nicht gut an. Da kann ich dir aber nur weiter helfen, wenn ich mir das Formular direkt
ansehen könnte.

Gruß ralf
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Ralf,

ich habe die Datenbank entsprechend modifiziert und wollte sie hochladen.

Aber netupload unterstuetzt .mdb Formate nicht mehr. Wo kann ich die DB noch hochladen.

Gruß und ein erholsames WE.

Peter
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Peter,

schicke sie an "Peter3011.5.hinki@spamgourmet.com", oder zuerst zippen und dann hochladen.

Gruß
Ralf
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Hallo zusammen,

ich habe eine Lösung gefunden, die sogar recht simpel ist:

If IsNull(txt_Project) Then
Me!Frm_Sales_Data_SFrm.Form.FilterOn = False
Else
Me!Frm_Sales_Data_SFrm.Form.Filter = "Project ='" & Me!txt_Project & "'"
Me!Frm_Sales_Data_SFrm.Form.FilterOn = True
End If

Manchmal hilft es, wenn man Probleme einfach mal beiseite legt und später noch mal draufschaut :).

Gruß

Peter
...