Warum BigInt jetzt wichtig ist
Access war lange begrenzt auf Long
= 32 Bit = ±2.147.483.647
Für IDs, Hashes, Unix-Timestamps oder externe Systeme oft zu klein.
Seit Access 2016 (mit Update) gibt’s BigInt
= 64 Bit = ±9.223.372.036.854.775.807
Das ist ein echter Fortschritt.
Wenn Du mit SQL Server, MySQL, REST oder ERP-Daten arbeitest: unverzichtbar.
Wie Du BigInt aktivierst
Standardmäßig ist BigInt in Access nicht aktiviert.
Du musst es manuell anschalten.
Schritt 1: Registry-Schalter setzen
[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ACE]
"EnableBigInt"=dword:00000001
Danach Access neu starten.
Alternativ per VBA (nur einmal nötig):
Sub AktiviereBigInt()
CreateObject("WScript.Shell").RegWrite _
"HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ACE\EnableBigInt", 1, "REG_DWORD"
End Sub
JetSQL und BigInt
In Tabellen wird BigInt
als Zahl (Groß) angezeigt.
Im SQL-Editor kannst Du normal darauf zugreifen.
Beispiel:
SELECT id64bit, beschreibung FROM t_grosse_ids WHERE id64bit > 5000000000;
Abfragen, Sortierungen, Joins – alles wie gewohnt. Nur eben größer.
Datenimport mit BigInt
Wenn Du aus externen Systemen importierst (ODBC), erkennt Access BigInt
korrekt – aber nur, wenn der Registry-Schalter gesetzt ist.
Sub VerbindeMitMySQL()
Dim db As DAO.Database
Set db = CurrentDb
db.Execute "DROP TABLE IF EXISTS t_ext_produkt"
db.Execute "SELECT * INTO t_ext_produkt FROM [ODBC;DSN=MySQL;UID=readonly;PWD=geheim;].produkt"
End Sub
Spalte produkt_id bigint
in MySQL wird als BigInt
in Access erkannt.
BigInt in VBA
VBA hat keinen nativen BigInt-Datentyp.
Aber:
- Du kannst
Currency
nutzen (64 Bit, Integer-Speicherung, ±922 B) - Oder Du nutzt
Decimal
via Variant (mit Risiko)
Beispiel mit Currency
Dim id64 As Currency
id64 = 123456789012#
Debug.Print Format$(id64, "0")
Beispiel mit Variant-Decimal
Dim v As Variant
v = CDec(9223372036854775807#)
Debug.Print v
Aber: Keine Typensicherheit, kein Vergleich mit Longs ohne Casting.
Wenn Du BigInt in Formeln brauchst
Dim erg As Currency
erg = CLng(Me.txtWert1) * 100000#
If erg > 100000000000# Then
MsgBox "Wert zu groß!"
End If
Tipp: Benutze Currency
auch für Zählungen oder Unix-Timestamps.
Tabelle: Vergleich Datentypen in Access
Typ | Größe | Bereich | Bemerkung |
---|---|---|---|
Byte | 1 Byte | 0 – 255 | Nur ganzzahlige Werte |
Integer | 2 Byte | -32.768 – 32.767 | Selten sinnvoll |
Long | 4 Byte | -2.147.483.648 – 2.147.483.647 | Standard für AutoWert |
Currency | 8 Byte | ±922.337.203.685.477,5808 | Intern 64-Bit-Integer |
BigInt | 8 Byte | ±9.223.372.036.854.775.807 | Nur mit Registry aktivierbar |
Wann BigInt Pflicht wird
- Schnittstellen zu SQL Server oder MySQL mit Identity(1,1)
BIGINT
- Verarbeitung von Timestamps (z. B. Unix Epoch in Millisekunden)
- Technische IDs (GUID-Hashes als int64)
- REST-APIs mit großen Mengenkennzahlen
Wenn Du in Access mit echten Systemdaten arbeitest, führt kein Weg an BigInt vorbei.
Nicht für jeden Datensatz – aber für jeden ernsthaften Datenentwickler.
Und mit ein bisschen Registry, Currency
-Trick und klaren Typen bekommst Du das gut in den Griff.
Wenn Du willst, schicke ich Dir meine Feldkonvertierungsroutine als Modul.
Keine Antworten