News & Tipps zu Microsoft Access

Lesen Sie hier einige der besten Beiträge aus SmartTools Access Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Access.

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!