AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbankeinträge auf Existenz prüfen
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbankeinträge auf Existenz prüfen

Ein Thema von NoGAD · begonnen am 29. Jan 2021 · letzter Beitrag vom 29. Jan 2021
Antwort Antwort
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#1

Datenbankeinträge auf Existenz prüfen

  Alt 29. Jan 2021, 03:16
Datenbank: ABS_Database • Version: 7.92 • Zugriff über: ABSTable
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
Mathias
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Datenbankeinträge auf Existenz prüfen

  Alt 29. Jan 2021, 06:02
Guten MOrgen,


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?
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
309 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Datenbankeinträge auf Existenz prüfen

  Alt 29. Jan 2021, 06:49
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)
Chris
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Datenbankeinträge auf Existenz prüfen

  Alt 29. Jan 2021, 06:57
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...

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
309 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Datenbankeinträge auf Existenz prüfen

  Alt 29. Jan 2021, 07:02
Wenn da 10x Bibel drinsteht, hat das nicht viel mit "Verwaltung" von Büchern zu tun.
Ein paar Pflichtfelder sollten schon sein. Oder wenigstens einen Zusatz zum Titel
Chris
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.338 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Datenbankeinträge auf Existenz prüfen

  Alt 29. Jan 2021, 08:39
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.
Peter
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#7

AW: Datenbankeinträge auf Existenz prüfen

  Alt 29. Jan 2021, 10:18
ja nach Datenbank geht es eventuell sinngemäß auch in etwa so:

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.
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Datenbankeinträge auf Existenz prüfen

  Alt 29. Jan 2021, 10:30
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.
Mathias
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Datenbankeinträge auf Existenz prüfen

  Alt 29. Jan 2021, 10:40
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?
Mathias
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#10

AW: Datenbankeinträge auf Existenz prüfen

  Alt 29. Jan 2021, 10:44
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 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