Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Tabellenfelder auflisten
zurück: Abfragen mehrere Werte weiter: Tabellendaten per SQL für Kreuztabelle zusammenfassen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Offen Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Access-Bastler
Access Anfänger


Verfasst am:
17. Okt 2008, 13:59
Rufname:
Wohnort: Rüsselsheim

Tabellenfelder auflisten - Tabellenfelder auflisten

Nach oben
       Version: Office 2k (2000)

Hallo Community,
ich habe eine kleine Frage.
Beim SQL-Server kann ich mittels
Code:
SELECT   *
FROM     INFORMATION_SCHEMA.Columns
ORDER BY TABLE_NAME
die Felder aller Tabellen auflisten.

Wie ich schon erfahren habe, funktioniert das unter Access nur mit einem Schema. Und doch bräuchte ich eine Abfrage, wie oben genannt, die mir alle Tabellenfelder auflistet.
Ist dies möglich? Wenn nicht, kann man das vielleicht als Pseudo-Abfrage laufen lassen? Also VBA Code ausführen, das Ergebnis aber wie bei einer Abfrage ausgeben.

_________________
Gruß

Access-Bastler
JörgG
Access-Team


Verfasst am:
18. Okt 2008, 10:25
Rufname:
Wohnort: b. Dresden


AW: Tabellenfelder auflisten - AW: Tabellenfelder auflisten

Nach oben
       Version: Office 2k (2000)

Hallo,

ja, das ist was für Access-Bastler Very Happy. Du kannst ja eine Funktion drüberjagen die die Felder in eine Hilfstabelle schreibt. Datenbankfenster - Module - evtl Neu:
Code:
Public Function FktAllFields()
'Menüleiste - Extras - Verweise: "Microsoft DAO 3.6 Object Library" aktivieren
    Dim Db As DAO.Database, RstMSys As DAO.Recordset, RstTab As DAO.Recordset
    Dim Tdf As DAO.TableDef, Fld As DAO.Field
   
    Set Db = CurrentDb
    If Nz(DLookup("[Name]", "MSysObjects", _
                  "[Name]='TabAllFields'"), "") <> "" Then
        'TabAllFields entleeren
        Db.Execute "DELETE * FROM TabAllFields;", dbFailOnError
      Else
        'wenn nicht vorhanden TabAllFields erstellen
        Db.Execute _
            "CREATE TABLE TabAllFields " & _
                "(FldID COUNTER CONSTRAINT ID PRIMARY KEY, " & _
                 "Tabname VARCHAR(255), Feldname VARCHAR(255), " & _
                 "Datentyp INTEGER, Datentyptext VARCHAR(255))", dbFailOnError
    End If
    'MSysObjects-"Tabellen"-Abfrage öffnen
    Set RstMSys = Db.OpenRecordset("SELECT Name " & _
                                     "FROM MSysObjects " & _
                                    "WHERE Name Not Like '*Tmp*' " & _
                                      "AND Name Not Like '*MSys*' " & _
                                      "AND (Type=1 OR Type=6) " & _
                                 "ORDER BY Name;", dbOpenSnapshot)
    'TabAllFields öffnen
    Set RstTab = Db.OpenRecordset("TabAllFields", dbOpenDynaset)
    'MSysObjects-Abfrage durchlaufen
    Do While Not RstMSys.EOF
        'Tabellen Feldname/-typ auslesen und in TabAllFields speichern
        Set Tdf = Db.TableDefs(RstMSys!Name)
        For Each Fld In Tdf.Fields
            RstTab.AddNew
            RstTab!Tabname = RstMSys!Name
            RstTab!Feldname = Fld.Name
            RstTab!Datentyp = Fld.Type
            'Klartext von Fld.Type
            Select Case Fld.Type
              Case 1:         RstTab!Datentyptext = "Boolean (1)"
              Case 3, 4:      RstTab!Datentyptext = "Integer (3), Long (4)"
              Case 5:         RstTab!Datentyptext = "Currency (5)"
              Case 6, 7, 20:  RstTab!Datentyptext = "Single (6), Double (7), Dezimal (20)"
              Case 10, 12:    RstTab!Datentyptext = "Text (10), Memo (12)"
              Case 8, 22:     RstTab!Datentyptext = "Datum (8), Zeit (22)"
              'siehe Hilfe zu "Type", dbKonstante entspricht Zahlenwert
              Case Else:      RstTab!Datentyptext = "Andere"
            End Select
            RstTab.Update
        Next Fld
        RstMSys.MoveNext
    Loop
    'Objektvariablen freigeben
    RstMSys.Close:    Set RstMSys = Nothing
    RstTab.Close:     Set RstTab = Nothing
    Set Db = Nothing: Set Tdf = Nothing
End Function
Aufruf, zB Formular "beim Öffnen":
Code:
Private Sub Form_Open(Cancel As Integer)
    Call FktAllFields
End Sub
Idea Die Funktion erstellt die Tabelle automatisch, sie enthält zusätzlich den Tabellennamen und den Datentyp des Feldes, ich denke mal diese Zusatzinfos wirst Du für die Weiterverarbeitung brauchen Wink.
Datentyptext ist ja ein berechneter Wert der normalerweise nicht gespeichert wird ... die Freiheit sei an dieser Stelle erlaubt Very Happy

_________________
MfG, Jörg Very Happy

Bitte das Feedback nicht vergessen.
Access-Bastler
Access Anfänger


