Beitrag aus SmartTools Access Weekly
Länge für Textfelder richtig einstellen
Access 365 2021 2019 2016 2013 2010
FRAGE Ich muss oft sehr unterschiedliche Daten in Access-Datenbanken importieren. Dabei wird die Länge des definierten Feldes des Datentyps "Text" eher zu groß als zu klein gewählt (damit beim Import keine Daten verloren gehen). Um Speicherplatz zu sparen und die Verarbeitungsgeschwindigkeit zu vergrößern, würde ich nun gerne nach erfolgtem Download die Textfeldgröße in den einzelnen Tabellen an die Länge des längsten darin gespeicherten Inhaltes anpassen. Da es sich um zahlreiche Tabellen mit jeweils vielen Textfeldern handelt, wäre ein Tool, das diese automatisch für alle Tabellen einer Datenbank übernimmt, sehr hilfreich.
In die gleiche Richtung zielt die zweite Frage. Besteht die Möglichkeit, für alle Textfelder aller Tabellen einer Datenbank die Unicode-Kompression pauschal auf "Ja" zu setzen?
S. Schweers
ANTWORT Bezüglich der Längen von Textfeldern besteht kein Grund für Änderungen: Die Einstellung "Feldlänge" ist eher als Längenbegrenzung zu betrachten, mehr als die hier eingestellte Anzahl Zeichen speichert Access nicht. Für die Speicherung der Zeichen verwendet Access nur den tatsächlich benötigten Platz. Wenn also für ein Textfeld die Länge "200" eingestellt ist und es den Inhalt "Test" hat, werden auch nur 4 Zeichen und keine 200 gespeichert. Man kann sich somit die Mühe sparen, die Länge der Felder anzupassen. Für die globale Änderung der Feldeigenschaft "Unicode-Kompression" auf "Ja" nutzen Sie folgende Prozedur:
Sub UnicodeCompressionON()
Dim db As DAO.Database
Dim td As DAO.TableDef
Dim fld As DAO.Field, p As DAO.Property
On Error Resume Next
Set db = CurrentDb
For Each td In db.TableDefs
For Each fld In td.Fields
Err = 0
Set p = fld.Properties("UnicodeCompression")
If Err = 0 Then 'Vorhanden
p.Value = True
ElseIf fld.Type = dbText Or fld.Type = dbMemo Then
Set p = db.CreateProperty("UnicodeCompression", _
dbBoolean, True)
fld.Properties.Append p
End If
Next fld
td.Fields.Refresh
Next td
Set db = Nothing
End Sub
Die Routine durchläuft alle Tabellendefinitionen und pro Definition alle Felder und prüft, ob eine Eigenschaft "UnicodeCompression" vorhanden ist. Ist das der Fall, wird deren Wert auf "True" eingestellt, andernfalls wird sie mit dem Wert "True" für Text- und Memofelder angelegt. Ein "Refresh" hält Änderungen ggf. dauerhaft fest.
Achtung! Sie müssen die Datenbank anschließend komprimieren! Erst dann werden die Änderungen wirksam. Die Änderung der Feldeigenschaft führt noch keine Unicode-Komprimierung durch!