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-Key: 183955

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

Printed on: April 26, 2024 at 17:04 o'clock

Member: mak-xxl
mak-xxl Apr 24, 2012 at 06:18:59 (UTC)
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
Member: AMStyles
AMStyles Apr 24, 2012 at 06:55:48 (UTC)
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
Member: mak-xxl
mak-xxl Apr 24, 2012 at 07:12:43 (UTC)
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
Member: Biber
Biber Apr 24, 2012 at 07:29:41 (UTC)
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
Member: AMStyles
AMStyles Apr 24, 2012 at 09:29:09 (UTC)
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
Member: Biber
Biber Apr 25, 2012 at 08:32:54 (UTC)
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