Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbankeinträge auf Existenz prüfen (https://www.delphipraxis.net/206784-datenbankeintraege-auf-existenz-pruefen.html)

NoGAD 29. Jan 2021 03:16

Datenbank: ABS_Database • Version: 7.92 • Zugriff über: ABSTable

Datenbankeinträge auf Existenz prüfen
 
Hallo,

eine generelle Logikfrage habe ich bitte.

Wenn ich z.B. 4 relevante Datenbankfelder habe, möchte ich prüfen, ob ein Eintrag schon existiert, wenn ein neuer Eintrag hinzugefügt werden soll. Hierbei kann es jedoch sein, dass nicht alle Felder belegt sind. Es geht um eine kleine Buchsammlung, mit der mein Vati seine Bücher verwalten möchte.

Wie löst man eine solch komplexe Aufgabe?

Die Spalten sind:

1. Index (wird bei der Prüfung nicht benötigt)
2. Titel
3. Autor
4. ISBN-10
5. ISBN-13

Felder 2-5 sollen bitte verglichen werden. Autor und Titel ergibt ja einen schönen Vergleich, jedoch ist nicht immer auch ein Autor in der Datenbank eingetragen. Auch ISBN ist nicht immer vergeben. Selbst der Titel wurde nicht immer eingetragen.


Wenn ich nun die Felder vergleiche, muss ich ja verschiedene Zustände abfragen.

Wenn Feld 2 ODER Feld 3 ODER Feld 4 ODER Feld 5
Wenn Feld 2 UND Feld 3 ODER Feld 4 ODER Feld 5
Wenn Feld 2 UND Feld 3 UND Feld 4 ODER Feld 5
...


Habt ihr einen Tipp für mich?

LG Mathias

Lemmy 29. Jan 2021 06:02

AW: Datenbankeinträge auf Existenz prüfen
 
Guten MOrgen,


Delphi-Quellcode:
where (Titel=:Titel OR Titel IS NULL) AND (Autor=:Autor OR AUtor IS NULL) AND (ISBN-10=:ISBN-10 OR ISBN-10 IS NULL) AND (ISBN-13=:ISBN-13 OR ISBN-13 IS NULL)
das sollte doch reichen?

hhcm 29. Jan 2021 06:49

AW: Datenbankeinträge auf Existenz prüfen
 
Hi,

reicht es nicht auf Spalte 2-5 den Primärschlüssel bzw. einen Unique-Index zu setzen?
Wenn etwas doppelt eingetragen wird, meldet sich die Datenbank.
Autor ohne etwas anderes wird dann einfach Verboten (Macht auch keinen sinn)

sakura 29. Jan 2021 06:57

AW: Datenbankeinträge auf Existenz prüfen
 
Zitat:

Zitat von hhcm (Beitrag 1481728)
Wenn etwas doppelt eingetragen wird, meldet sich die Datenbank.

Es gibt aber auch doppelte Buchtitel - ich sage nur die "Bibel" in den verschiedensten Ausgaben. Da gibt es oft noch nicht einmal einen bestimmten Autor...

...:cat:...

hhcm 29. Jan 2021 07:02

AW: Datenbankeinträge auf Existenz prüfen
 
Wenn da 10x Bibel drinsteht, hat das nicht viel mit "Verwaltung" von Büchern zu tun.:stupid:
Ein paar Pflichtfelder sollten schon sein. Oder wenigstens einen Zusatz zum Titel

Jasocul 29. Jan 2021 08:39

AW: Datenbankeinträge auf Existenz prüfen
 
Lohnt sich der Prüfaufwand?

Wieviel Bücher sollen denn verwaltet werden? Ich bin bei meinen Büchern locker im 4-stelligen Bereich und käme nicht auf die Idee, dafür eine Datenbank und ein Programm dafür zu schreiben. Excel reicht. Da kann ich sortieren/filtern und sehe dann auch schnell Dubletten.
Ich habe auch ein paar wenige gleiche Bücher. Oder Bücher in verschiedenen Ausführungen oder aus unterschiedlichen Auflagen. Wie soll in solchen Fällen dann eine Prüfung greifen? Dann müsste die Auflage auch geprüft werden und vielleicht auch noch das Feld mit den Bemerkungen? Möglicherweise noch der Verlag?

Übrigens gibt es für private Bücherverwaltung auch Freeware.

Wenn es nur darum geht, ein hübsches kleines Projekt als Übung zu haben, dann würde ich ganz anders vorgehen.
Beim Erfassen einfach unter der Erfassungsmaske eine Liste möglicher vorhandener Bücher anzeigen. Bei jedem Tastendruck wird die Liste aktualisiert. Bei den paar Datensätzen spielt die Geschwindigkeit da sicher keine Rolle. Wenn der Erfasser dann sieht, dass das Buch schon erfasst wurde, kann er abbrechen. Wenn es aber tatsächlich physisch mehrfach vorhanden ist, kann es trotzdem erfasst werden.

Ich würde gegebenenfalls mal darüber nachdenken, jedes Buch mit einer Nummer zu versehen. Erfasste Bücher haben schon eine und sind entsprechend physisch markiert(Zettel auf der ersten Seite, ablösbare Aufkleber, etc.). Dann ist eine doppelte Erfassung eigentlich ausgeschlossen und die Prüfung kann komplett entfallen.

Delphi.Narium 29. Jan 2021 10:18

AW: Datenbankeinträge auf Existenz prüfen
 
ja nach Datenbank geht es eventuell sinngemäß auch in etwa so:

Delphi-Quellcode:
qry.ParamByName('Parameter').AsString := Format('%s%s%s%s',[Titel,Autor,ISBN-10,ISBN-13]);
SQL-Code:
-- Firebird, Oracle, PostGres
where (titel||autor||ISBN-10||ISBN-13) = :Parameter
-- SQL-Server, MySQL
where CONCAT(titel,autor,ISBN-10,ISBN-13) = :Parameter
-- SQL-Server
where titel + autor + ISBN-10 + ISBN-13) = :Parameter
-- Access
where (titel & autor & ISBN-10 & ISBN-13) = :Parameter
Dabei muss man dann nicht jede Spalte auf Null abfragen, beim "Aneinanderreihen" werden alle nullenthaltenden Spalten zu 'nem Leerstring (also zu nix).

