Home > Artikel > Ausgabe 5/2016 > Textboxen im Detail

Textboxen im Detail

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Das zweifelsohne prominenteste Steuerelement in Datenbanken ist, vom Label vielleicht abgesehen, das Textfeld. Fast alle Ein- und Ausgaben geschehen über datengebundene Textboxen. Der Umgang mit ihnen scheint trivial zu sein, und in der Regel ist das auch der Fall, aber hin und wieder ist genaueres Hinsehen erforderlich. Schauen wir uns einmal die spezielleren Situationen an.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1605_Textboxen.accdb

Feldentwürfe für Text in Tabellen

Die möglichen Formen von Textfeldern demonstriert die Tabelle tblTexte in Bild 1 in gleich drei Variationen. Üblicherweise nimmt der Feldtyp Text String-Daten auf. Die von Access eingestellten Vorgaben für die Eigenschaften des Felds beim Anlegen lassen sich in der Regel unverändert übernehmen.

Entwurfsansicht der Tabelle tblTexte mit markierten Rich-Text-Memofeld

Bild 1: Entwurfsansicht der Tabelle tblTexte mit markierten Rich-Text-Memofeld

Sie können sie eventuell um Gültigkeitsregeln oder Standardwerte erweitern. Die Länge des Felds ist auf 255 Zeichen voreingestellt. Diesen Wert brauchen Sie nicht zu verändern. Größer geht nicht, und kleiner ist überflüssig, da dies in der Datenbank keinerlei Platz einspart. Soll die Länge begrenzt sein, wie etwa bei Postleitzahlen auf 5, so erledigen Sie dies besser über eine zusätzliche Gültigkeitsregel.

TextKurz ist also ein normales Textfeld. Soll die Kapazität des Felds größer sein, als 255 Zeichen, so nehmen Sie ein Memofeld (TextLang). Es ist in der Lage, bis circa 1 Milliarde Zeichen zu speichern. Das ist gleichzeitig die maximale Größe einer Access-Datenbank in Bytes. Denn grundsätzlich werden alle Textzeichen als Unicode in der Tabelle gespeichert. Somit belegt ein Zeichen zwei Bytes. Allerdings verringert sich das durch die Unicode-Kompression im Schnitt wieder, jedoch nie um den Faktor zwei.

Seit Access 2007 kann direkt im Tabellenentwurf für ein Memofeld zusätzlich die Eigenschaft Textformat gesetzt werden (siehe TextRich). Neben dem normalen Format steht nun auch das Rich-Text-Format zur Verfügung. Intern ändert das nichts am Memofeld und dem Speichermodus, Access weiß dann aber, wie es den Text zu interpretieren hat. So ein Feld gestattet dann schon in der Datenblattansicht der Tabelle die Formatierung des Texts über einen aufpoppenden Toolbar (Bild 2). Dieser taucht nicht auf, wenn die Eigenschaft Rich-Text deaktiviert ist.

Formatierungs-Toolbar für Rich-Text

Bild 2: Formatierungs-Toolbar für Rich-Text

Access speichert neben den eigentlichen Textdaten dann auch HTML-Tags zur Formatierung, die Sie aber nicht zu Gesicht bekommen. Das funktioniert auch dann nicht, wenn Sie später das Rich-Text-Format deaktivieren. Access entfernt bei diesem Vorgang nämlich sämtliche HTML-Tags.

Die Tabelle tblText wurde mit zwei Datensätzen gefüllt, wobei ein Lore-Ipsum-Generator im Internet zu Anwendung kam (Bild 3). In den Kurztext sind nur wenige Zeichen kopiert, während TextLang und TextRich mit dem identischen Text von etwa 60.000 Zeichen versehen wurden. Für den dritten Datensatz wurde der erste zunächst kopiert. TextLang und TextRich sollten dann durch Copy&Paste in der Länge verdoppelt werden. Das schlägt indes fehl!

Die Tabelle tblTexte enthält drei Datensätze, wobei die Inhalte des letzten durch die Abfrage qry_NewRecord zustandekam

Bild 3: Die Tabelle tblTexte enthält drei Datensätze, wobei die Inhalte des letzten durch die Abfrage qry_NewRecord zustandekam

Denn für die Datenblattansicht kommt intern ebenfalls eine Textbox zum Einsatz, und diese erlaubt nur Bearbeitungen bis etwa 65.000 Zeichen! Andernfalls erscheint die Meldung Text ist zu lang, um bearbeitet werden zu können.

Wie aber bekommt man dann mehr Zeichen in das Tabellenfeld?

Die eine Möglichkeit ist der Import aus einer Textdatei.

Die andere ist das Füllen des Textfelds über VBA und ein Recordset. Das ist sicher die umständlichste Variante.

Eine Lösung ist jedoch ebenfalls das Anlegen oder Modifizieren von Datensätzen über Anfüge- oder Änderungsabfragen. So geschehen in der Abfrage qry_NewRecord aus Bild 4. Die Anfügeabfrage nimmt den Ausgangsdatensatz mit der ID 2 und fügt diesen an die Tabelle tblTexte selbst wieder an, dupliziert ihn also. Dabei werden die Inhalte von TextLang und TextRich aber verdoppelt:

Anfügeabfrage qry_NewRecord zum Duplizieren eines Datensatzes innerhalb der gleichen Tabelle mit Vergrößern zweier Textfelder

