Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Nachschlagfelder aus allen Tabellen entfernen
zurück: Arcrobat Reader mit DDE-Klasse steuern weiter: Feldinhalt aufteilen, z.B. Straße+Hausnummer Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Nouba
nicht ganz unwissend :)


Verfasst am:
07. Okt 2006, 09:32
Rufname:
Wohnort: Berlin

Nachschlagfelder aus allen Tabellen entfernen - Nachschlagfelder aus allen Tabellen entfernen

Nach oben
       Version: Office 97

Hallo,

um Nachschlagfelder, die eine Datenbank unnötig aufblähen und die Ausführungszeit von Abfragen, Formularen, Berichten, etc. negativ beeinflussen zu eliminieren, könnt ihr folgende Funktion in einem allgemeinen Modul einsetzen.
{Links The Evils of Lookup Fields in Tables und
DBWiki: Access Anfänger: Die Nachteile von Nachschlagefeldern (siehe Zitat in letztem Beitrag) aus abgetrennten Beitraegen von jens05. Edit by Willi Wipp}


Die Funktion sollte ab Access 97 lauffähig sein und kann in ein globales Modul kopiert werden. Nach der erfolgreichen Anwendung, kann die Funktion wieder gelöscht werden, weil sie in der Datenbank selbst keine sinnvolle Aufgabe mehr erfüllen kann. Es sei denn, man will sie auf externe Datenbanken anwenden.
Code:
Option Explicit

'------------------------------------------------------------------------------
' Procedure   : RemoveLookupFields
' DateTime    : 07.10.2006 08:26
' Autor       : Norbert Bous
' Hintergrund : "The Access Web - The Evils of Lookup Fields in Tables"
'               http://www.mvps.org/access/lookupfields.htm
'
' Zweck       : Ändert in allen Nicht-Systemtabellen Nachschlagfelder in Text-
'               felder, um die Zugriffszeit zu beschleunigen.
' Argumente   : dbInstance:= initialisiertes DAO Datenbank Objekt (optional)
'               bei fehlendem Argument wird die aktuelle Datenbank CurrentDb()
'               verwendet
'
' Ein VBA-Verweis auf die Microsoft DAO 3.x Object Library ist notwendig
'
' Weil die Funktion nur 1x ihre Arbeit verrichten muß, sollte ein Aufruf im
' VBA-Direktbereich (Strg+G) in der Regel genügen.
'
' WICHTIG     : Unbedingt ein Backup der Datenbank bereit halten!!!
'
'------------------------------------------------------------------------------
'
Function RemoveLookupFields(Optional AccessDb As DAO.Database = Nothing) As Boolean
On Error GoTo Behandle_Fehler
  Dim tdf               As DAO.TableDef
  Dim fld               As DAO.Field
  Dim prpDelete         As Variant
  Dim prps()            As String
  'Auflistung der erweiterten DAO-Feldeigenschaften, die nach dem Ändern der
  'Nachschlagfelder gelöscht wird
  Const csFldPrps       As String = _
        "RowSourceType," _
      & "RowSource," _
      & "BoundColumn," _
      & "ColumnCount," _
      & "ColumnHeads," _
      & "ColumnWidths," _
      & "ListRows," _
      & "ListWidth," _
      & "LimitToList"
  'Eigenschaftsname, der die Auswahl des darzustellenden Steuerelements
  'festlegt
  Const csPropName      As String = "DisplayControl"

  'Datenfeld der zu löschenden erweiterten Feldeigenschaften initialisieren
  prps = Split(csFldPrps, ",")
  'Falls das Datenbank-Objekt uninitialisiert ist,
  'wird die aktuelle Datenbank verwendet
  If AccessDb Is Nothing Then
    Set AccessDb = CurrentDb()
  End If
  'Schleife über alle Tabellen der Datenbank
  For Each tdf In AccessDb.TableDefs
    'Systemtabellen und versteckte Tabellen ausschließen
    If tdf.Attributes = 0 Then
      'Schleife über alle Felder
      For Each fld In tdf.Fields
        'prüft, ob Feld ein Kombi- oder Listenfeld zur Darstellung verwendet
        If fld.Properties(csPropName) = acComboBox _
           Or fld.Properties(csPropName) = acListBox Then
          'Textfeld zur Darstellung einstellen
          fld.Properties(csPropName) = acTextBox
          'alle abhängigen Eigenschaften entfernen
          With fld.Properties
            'ignoriere fehlende Feldeigenschaften
            On Error Resume Next
            For Each prpDelete In prps
              .Delete prpDelete
            Next prpDelete
            'Fehlerbehandlung zurück setzen
            On Error GoTo Behandle_Fehler
          End With
        End If