Ansonsten mal bei der Suchmaschine Deiner Wahl nach sql concat NameDeinerDatenbank suchen.

NoGAD 29. Jan 2021 10:30

AW: Datenbankeinträge auf Existenz prüfen
 
Vielen Dank für eure Hinweise.

Das Beispiel mit der Bibel hat mir gefallen.

Mein Vati hat auch mehr als 1000 Bücher.

Das Programm dient ja auch mir als Lernprozess. Es gibt ein Ablagesystem, ein Ausleihe-Datenbankfeld, eine Druckfunktion, Filtern von Einträgen ist auch schon implementiert.

Momentan bastle ich noch an der Prüfung auf doppelte Bücher.

NoGAD 29. Jan 2021 10:40

AW: Datenbankeinträge auf Existenz prüfen
 
Was mir gerade noch einfällt und Kopfzerbrechen macht:


Wenn es zwei gleiche Titel in der Datenbank gibt, ohne Autor und ISBN, woher weiß ich, welcher Eintrag eventuell aktualisiert werden soll?

ODER

Wenn es einen schon Titel in der Datenbank gibt und außerdem einen Autor - ohne Titel und ohne ISBN, welcher Eintrag wäre hier auszuwählen.


Vielleicht sollte ich eine Liste der verfügbaren Doubles erstellen, um dann selektieren zu lassen, welches Double aktualisiert werden soll?

Delphi.Narium 29. Jan 2021 10:44

AW: Datenbankeinträge auf Existenz prüfen
 
Zitat:

Zitat von NoGAD (Beitrag 1481752)
Vielleicht sollte ich eine Liste der verfügbaren Doubles erstellen, um dann selektieren zu lassen, welches Double aktualisiert werden soll?

Eindeutig ja, alles Andere gliche einem Zufallsgenerator.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz