Neuigkeiten:

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

Mobiles Hauptmenü

Beim Laden des Formulars wird der Filter überschrieben

Begonnen von cyberchris, April 12, 2013, 17:49:21

⏪ vorheriges - nächstes ⏩

cyberchris

Hallo,

ich habe mal wieder ein kleines Problem:

In einer Übersicht (Form) konnte ich per Klick auf einen Button Details zu dem bestimmten Eintrag anzeigen lassen (weiteres Form)
Aufgerufen habe ich das Unterformular wie folgt:

DoCmd.OpenForm "Unterformular", , , "Ident = '" & Ident.Value & "'", , , "Ansicht"

Im Unterform war die Datensatzquelle bereits vorbelegt. das passte auch alles soweit.


Nun muss ich aber die Datensatzquelle beim Laden definieren, da noch eine andere Bedingung abgefragt wird. Dadurch funktioniert auch der Filter nicht mehr... Wie kann man das lösen?

Im Unterform:
Me.Recordsource = "SELECT .....WHERE PMDB.Ident = '4711';"         (wäre das so korrekt??)

Ich hatte schon versucht den Filter in einem string zu speichern und bei Me.Recordsoure wieder einzubauen... Hier ist es dann aber so, dass beim Laden des Formular komischerweise die Funktion "Beim Anzeigen" mehrfach durchlaufen wird - hier ist auch ein kleiner Code hinterlegt.


Ich hoffe, dass alles soweit verständlich erklärt ist:-)

Vielen Dank
Gruß Christoph

DF6GL

Hallo,

eigentlich handelt es sich hier nicht um ein "Unter"-Formular in eigentlichen Access-Sinne, eher um ein ganz "normales" Form, das mit Openform geladen wird....




"Nun muss ich aber die Datensatzquelle beim Laden definieren, da noch eine andere Bedingung abgefragt wird."

Warum?

Was hindert Dich denn daran, die weitere Bedingung (kann man aber in Deinem Beispiel nicht erkennen) mit in den Where-Condition-Parameter von Openform einzubauen?




cyberchris

Hallo,

Mit dem Formular hast du natürlich recht. Ist ein ganz normales Formular.

Die Datensatzquelle möchte ich je nach Usereinstellung anders laden.

Hintergrund:
In einer Tabelle gibt es 2 Spalten. Eine Spalte enthält den Text in Deutsch und die zweite in Englisch.
Beim Laden des Formular frage ich die Benutzereinstellung ab. Je nachdem ob DE oder EN habe ich eine andere Datensatzquelle...betrifft aber nur eine Spalte. D. h. es ist auch nur ein Parameter anders: tblxy.text_DE oder tblxy.text_EN

Kann man das auch anders lösen.

Danke
gruß Christoph

DF6GL

#3
Hallo,

beschreibe mal (genau) alle beteiligten Tabellen/Abfragen und anhand deren, was genau passieren soll...



Vermutlich:





Sub Form_Open (Cancel as Integer)
If Nz(Me.Openargs),"DE") = "EN" Then
Me.Recorsource ="Select Feld1, Feld2, FeldEN from tblTabelle1"
Else
Me.Recorsource ="Select Feld1, Feld2, FeldDE from tblTabelle1"
End If
End Sub



Sub btnButton_Click()

Dim Ansicht as String
Ansicht="EN"

DoCmd.OpenForm "frmFormular1", , , "Ident = '" & Me!Ident & "'", , ,Ansicht

End Sub


cyberchris

Hallo,

ja. Im Prinzip sieht das so aus.
Problem ist, da Me.Recordsource im Form_Load gesetzt wird und nicht mehr bei den Eigenschaften des Forms, dass die where-Condition von OpenForm so nicht mehr funktioniert. Kommen alle Daten, bzw. der erste Eintrag ist der geladenen Tabelle und nicht mehr die IdentNr, die übergeben wird.

gruß Christoph

DF6GL

Hallo,

ok, versuchs mal so:



Sub Form_Open (Cancel as Integer)
Dim strFilter as String

strFilter =Me.Filter

If Nz(Me.Openargs),"DE") = "EN" Then
Me.Recorsource ="Select Feld1, Feld2, FeldEN from tblTabelle1"
Else
Me.Recorsource ="Select Feld1, Feld2, FeldDE from tblTabelle1"
End If


Me.Filter=strFilter
Me.Filteron=true
End Sub
 





Wobei das Steuerelement, das den englischen oder deutschen Text anzeigen soll, bei seiner Steuerelemeninhalt-Eigenschaft auch entspr. angepasst werden muss.

cyberchris

#6
Hi,

danke für den Tipp.
das hatte ich auch schon mal versucht.
Mit Ausname, dass ich "Cance as Integer" nicht im Sub stehen habe und dass mein Sub ein Private Sub ist. Kann das was ausmachen?

Problem hierbei:
Im Form_current habe ich auch noch etwas drinnen stehen. Das wird komischerweise, wenn ich dein Code so verwende bei Laden der Seite 4x aufgerufen, anstatt wie vorher nur 1x. Ist echt seltsam...

Ich habe mal bei der Eigenschaft "beim Anzeigen" die Eigenschaftprozedure gelöscht und am Ende bei Form_load per VBA zugeweisen. So funktioniert es...Me.Current = "[Event ....

Gruß Christoph