Naechstes_Feld:
      Next fld
    End If
  Next tdf  'nächste Tabelle
  'Rückgabewert setzen
  RemoveLookupFields = True

Aufraeumen:
  On Error Resume Next
  Erase prps
  Exit Function

Behandle_Fehler:
  'die Feldeigenschaft existiert nicht
  If Err.Number = 3270 Then Resume Naechstes_Feld
  'ein unerwarteter Fehler trat auf
  MsgBox "Fehler " & Err.Number & ": " & Err.Description, _
         vbCritical, "RemoveLookupFields"
  Resume Aufraeumen
End Function

[edit]Nach einem Hinweis von Willi Wipp: Funktionsargument und falsche Verwendung von IsMissing korrigiert. (10.10.2006 14:31)[/edit]

_________________
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.


Zuletzt bearbeitet von Nouba am 10. Okt 2006, 14:31, insgesamt einmal bearbeitet
stpimi
Moderator Access


Verfasst am:
07. Okt 2006, 09:51
Rufname:
Wohnort: Graz

AW: Nachschlagfelder aus allen Tabellen entfernen - AW: Nachschlagfelder aus allen Tabellen entfernen

Nach oben
       Version: Office 97

Servus Norbert!

Danke für den Code - er wird sicher des öfteren hilfreich sein. Viel zu oft werden immer noch Nachschlagefelder als hilfreich präsentiert ohne deren Nachteile zu beachten.

Ergänzend: Natürlich müssen in den Formularen dann die aufgrund der Nachschlagefelder vom Assistenten erstellten Kominationsfelder entsprechend nachbearbeitet werden.

_________________
Lg, Michael

Dein Feedback hilft auch anderen - vergiß es nicht!
Willi Wipp
Moderator


Verfasst am:
12. Okt 2006, 12:12
Rufname:
Wohnort: Raum Wiesbaden


Re: Nachschlagfelder aus allen Tabellen entfernen - Re: Nachschlagfelder aus allen Tabellen entfernen

Nach oben
       Version: Office 97

Nachfragen zum Thema bitte hier Nachschlagfelder aus allen Tabellen entfernen {Nachgefragt} stellen.

Zitat:
Access Anfänger: Die Nachteile von Nachschlagefeldern

aus DBWiki, dem Datenbank-Entwickler-Wiki

Man sollte Nachschlagefelder in Tabellen vermeiden, denn
  1. Ein Nachschlagefeld verbirgt den eigentlichen Feldinhalt. Wenn man beispielsweise eine Tabelle in Datenblattansicht öffnet, wird ein Firmenname dargestellt, obwohl in Wirklichkeit im Feld die Kundennummer steht, und der Firmenname aus einer anderen Tabelle stammt. Nachschlagefelder verhindern, dass Datenbanken sauber durchstrukturiert angelegt werden.

  2. Eine Abfrage, die das Nachschlagefeld verwendet und nach dem dargestellten Wert sortieren soll, funktioniert nicht. So wird im obigen Beispiel nicht nach dem Firmennamen, sondern nach der Kundennummer sortiert. Ebensowenig funktioniert die Angabe des Werts als Kriterium - auch hier müsste man die Nummer anstelle des Namens verwenden, um Ergebnisse zu erhalten. Wenn man den Wert aus einer Wertliste eines Kombinationsfelds auswählt, kann es passieren, dass gültige Daten mit falschen Werten überschrieben werden.

  3. Das Nachschlagefeld beinhaltet eine (intern angelegte) Beziehung zwischen den Tabellen sowie die Anlage zusätzlicher Indizes, die in aller Regel überflüssig sind und die Datenbank unnütz aufblähen. Auch kann es vorkommen, dass man auf diese Weise die maximal zugelassene Anzahl von Indizes je Tabelle unwillentlich überschreitet.

  4. Ein Kombinationsfeld auf der Basis eines Nachschlagefelds kann bei Filterung des Formulars dazu führen, dass der Filter mit dem Formular gespeichert wird. Beim nächsten Öffnen des Formulars fehlt der Wert und wird nachgefragt, was wiederum zu einem Fehler führt.

  5. Berichte, deren Datenherkunft Nachschlagefelder enthält, benötigen Kombinationsfelder zu deren Darstellung, die den Bericht langsam und ineffizient machen können.

  6. Die Datenbank kann nicht vernünftig von außen abgefragt (beispielsweise in Form einer Datenquelle eines Word-Serienbriefs) oder exportiert werden, da die Nachschlagefelder nicht nach außen gereicht werden.

  7. Wenn man das Access-Sicherheitssystem verwendet, reichen die Berechtigungen oft nicht aus, um die Nachschlagefelder mit Inhalt zu füllen, was zu schwer nachzuvollziehbaren Fehlern führt. Das gilt insbesondere, wenn man aus Sicherheitsgründen mit Abfragen mit "WITH OWNERACCESS OPTION" arbeitet.
DBWIKI ist zur Zeit nicht mehr Online, daher als Zitat.
_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)



NachschlagFelder.png
 Beschreibung:
 Dateigröße:  7.29 KB
 Angeschaut:  7623 mal

NachschlagFelder.png


Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Datenabgleich gleicher Tabellen 5 Gast 1120 30. Jul 2004, 09:27
Willi Wipp Datenabgleich gleicher Tabellen
Keine neuen Beiträge Access Tabellen & Abfragen: 2 gleiche Tabellen in 2 verschiedenen DB verknüpfen 2 mondi 1015 23. Jun 2004, 10:10
mondi 2 gleiche Tabellen in 2 verschiedenen DB verknüpfen
Keine neuen Beiträge Access Tabellen & Abfragen: 2 tabellen verknüpfen und daten übergeben 5 mihca 2004 05. Jun 2004, 13:22
mihca 2 tabellen verknüpfen und daten übergeben
Keine neuen Beiträge Access Tabellen & Abfragen: 2 tabellen vergleichen 4 Lordoo88 1555 03. Jun 2004, 16:43
Lordoo88 2 tabellen vergleichen
Keine neuen Beiträge Access Tabellen & Abfragen: Import von Textdateien / automatisches Entfernen von Zeichen 1 Ost 660 02. Jun 2004, 11:24
lothi Import von Textdateien / automatisches Entfernen von Zeichen
Keine neuen Beiträge Access Tabellen & Abfragen: Frontend und Backend: kann nicht auf die Tabellen zugreifen 1 mhw 803 25. Mai 2004, 12:25
Robsl Frontend und Backend: kann nicht auf die Tabellen zugreifen
Keine neuen Beiträge Access Tabellen & Abfragen: Zwei Tabellen zusammenfügen und Nullwerte überschreiben 1 m.hataj 1304 13. Mai 2004, 18:10
faßnacht(IT); Zwei Tabellen zusammenfügen und Nullwerte überschreiben
Keine neuen Beiträge Access Tabellen & Abfragen: kriterium - datensatz nur in einer von zwei tabellen 3 budking82 1000 11. Mai 2004, 12:59
budking82 kriterium - datensatz nur in einer von zwei tabellen
Keine neuen Beiträge Access Tabellen & Abfragen: Duplikate in Abfrage nur aus einem Feld entfernen? 18 jobacke 1829 06. Mai 2004, 11:57
jobacke Duplikate in Abfrage nur aus einem Feld entfernen?
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage erstelen, die zwei tabellen vergleicht 2 pucky 802 27. Apr 2004, 10:53
ProLogistik Abfrage erstelen, die zwei tabellen vergleicht
Keine neuen Beiträge Access Tabellen & Abfragen: Abgleich von 2 tabellen in access 2003 4 Fierce 1719 16. Apr 2004, 08:27
el_gomero Abgleich von 2 tabellen in access 2003
Keine neuen Beiträge Access Tabellen & Abfragen: datensatz aus mehreren Tabellen im formular anzeigen 1 SixPack 1197 29. März 2004, 10:53
Willi Wipp datensatz aus mehreren Tabellen im formular anzeigen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Macromedia Dreamweaver