Neuigkeiten:

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

Mobiles Hauptmenü

Frage zur Anzeige der Datensatznavigation in Textbox

Begonnen von accessy, Januar 04, 2013, 20:21:44

⏪ vorheriges - nächstes ⏩

accessy

Ich habe die Datensatznavigation im Formular ausgeblendet und eigene CommandButton dafür eingebaut.

Die Anzeige der Datensätze habe ich in eine Textbox eingebaut.
Das sieht so aus:

="DS " & [CurrentRecord] & " von " & DomAnzahl("*";Daten")

Das funktioniert sehr gut.

Aber wenn man den Filter aktiviert, dann wird ja unten in der normalen Datensatznavigation z.B. " von 3 (Gefiltert) angezeigt.
Ich möchte eine 2. Textbox haben, in der die Anzahl der gefilterten angezeigt wird.
Aber wie sieht der Steuerelementeinhalt dann aus?

bahasu

Hi,

ruf in Deinem Anzeigesteuerelement die folgende Funktion auf, die so deklariert ist:

Private Function fx() As Long
    fx = Me.RecordsetClone.RecordCount
End Function

Harald

Servus

accessy

Kannst du mir das etwas näher erklären?
Anzeigensteuerelement?
Und wie rufe ich, oder besser gesagt wie soll die Textbox die Funktion aufrufen?

bahasu

Hi,

Zitat von: accessy am Januar 04, 2013, 22:40:15
Anzeigensteuerelement?

damit meinte ich das Textfeld, in dem Deine Anzahl an gefilterten Daten angezeigt wird.

Anbei ein Beispiel.
Dort gibt es ein Formular, bei dem ich die Datensatzanzeige (unten links) ausgeblendet habe.

Die Anzahl der Daten wird in einem ungebundenen Steuerelement angezeigt: In dessen Eigenschaft "Steuerelementinhalt" ist eingetragen: =fx()

Die Funktion fx ist im VBA-Teil des Formulars deklariert.


Private Function fx() As Long
    Me.RecordsetClone.MoveLast
    fx = Me.RecordsetClone.RecordCount
End Function

Harald

[Anhang gelöscht durch Administrator]
Servus

accessy

Ich habe mir dein Beispiel angesehen.
Irgendetwas stimmt nicht; bzw. ist falsch von meiner Seite her.

Ich habe die Function im VBA Teil des Formulars stehen.
Im Steuerelementinhalt der Textbox steht =fx()
Gehe ich vom Entwurf in die Formularansicht steht in der Textbox #Fehler


bahasu

Hi,

kann es sein, dass gar keine Datensätze selektiert waren?
Vielleicht hilft:
    On Error Resume Next
    Me.RecordsetClone.MoveLast
    fx = Me.RecordsetClone.RecordCount

Harald
Servus

accessy

Dieses
On Error Resume Next
bewirkt lediglich, dass jetzt immer nur 0 angezeigt wird.

Gibt es für die Anzahl der gefilterten Datensätze nicht auch so eine Möglichkeit
ohne VBA, also ohne Function?

So wie eingangs das hier auch geht
="DS " & [CurrentRecord] & " von " & DomAnzahl("*";Daten")

bahasu

Hi,

vielleicht kannst Du eine abgespeckte und gezippte Datenbank (max als access 2003) zur Verfügung stellen, damit man jenseits von Spekulationen der Sache auf den Grund gehen kann.

Harald
Servus

accessy

Dieses Anliegen gab es schon mal und wurde wohl auch ohne VBA gelöst.
Ich habe es mal probiert, aber bekomme es nicht hin.
Meine Textbox hat den Namen GEFILTERT.

http://www.ms-office-forum.net/forum/showthread.php?t=200034

In dieser Lösung stehen die Zeilen, die du auch im VBA hast.
Aber wie soll man 2 Zeilen in die Eigenschaft der Textbox GEFILTERT bekommen?


database

#9
Hallo,

das ist keine Lösung OHNE VBA!

Im Prinzip wie es Harald vorgeschlagen hatte.

Nimm mal den Code an die Stelle.


Private Function fx() As Long
   If Me.RecordsetClone.RecordCount > 0 Then
       Me.RecordsetClone.MoveLast
       fx = Me.RecordsetClone.RecordCount
   Else
       fx = 0
   End If
End Function


Wenn du keine programmierte Filterfunktion einsetzt, musst du den Filter zurücknehmen BEVOR du einen neuen setzt.

p.s. Habe das Beispiel von Harald ein wenig abgeändert und noch eine weitere Textbox eingebaut, in der nun die gleiche Anzeige stattfindet wie in den Access-eigenen Navifeldern


[Anhang gelöscht durch Administrator]

accessy

Volle Funktion. Super.....
Und gleich noch 2 Fragen hinterher
Ich habe den Code erweitert, so dass diese Textbox NUR bei aktivem Filter Werte anzeigt.
Aber es erscheint #Fehler. fx=0 oder fx="" geht also nicht. Ebenso Me.Gefiltert ="" geht auch nicht.
Zitat
Private Function fx() As Long
If Me.FilterOn = True Then
   If Me.RecordsetClone.RecordCount > 0 Then
      Me.RecordsetClone.MoveLast
      fx = Me.RecordsetClone.RecordCount
    Else
      fx = 0
    End If
  Else
    fx = ""
End If
End Function

Im Steuerlementeinhalt steht
Zitat
=fx() & " DS gefunden"

Zitat
Du schreibst
Wenn du keine programmierte Filterfunktion einsetzt, musst du den Filter zurücknehmen BEVOR du einen neuen setzt.

Dazu meine 2.Frage.
Zitat
Private Sub UniFilter_Change() 'Universalfilter
  Me.Filter = "Mitarbeiter & Kunde & Funktion & Art & Status & Bemerkungen like '*" & Me!UniFilter.Text & "*'"
  Me.FilterOn = True
End Sub

Private Sub UniFilter_DblClick(Cancel As Integer) 'Universalfilter Feld leeren
  Me.UniFilter = " "
  Me.FilterOn = False
End Sub
Beispiel:
Ich klicke in diese Textbox und gebe die Buchstaben Ber ein. Also für Berlin.
Ich klicke auf "B"... 215 gefunden
Ich klicke auf "E"....145 gefunden
Ich klicke auf "R"....37 gefunden...
wunderbar...Volle Funktion,
aber wenn ich manchmal nach einem Doppelklick in diesem Feld das ganze nochmal mache,
bekomme ich diese Werte 215,145,37 nicht mehr.
Als ob der Filter nicht "zurückgesetzt" ist, oder die Suche nicht von Anfang an der DB läuft.

Hast du dafür auch eine Lösung, was ich noch falsch mache?

database

Hallo,

vielleicht liegst's daran:

Private Sub UniFilter_Change() 'Universalfilter
  Me.Filter = "Mitarbeiter & Kunde & Funktion & Art & Status & Bemerkungen like '*" & Me!UniFilter.Text & "*'"
  Me.FilterOn = True
End Sub

Private Sub UniFilter_DblClick(Cancel As Integer) 'Universalfilter Feld leeren
Me.UniFilter = " "
  Me.Filter= ""
  Me.FilterOn = False
End Sub

Was passiert, wenn du zusätzlich 'grün' verwendest nachdem du das Filter-Feld entleert hast?
Anders bleibt der gesetzte Filterwert ja erhalten

accessy

Der erste Test sieht schon mal nicht schlecht aus.
Ich muss das noch bisschen länger testen.

Hast du auch eine Idee zu dem oben erwähnten Anliegen?
Die Textbox mit Namen GEFILTERT soll leer sein, wenn der Filter NICHT aktiv ist.
Aber es erscheint dieses #Fehler.

Wie bekomme ich das weg?

database

#13
Hallo,

ZitatWie bekomme ich das weg?

If Me.FilterOn = False then
  Me!GEFILTERT = ""
End If

Probier's mal - sollte funktionieren

bzw.
ZitatDie Textbox mit Namen GEFILTERT soll leer sein, wenn der Filter NICHT aktiv ist.
Welchem Feld der Musterlösung entpräche dieses Feld 'GEFILTERT'?

Hab's im Beispiel mal versucht nachzustellen...  ;)

[Anhang gelöscht durch Administrator]

accessy

Ich kann das in deiner Muster DB nicht nachvollziehen.

Wenn der Code so aussieht, dann steht dort immer z.B. 545 DS gefunden.
Der Filter ist ja auch NICHT aktiv. Das ist dann klar.

Zitat
Private Function fx() As Long
   If Me.RecordsetClone.RecordCount > 0 Then
      Me.RecordsetClone.MoveLast
      fx = Me.RecordsetClone.RecordCount
     Else
      fx = 0
   End If
End Function

Das mit dem IF...THEN habe ich in allen möglichen Variationen gemacht.
Ich habe auch mal
If Me.FilterOn = False then
   Me!GEFILTERT = ""
   Exit Function
End If
getestet.

Jetzt habe ich mal was ganz verrücktes gemacht, was tatsächlich funktioniert.
Das sieht dann so aus:
Zitat
Private Function fx() As Long
If Me.FilterOn = True Then
   Me.Gefiltert.ForeColor = 16777215 'Farbe weiss
Else
   Me.Gefiltert.ForeColor = 4194304 'Farbe wie Back
End If
   If Me.RecordsetClone.RecordCount > 0 Then
      Me.RecordsetClone.MoveLast
      fx = Me.RecordsetClone.RecordCount
     Else
      fx = 0
   End If
End Function