Bild 4: Anfügeabfrage qry_NewRecord zum Duplizieren eines Datensatzes innerhalb der gleichen Tabelle mit Vergrößern zweier Textfelder

[TextLang neu]=[TextLang] & [TextLang]

So kam der Datensatz mit der ID 7 in Bild 2 zustande. Versuchen Sie in der Datenblattansicht nun, den Inhalt der Memofelder dieses Datensatzes zu ändern, sei es durch Einfügen oder Löschen von Zeichen, so funktioniert das abermals nicht. Hier tritt noch nicht einmal eine Meldung auf. Der Datensatz verhält sich so, als sei er gesperrt!

Um es kurz zu machen: Sie werden eine Access-Textbox, ob in der Datenblattansicht oder im Formular, durch keinerlei Tricks dazu bewegen können, Texte länger als 65.000 Zeichen zu bearbeiten. Ist das gewünscht, so kommen Sie um den Einsatz einer alternativen Textbox, etwa dem ActiveX-Steuerelement MSForms-Textbox, die solche Beschränkungen nicht aufweist, nicht vorbei.

Textboxen im Formular

Ziehen Sie die Datenfelder der Tabelle tblTexte im Entwurf eines Formulars in den Detailbereich (Funktion Vorhandene Felder hinzufügen), so stellt Access auch gleich die passenden Eigenschaften für die nun angelegten Textfelder ein. Für die beiden Memofelder steht die Eigenschaft Bildlaufleisten auf Vertikal, während dies bei der Kurz-Textbox fehlt.

Außerdem steht das Eingabetastenverhalten (Reiter Andere im Eigenschaftenblatt) auf Neue Zeile im Feld. Das gewährleistet, dass beim Drücken der Enter-Taste nicht zum nächsten Steuerelement gesprungen wird, sondern ein Zeilenumbruch erfolgt. Schließlich ist bei der Rich-Text-Textbox noch die Eigenschaft Textformat – eigenartigerweise unter dem Reiter Daten – auf Rich-Text gestellt.

Im Formular frmText (Bild 5) wurde die Sache entsprechend umgesetzt. Sobald Sie den Cursor in eine der Memofelder setzen, erscheint der vertikale Scroll-Balken. Eine Eigentümlichkeit der normalen Access-Textbox war immer gewesen, dass das Ziehen am Scroll-Element den Text nicht unmittelbar verschiebt, sondern erst nach dem Loslassen desselben. Damit geht die visuelle Kontrolle verloren.

Auf tblTexte basierendes Anzeigeformular mit Memo- und Rich-Text-Textbox

Bild 5: Auf tblTexte basierendes Anzeigeformular mit Memo- und Rich-Text-Textbox

Interessanterweise ist dieser Effekt bei der Textbox mit Rich-Text-Format verschwunden! Hier klappt das Scrollen wunschgemäß.

Nun könnten Sie auf die Idee kommen, für die Textbox des normalen Memofelds ebenfalls den Rich-Text-Modus zu aktivieren, um sie besser scroll-bar zu machen. Das klappt auch, wenn man von der dabei auftretenden Warnmeldung einmal absieht. Der Toolbar zu Formatierung (Bild 2) taucht nun leider auch auf und kann mit keinen Mitteln abgeschaltet werden. Sie können ihn tatsächlich auch benutzen. Allerdings zeigt nun die Datenblattansicht der zugrundeliegenden Tabelle, was dann passiert: Der Memo-Inhalt füllt sich mit HTML-Tags, die auch editierbar sind! Das kann den Text natürlich durcheinanderbringen. Fazit: Verwenden Sie dieses Vorgehen nur bei Textboxen, die schreibgeschützt sind, indem Sie ihre Eigenschaft Daten | Gesperrt auf Ja setzen.

Neben den Textboxen finden Sie im Formular rechts jeweils ein Label, welches die Länge des Textes in Bytes wiedergibt. Diese Label-Beschriftungen werden im Ereignis Beim Anzeigen per VBA und die LenB-Funktion neu belegt:

Me!LblBytes1.Caption = _

     LenB(Me!TextKurz.Value)

Me!LblBytes2.Caption = _

LenB(Me!TextLang.Value)

Es ist gut zu erkennen, dass die Byte-Länge die zweifache Textlänge beträgt, beim Rich-Text-Feld aber noch etliche Bytes zusätzlich für die internen HTML-Tags benötigt werden.

Text-Cursor bewegen

Die zwei Schaltflächen Animieren im Formular demonstrieren, wie der Cursor in den Textboxen auch über VBA-Anweisungen gesteuert werden kann. Hier wird über die Click-Prozedur der Zeitgeber (Timer ) des Formulars aktiviert. Alle 50 Millisekunden verschiebt die Routine den Cursor um 200 Zeichen weiter, was den Text im Steuerelement kontinuierlich scrollt. Listing 1 zeigt, wie das umgesetzt ist.

Private b1 As Boolean, b2 As Boolean

Private Sub cmdAnimate1_Click()

     b1 = Not b1

     Me.TimerInterval = 50

End Sub

Private Sub cmdAnimate2_Click()

     b2 = Not b2

     Me.TimerInterval = 50

End Sub

Private Sub Form_Timer()

     If b1 Then

         Me!txtLang.SetFocus

         Me!txtLang.SelStart = Me!txtLang.SelStart + 200

     End If

     If b2 Then

         Me!txtRich.SetFocus

         Me!txtRich.SelStart = Me!txtRich.SelStart + 200

     End If

End Sub

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!