Catalog · How the catalog works
contact-manager
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
Contact Manager
Eine VCL-Desktopanwendung (Delphi / RAD Studio) zur Verwaltung von Kontakten, mit PostgreSQL-Datenbank im Docker-Container.
Inhaltsverzeichnis
- Voraussetzungen
- Setup
- Projektstruktur
- Datenbankschema
- Funktionen
- Validierungsregeln
- CSV-Import/-Export
- Bekannte Einschränkungen
- Fehlerbehebung
- Mögliche Erweiterungen
Voraussetzungen
- RAD Studio / Delphi (Win64-Kompilierung)
- Docker Desktop (für PostgreSQL)
- PostgreSQL Client-Bibliothek (
libpq.dll+ Abhängigkeiten) im Anwendungsverzeichnis
Setup
1. Datenbank starten
Im Projektordner mit docker-compose.yml und init.sql:
docker compose up -dPrüfen, ob der Container läuft:
docker ps2. PostgreSQL-Treiber bereitstellen
Folgende DLLs müssen im selben Verzeichnis wie die kompilierte .exe liegen (z. B. Win64\Debug\):
libpq.dllQuelle: offizieller PostgreSQL-Installer für Windows x64 (postgresql.org/download/windows).
3. Verbindungsdaten
Aktuell im Code hinterlegt (ConnectDB-Methode):
| Parameter | Wert |
|---|---|
| Server | localhost |
| Port | 5432 |
| Datenbank | contactmanager |
| Benutzer | contactadmin |
| Passwort | changeme123 |
Für produktiven Einsatz sollten diese Werte ausgelagert werden (z. B.
.ini-Datei), statt hart codiert im Quelltext zu stehen.
4. Projekt kompilieren
- Platform auf Win64 stellen
F9drücken
Projektstruktur
ContactManager/
????????? docker-compose.yml # PostgreSQL-Container-Definition
????????? init.sql # Datenbankschema (wird beim ersten Start ausgef??hrt)
????????? Projekte/
????????? Unit2.pas # Hauptformular mit gesamter LogikDatenbankschema
CREATE TABLE contacts (
id SERIAL PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
street VARCHAR(150),
house_number VARCHAR(20),
postal_code VARCHAR(20),
city VARCHAR(100),
country VARCHAR(100),
phone VARCHAR(30),
mobile VARCHAR(30),
email VARCHAR(100),
notes TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);Ein Trigger (trg_set_updated_at) aktualisiert updated_at automatisch bei jedem UPDATE.
Funktionen
| Funktion | Beschreibung |
|---|---|
| Anzeigen | Alle Kontakte im DBGrid1, sortiert nach Nachname/Vorname |
| Hinzufügen | Neuer Kontakt über Eingabefelder + btnAdd |
| Bearbeiten | Kontakt in Grid anklicken → Felder füllen sich → btnUpdate |
| Löschen | Kontakt auswählen → btnDelete (mit Bestätigungsdialog) |
| Suche | Volltextsuche über Vorname, Nachname, E-Mail, Telefon, Stadt |
| Spalten-Autobreite | Grid-Spalten passen sich automatisch an Inhalt an |
| CSV-Export | Alle Kontakte als .csv-Datei speichern (UTF-8) |
| CSV-Import | Kontakte aus .csv-Datei einlesen |
Validierungsregeln
Muster: name@domain.tld (Standard-E-Mail-Format via Regex)
Telefon (phone)
- Erlaubt: Ziffern,
+(nur am Anfang), Leerzeichen,/,-,(,) - Länge: 6–20 Zeichen gesamt
- Mindestens 6 tatsächliche Ziffern erforderlich
Gültig: 089 12345678, +49 89 12345678, 0821/123456, (0821) 123456
Ungültig: 12345 (zu kurz), 0821 abc (Buchstaben), 089.123.456 (Punkt nicht erlaubt)
Mobil (mobile)
- Deutsches Format: beginnt mit
015,016oder017(mit/ohne+49-Vorwahl)
Gültig: 0151 12345678, +49 151 12345678
Ungültig: 030 12345678 (keine Mobilvorwahl)
Alle drei Felder sind optional (keine
NOT NULL-Constraint) — leer bleibt erlaubt, Validierung greift nur bei ausgefülltem Feld.
CSV-Import/-Export
Export
- Button "Als CSV exportieren" → Dateiauswahl-Dialog → Speicherort wählen
- Kodierung: UTF-8 (mit BOM), damit Umlaute in Excel korrekt erscheinen
- Spaltenreihenfolge:
Vorname,Nachname,Straße,Hausnummer,PLZ,Stadt,Land,Telefon,E-Mail,Notiz
Import
- Button "CSV importieren" → Dateiauswahl-Dialog → Datei wählen
- Erwartet exakt dieselbe Spaltenreihenfolge wie beim Export
- Zeilen mit fehlendem Vor-/Nachnamen werden übersprungen (Zähler wird angezeigt)
- Erste Zeile (Kopfzeile) wird ignoriert
Bekannte Einschränkungen
- Keine Duplikat-Prüfung beim Import (gleicher Kontakt kann mehrfach importiert werden)
- Verbindungsdaten sind im Quellcode hinterlegt statt ausgelagert
- Telefon-/Mobilvalidierung ist auf deutsche Formate ausgelegt
- Kein Soft-Delete — gelöschte Kontakte sind unwiderruflich weg
- CSV-Import erwartet strikt gleiche Spaltenreihenfolge; manuell umsortierte Dateien führen zu falscher Zuordnung
Fehlerbehebung
| Fehler | Ursache | Lösung |
|---|---|---|
[FireDAC][Phys][PG]-314 (libpq.dll nicht gefunden) |
DLL fehlt im Anwendungsverzeichnis | DLLs in Win64\Debug\ kopieren |
authentication method 10 not supported |
PostgreSQL nutzt SCRAM-SHA-256, alte libpq.dll unterstützt es nicht | POSTGRES_HOST_AUTH_METHOD: md5 in docker-compose.yml, dann docker compose down -v + neu starten |
F2039 (Ausgabedatei kann nicht erstellt werden) |
Alte .exe läuft noch / Projektordner in OneDrive-Sync |
Prozess im Task-Manager beenden, Projekt ggf. aus OneDrive-Ordner verschieben |
Mögliche Erweiterungen
- Sortierung per Spaltenklick im Grid
- Statusleiste mit Kontaktanzahl
- Kategorien/Tags pro Kontakt
- Kontaktfoto
- Mehrere Adressen/Telefonnummern pro Kontakt (1:n-Beziehung)
- Soft-Delete statt endgültigem Löschen
- Konfigurationsdatei für Verbindungsdaten statt Hardcoding

