Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

contact-manager

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

Contact Manager

Eine VCL-Desktopanwendung (Delphi / RAD Studio) zur Verwaltung von Kontakten, mit PostgreSQL-Datenbank im Docker-Container.

Inhaltsverzeichnis

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:

bash
docker compose up -d

Prüfen, ob der Container läuft:

bash
docker ps

2. PostgreSQL-Treiber bereitstellen

Folgende DLLs müssen im selben Verzeichnis wie die kompilierte .exe liegen (z. B. Win64\Debug\):

pascal
libpq.dll

Quelle: 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
  • F9 drücken

Projektstruktur

pascal
ContactManager/
????????? docker-compose.yml     # PostgreSQL-Container-Definition
????????? init.sql               # Datenbankschema (wird beim ersten Start ausgef??hrt)
????????? Projekte/
    ????????? Unit2.pas           # Hauptformular mit gesamter Logik

Datenbankschema

sql
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

E-Mail

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, 016 oder 017 (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