Verfasst am:
20. Okt 2008, 09:12
Rufname:
Wohnort: Rüsselsheim

AW: Tabellenfelder auflisten - AW: Tabellenfelder auflisten

Nach oben
       Version: Office 2k (2000)

Das war genau das, was ich gesucht habe.
Danke für die schnelle und sehr gute Hilfe.

Jetzt bleibt nur noch eines offen. Wie bekomme ich die größe der einzelnen Felder heraus. Manche größen stehen in der Hilfe, andere variabel lange Typen muss ich aber irgendwie noch abfragen. Wie macht man das am besten, oder steht die Größe in MSysObjects?

_________________
Gruß

Access-Bastler
Willi Wipp
Moderator


Verfasst am:
20. Okt 2008, 10:14
Rufname:
Wohnort: Raum Wiesbaden

Re: Tabellenfelder auflisten - Re: Tabellenfelder auflisten

Nach oben
       Version: Office 2k (2000)

Hi Access-Bastler,

die Auflistung Properties der Auflistung Fields der Auflistung TableDefs enthaelt diese Informationen Wink

_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
Access-Bastler
Access Anfänger


Verfasst am:
20. Okt 2008, 10:53
Rufname:
Wohnort: Rüsselsheim


AW: Tabellenfelder auflisten - AW: Tabellenfelder auflisten

Nach oben
       Version: Office 2k (2000)

Danke für den Hinweis.
Das ganze etwas einfacher formuliert: Die Feldgröße liegt in Fld.Size wenn man obigen Code verwendet. Very Happy

EDIT:
Tut mir leid, dass ich den Thread wieder als offen markiere. Aber ein Problem ist da noch:
Und zwar musste ich die Datentypen und die Größe der Felder in der Access-Variante bestimmen. Allerdings gibt es auch eine Variante, die den MSSQL Server verwendet.
Mein Problem hier ist nun folgendes:
Über INFORMATION_SCHEMA.COLUMNS bekomme ich den Feldnamen und den Datentyp. Hier wird auch ein Feld gespeichert mit dem Namen "CHARACTER_MAXIMUM_LENGTH". Hier ist nur dann ein Wert ungleich NULL gespeichert, wenn es sich um einen variabel großen Datentyp handelt, wie z.B. Text oder varchar.
Nun zur Frage: Kennt ihr einen Weg, wie ich die Größe der Felder bestimmen kann? Wenn möglich ohne Lookup Tabelle, diese Möglichkeit habe ich schon in betracht gezogen, ist aber aufgrund der Vielzahl der Typen zu groß und nicht sehr schön gelöst.

_________________
Gruß

Access-Bastler
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 Programmierung / VBA: Alle gesperrten Datensätze auflisten 11 AnnaM86 211 02. Okt 2013, 15:31
MissPh! Alle gesperrten Datensätze auflisten
Keine neuen Beiträge Access Tabellen & Abfragen: x Jahre auflisten... 2 obismarck 204 04. Aug 2011, 12:47
obismarck x Jahre auflisten...
Keine neuen Beiträge Access Tabellen & Abfragen: Datensätze zusammenzählen und Auflisten 1 Gast 207 08. Apr 2011, 02:42
Fritzerich Datensätze zusammenzählen und Auflisten
Keine neuen Beiträge Access Programmierung / VBA: Alle Formulare in einer Listbox auflisten ? 8 kaineanung 913 25. Jan 2011, 13:57
kaineanung Alle Formulare in einer Listbox auflisten ?
Keine neuen Beiträge Access Tabellen & Abfragen: Zählen in mehreren Tabellen und nach Monaten auflisten 5 Ogni 185 12. Nov 2010, 12:45
KlausMz Zählen in mehreren Tabellen und nach Monaten auflisten
Keine neuen Beiträge Access Programmierung / VBA: Ordnernamen auflisten 3 Domainhunter 700 24. Jun 2010, 15:49
Nouba Ordnernamen auflisten
Keine neuen Beiträge Access Tabellen & Abfragen: Berechnete Felder aus Werten anderer Tabellenfelder etc. 2 0622trapper 2398 23. Jan 2010, 22:46
hyba Berechnete Felder aus Werten anderer Tabellenfelder etc.
Keine neuen Beiträge Access Formulare: Tabellenfelder miteinander verknüpfen. 4 stivi31 806 19. Okt 2009, 19:51
stivi31 Tabellenfelder miteinander verknüpfen.
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage erstellen und Eigenschaften von Werten auflisten 2 selltheelm 500 30. Jul 2009, 11:56
selltheelm Abfrage erstellen und Eigenschaften von Werten auflisten
Keine neuen Beiträge Access Tabellen & Abfragen: ICQ- Schriftverkehr auflisten 0 Trudi 301 29. März 2009, 13:29
Trudi ICQ- Schriftverkehr auflisten
Keine neuen Beiträge Access Programmierung / VBA: Leere Tabellenfelder radikal füllen 8 MarkusHaydn 493 20. März 2009, 09:50
MarkusHaydn Leere Tabellenfelder radikal füllen
Keine neuen Beiträge Access Tabellen & Abfragen: Access Tabellenfelder automatisch ausfüllen? 12 Hirte 8121 11. Dez 2008, 15:44
Marmeladenglas Access Tabellenfelder automatisch ausfüllen?
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft-Excel Diagramme