DatenintegritĂ€t gefĂ€hrdet => Wie ich dafĂŒr sorge, dass Daten konsistent und korrekt bleiben
Wenn âpasst schonâ irgendwann nicht mehr passt
Access macht vieles einfach. Aber auch vieles kaputt, wenn man nicht aufpasst.
SQL Server ist stabil â aber auch nur, wenn man ihm Regeln gibt.
Ich zeig Dir, wie ich DatenintegritÀt so absichere, dass Du nachts ruhig schlafen kannst.
Drei Sorten IntegritÀt, die Du im Griff haben musst
- EntitĂ€tsintegritĂ€t â jeder Datensatz hat eine eindeutige ID
- Referentielle IntegritĂ€t â verknĂŒpfte DatensĂ€tze passen zusammen
- DomĂ€nenintegritĂ€t â Werte sind gĂŒltig, vollstĂ€ndig, im Rahmen
Wenn eine davon fehlt, wird Access unbrauchbar und SQL-Tabellen unbrauchbar genau.
EntitĂ€tsintegritĂ€t: PrimĂ€rschlĂŒssel ist Pflicht
Access
Jede Tabelle braucht ein PrimĂ€rschlĂŒsselfeld.
Kein zusammengesetzter Quatsch.
Autowert ist okay â aber nicht als Ersatz fĂŒr Logik.
CREATE TABLE Kunden (
KundenID AUTOINCREMENT PRIMARY KEY,
Name TEXT(100) NOT NULL
);
SQL Server
CREATE TABLE Kunden (
KundenID INT IDENTITY(1,1) PRIMARY KEY,
Name NVARCHAR(100) NOT NULL
);
Fehlt der SchlĂŒssel, kannst Du keine Beziehungen sauber abbilden.
Referentielle IntegritÀt: Beziehungen mit Konsequenz
Access
Im Beziehungsfenster:
âReferentielle IntegritĂ€tâ aktivieren
- Kaskadierendes Löschen nur, wenn Duâs wirklich willst.
SQL Server
ALTER TABLE Bestellungen
ADD CONSTRAINT FK_Bestellungen_Kunden
FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID);
Willst Du nicht, dass gelöschte Kunden alle Bestellungen mitreiĂen?
Dann:
ON DELETE NO ACTION
DomĂ€nenintegritĂ€t: Regeln fĂŒr jeden Wert
Access
- Datentypen richtig wÀhlen
- Eingabemasken (wenn nötig)
- Validierungsregeln
Me!txtPLZ.ValidationRule = "Like '#####'"
Me!txtPLZ.ValidationText = "Bitte genau 5 Ziffern."
Oder in der Tabelle selbst:
Feld: PLZ
GĂŒltigkeitsregel: Is Null Or Like "#####"
SQL Server
ALTER TABLE Kunden
ADD CONSTRAINT CK_Kunden_PLZ
CHECK (PLZ LIKE '[0-9][0-9][0-9][0-9][0-9]');
Oder ENUM-Ă€hnlich ĂŒber eine Referenztabelle + FK.
Eingabefehler abfangen: VBA mit PrĂŒfung
Private Sub btnSpeichern_Click()
If IsNull(Me!txtKunde) Then
MsgBox "Kunde fehlt.", vbExclamation
Exit Sub
End If
If Len(Me!txtPLZ) <> 5 Or Not IsNumeric(Me!txtPLZ) Then
MsgBox "PLZ ungĂŒltig.", vbExclamation
Exit Sub
End If
DoCmd.RunCommand acCmdSaveRecord
End Sub
So vermeidest Du MĂŒll in der Datenbank.
Transaktionen verwenden â auch in Access
VBA-Beispiel mit DAO
Dim db As DAO.Database
Set db = CurrentDb
db.BeginTrans
On Error GoTo Fehler
db.Execute "INSERT INTO Kunden (Name) VALUES ('Muster GmbH')", dbFailOnError
db.Execute "INSERT INTO Auftraege (KundenID, Betrag) VALUES (42, 1000)", dbFailOnError
db.CommitTrans
Exit Sub
Fehler:
db.Rollback
MsgBox "Fehler beim Speichern: " & Err.Description
SQL Server (T-SQL)
BEGIN TRANSACTION;
INSERT INTO Kunden (Name) VALUES ('Muster GmbH');
INSERT INTO Auftraege (KundenID, Betrag) VALUES (SCOPE_IDENTITY(), 1000);
COMMIT;
Oder bei Fehler:
ROLLBACK;
Transaktionen sind Dein Airbag.
PrĂŒfung der DatenqualitĂ€t
SQL Server: Dubletten finden
SELECT KundenID, COUNT(*)
FROM Kunden
GROUP BY KundenID
HAVING COUNT(*) > 1;
Access: UngĂŒltige FremdschlĂŒssel
SELECT Bestellungen.*
FROM Bestellungen
LEFT JOIN Kunden ON Bestellungen.KundenID = Kunden.KundenID
WHERE Kunden.KundenID IS NULL;
Ergebnis: DatenmĂŒll.
Ursache: schlechte Kontrolle.
Tabelle: MaĂnahmen zur DatenintegritĂ€t
Bereich | Access | SQL Server |
---|---|---|
PrimĂ€rschlĂŒssel | Autowert, eindeutige Felder | IDENTITY, UNIQUE |
FremdschlĂŒssel | Beziehungen mit IntegritĂ€t | FK mit ON DELETE /ON UPDATE |
GĂŒltigkeitsprĂŒfung | Validierungsregel, Eingabemaske | CHECK , DEFAULT , FK |
Eingabekontrolle | VBA-Formularlogik | Stored Procedures + Constraints |
Transaktionen | BeginTrans + Rollback | BEGIN TRAN + ROLLBACK |
Reporting-Checks | Abfragen mit LEFT JOIN IS NULL | Views, Alerts, Triggers |
Mein Setup fĂŒr saubere Daten
Bereich | Vorgehen |
---|---|
Tabellenstruktur | getrennt nach EntitÀten, sauber mit PK/FK |
Eingaben | Masken mit VBA-Logik |
Automatische PrĂŒfung | nĂ€chtliche Reports mit LEFT JOIN-Abfragen |
Fehlervermeidung | VBA-Transaktionen + RĂŒckmeldungen |
AufrÀumen | Skripte mit Logging, keine Ad-hoc-Löschungen |
Wer Daten nicht schĂŒtzt, hat irgendwann keine mehr, auf die er sich verlassen kann.
DatenintegritĂ€t ist kein Luxus â sie ist die Grundlage fĂŒr alles.
Und Access wie SQL Server können das â wenn Du es ihnen beibringst.
Keine Antworten