amstyles
Goto Top

Feldgröße Abfrage Access

Guten Tag,

ich möchte via SQL eine Abfrage erstellen, die mir die Feld Länge einer Spalte zurückgibt.
Auf einem SQL Server funktioniert das so

SELECT CHARACTER_MAXIMUM_LENGTH FROM information_schema.columns where TABLE_NAME = 'TabellenName' AND COLUMN_NAME ='SpaltenName'  

Wie kann ich dasselbe Ergebnis bei einer Access Datei erziehen?

Grüße,
AMStyles

Content-ID: 183955

Url: https://administrator.de/contentid/183955

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

mak-xxl
mak-xxl 24.04.2012 um 08:18:59 Uhr
Goto Top
Moin AMStyles,

ich postuliere mal, dass Du den Zugriff per internem Access-VBA meinst, wenn, dann innerhalb eines Recordsets mit:

...
retVal = Len(strField)
...

In Zeiten von UTF8/16 ist es aber besser, die Bytegröße eines Feldes abzufragen:

...
Set db = DBEngine(0)(0)
Set td = db.TableDefs(strTable)
Set fd = td.Fields(strField)
retVal = fd.FieldSize [.Size]
...

Falls es von außerhalb auf eine Access-DB sein soll (i.e. per VB):

...
Set DB = DBEngine.OpenDataBase(strDBName), False, False)
retVal = DB.TableDefs(strTable).Fields(strField).Size
...

Freundliche Grüße von der Insel - Mario
AMStyles
AMStyles 24.04.2012 um 08:55:48 Uhr
Goto Top
Hallo mak-xxl ,

vielen Dank für deine Antwort.
Ich habe leider nur über SQL Zugriff auf diese Datei, so interne Sachen wie VBA o. ä. sind leider nicht möglich.

Grüße,
AMStyles
mak-xxl
mak-xxl 24.04.2012 um 09:12:43 Uhr
Goto Top
Moin AMStyles,

Zitat von @AMStyles:
... Ich habe leider nur über SQL Zugriff auf diese Datei ...

Und Code dazu hast Du doch bereits notiert ...

Da ich aber oben schon raten musste - was möchtest Du eigentlich wissen?

Wie man extern auf eine Access-DB zugreift (ohne SQL, aber mit VB), ist oben skizziert - und gibt die Länge eines Feldes zurück. Das Ganze geht auch aus Office-VBA heraus etc. pp. Und nur(?) SQL - irgendwas anderes geht immer ...

PS: Falls noch ein anderes SQL-Statement als Anregung dienen soll:
SELECT Max(Len(strFieldName)) FROM strTableName

Freundliche Grüße von der Insel - Mario
Biber
Biber 24.04.2012 um 09:29:41 Uhr
Goto Top
Moin AMStyles,

ergänzend zu mak-xxls SELECT-Ansatz noch der Hinweis auf die (evtl abweichende) Byte-Länge
SELECT Max(Len([deinFeldName)) AS Maxlen, Max(LenB([deinFeldName])) as MaxLenB
FROM [deineTabelle];

Wobei ich nicht abschätzen kann, ob du die "Feldlänge" eher zum Grid-auf-den-Schirm-malen brauchst oder für eine Import/Exportschnittstelle.

Zum Malen reicht natürlich der Stringlängenwert der Len()-Funktion.

Grüße
Biber
AMStyles
AMStyles 24.04.2012 um 11:29:09 Uhr
Goto Top
Hi Bibel,

man kann unter Access beispielsweise bei einem Text die Feldgröße angeben.
Diese möchte ich via SQL Skript auslesen.

Also ich möchte NICHT wissen dass der Inhalt des Datenfelds eine Textlänge von x Zeichen hat, sondern die allgemeine Feldgröße der Spalte.

Grüße,
AMStyles
Biber
Biber 25.04.2012 um 10:32:54 Uhr
Goto Top
Moin AMStyles,

deinen Wunsch haben mak-xxl und ich schon verstanden.
Wir wollten es dir nur schonend beibringen.

Also, mal ganz ungeschminkt:

MS-Access hat und hatte in keiner Version Metadaten/Katologdaten, die
a) als Bonus-Giveaway für den zahlenden Kunden mit ausgeliefert wurden
b) via SQL abgefragt werden können. Wozu auch? SQL verwenden eigentlich nur Datenbanken...
c) und dokumentiert sind die MSysObject-Tabellen von den PraktikantInnen selbst schon gar nicht.

Speziell eine Tabelle, die vom Sinn her einer information_schema.columns oder einer sys.user_tab_columns oder einer syscat.syscolumns-Tabelle bei richtigen Datenbanken entspricht, gibt es bei MSAccess nicht.

Daher: keine Abfrage der Feldlänge eines String-Feldes per Jet-SQL oder ACE möglich.

Grüße
Biber