Suchen in Textfeldern

Das Suchen nach Texten in Memofeldern funktioniert in Access tadellos – wenn auch nicht besonders schnell, da der Inhalt von Memofeldern nicht indiziert werden kann. Hat man aber einmal den gewünschten Datensatz gefunden, steht man vor dem nächsten Problem: Wie kommt man nun zur passenden Textstelle Dies ist ganz einfach: Sie schauen sich die Lösung in diesem Beitrag an.

Manchmal sucht man auch gar nicht erst nach dem Datensatz, dessen Memofeld den passenden Text enthält, weil man genau weiß, wo sich dieser befindet. Dies ist etwa bei der Vertragsverwaltung aus [1] der Fall, bei der man den passenden Vertragsdatensatz schon herausgesucht hat und nur noch eine bestimmte Textstelle im Vertragstext sucht.

Da das dortige Formular zur Erfassung und Bearbeitung von Verträgen bereits mit ausreichend Steuerelementen gesegnet ist, wird die Anzeige der Vertragstexte in ein eigenes Formular ausgelagert – etwa in jenes aus Bild 1.

pic001.tif

Bild 1: Das Formular zum Durchsuchen von Texten

Ein solches Formular sollte ein Eingabefeld zum Erfassen des Suchbegriffs sowie eine Schaltfläche zum Starten des Suchvorgangs sowie eine Möglichkeit zum Fortsetzen des Suchvorgangs nach der ersten gefundenen Textstelle besitzen.

Im Beispiel erledigt eine Schaltfläche mit der Beschriftung Weitersuchen diese Aufgabe.

Bevor es zur eigentlichen Suche geht, soll das Formular mit den Steuerelementen sowie ein wenig Komfort ausgestattet werden: Wenn Sie in diesem Formular nicht in langen Texten suchen wollten, brauchten Sie kein solches Formular, also soll der Benutzer auch eine Menge Text sehen können. Möglichst so viel, wie auf seinen Monitor passt oder wie er gerade sehen möchte. Das bedeutet, dass der Benutzer das Formular sowie das enthaltene Textfeld anpassen können soll.

Da die anderen Steuerelemente nicht von der Größenänderung betroffen sind, packen Sie diese am besten in den Kopfbereich des Formulars und das Textfeld in den Detailbereich, sodass die Entwurfsansicht wie in Bild 2 aussieht.

pic002.tif

Bild 2: Die Entwurfsansicht des Suchformulars

Fehlt nur noch ein kleine Routine, die beim ändern der Größe des Formulars das Textfeld anpasst. Diese finden Sie in Listing 1: Die Routine verwendet die Eigenschaft InsideHeight des Formulars, um dessen Gesamthöhe zu ermitteln, und zieht die Höhe des Kopfbereichs ab.

Listing 1: Diese Routine passt die Größe des Textfeldes dem übergeordneten Formular an.

Private Sub Form_Resize()
     If Me.InsideHeight - Me.Formularkopf.Height > 150 Then
         Me!txtInhalt.Height = _
Me.InsideHeight - Me.Formularkopf.Height - 150 End If Me!txtInhalt.Width = Me.Form.InsideWidth - 150 End Sub

Ist dieser größer als ein bestimmter Wert, der vom Abstand des Textfeldes von den Formularrändern abhängt, passt die Routine die Höhe des Textfeldes um eben die um den Rand reduzierte Höhe an.

Bei der Breite ist dies nicht nötig: Hier muss mit Ausnahme des Abstands kein weiterer Bereich links oder rechts vom Textfeld berücksichtigt werden, sodass die Textfeldbreite der um den Wert 150 verminderten Formularbreite entspricht.

Jedesmal, wenn der Benutzer die Größe des Formulars verändert, ruft er damit diese Routine auf und passt die Größe des Textfeldes damit automatisch an. Wenn Sie selbst ein ähnliches Formular erstellen, müssen Sie noch prüfen, wie groß die vorhandenen Abstände zwischen Textfeld und oberem und unterem Rand sowie linkem und rechtem Rand sind, und die Summen der jeweiligen Paare von Höhe und Breite subtrahieren. Die Abstände bekommen Sie am einfachsten heraus, indem Sie etwa in der Ereignisprozedur Beim öffnen folgende Zeilen einfügen (jeweils in einer Zeile):

Debug.Print "Seitlicher Rand: " 
& Me.InsideWidth - Me.txtInhalt.Width Debug.Print "Vertikaler Rand: "
& Me.InsideHeight - Me.Formularkopf.Height - Me!txtInhalt.Height

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar