|
Nachschlagfelder aus allen Tabellen entfernen
|
| Autor |
Nachricht |
Nouba
nicht ganz unwissend :)
Verfasst am: 07. Okt 2006, 09:32 Rufname:
Wohnort: Berlin
|
|
| 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 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
|
|
| 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
|
| |
| Version: Office 97 |
|
Nachfragen zum Thema bitte hier Nachschlagfelder aus allen Tabellen entfernen {Nachgefragt} stellen.
_________________ Eine kurze Rueckmeldung waere nett
SL Willi Wipp
(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
| Beschreibung: |
|
| Dateigröße: |
7.29 KB |
| Angeschaut: |
2979 mal |

|
|
|
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 |
 |
Wichtig: Access Programmierung / VBA: Warum Feedback fürs Forum wichtig ist und uns allen hilft. |
19 |
Willi Wipp |
4768 |
29. Aug 2010, 12:52 muththomas  |
 |
Access Formulare: Alle Bezeichnungsfelder in allen Fuß- und Kopfbereichen |
4 |
Confused :? |
101 |
15. Dez 2009, 09:50 Confused :?  |
 |
Access Tabellen & Abfragen: Alle Tabellen(Backend) von zwei Datenbanken vergleichen |
9 |
rambodieschen |
1729 |
05. Okt 2009, 01:58 MissPh!  |
 |
Access Formulare: neue Tabellen sukzessive in aktuelle DB integrieren |
1 |
Access-Jens |
102 |
28. Sep 2009, 22:51 ebs17  |
 |
Access Tabellen & Abfragen: 2 Tabellen vergleichen und aktualisieren |
2 |
Gast |
99 |
16. Sep 2009, 08:33 Gast  |
 |
Access Tabellen & Abfragen: Doppelte Datensätze entfernen |
6 |
Conrad |
406 |
11. Mai 2009, 12:57 Conrad  |
 |
Access Tabellen & Abfragen: eine Abfrage aus mehreren tabellen |
9 |
Nogger |
203 |
23. Jul 2008, 15:43 Willi Wipp  |
 |
Access Programmierung / VBA: Tabellen ohne PK über ODBC einbinden - Meldung unterdrücken |
4 |
Lars |
1417 |
19. März 2008, 17:18 Lars  |
 |
Access Tabellen & Abfragen: SQL, Probleme bei Abgleich 2er Tabellen und JOINs |
4 |
ShreksEsel |
708 |
28. Feb 2007, 23:11 Willi Wipp  |
 |
Access Tabellen & Abfragen: Kreuzabfrage über 4 Tabellen |
22 |
jabath |
2642 |
18. Dez 2006, 10:42 jabath  |
 |
Access Hilfe: access 2 tabellen vergleichen und ersetzten |
1 |
Gast |
609 |
31. Aug 2006, 14:14 Gast  |
 |
Access Formulare: Unterschiedliche Tabellen in einem Registersteuerelement |
3 |
joopi |
404 |
05. März 2006, 14:46 joopi  |
| |
|