Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Abfrage: Ist Datensatz bereits vorhanden? (https://www.delphipraxis.net/181153-abfrage-ist-datensatz-bereits-vorhanden.html)

BenneX 20. Jul 2014 00:32

Datenbank: SQLite • Version: 3 • Zugriff über: SQLite4Delphi Wrapper von Tim Anderson

Abfrage: Ist Datensatz bereits vorhanden?
 
Hallo da draußen,

für mein Programm muss ich in meiner Datenbank feststellen ob ein Datensatz bereits vorhanden ist oder noch nicht. Wie stelle ich dies nun am Besten an? Ausgabe als Boolean wäre wünschenswert.

Viele Grüße,
BenneX

borncrush 20. Jul 2014 00:38

AW: Abfrage: Ist Datensatz bereits vorhanden?
 
Ohne Programmierung erst einmal.

Wie lässt sich der Datensatz identifizieren?

Danach gehts weiter ... ;-)

BenneX 20. Jul 2014 00:47

AW: Abfrage: Ist Datensatz bereits vorhanden?
 
Über eine Eindeutigkeit, bspw.

Delphi-Quellcode:
SELECT * FROM Kunden WHERE Name=Mustermann


Mustermann hab ich gegeben, jetzt möchte ich herausfinden ob ich den Datensatz UPDATEN muss oder neu erstellen muss - und genau dies ist mein Problem :-/

borncrush 20. Jul 2014 02:30

AW: Abfrage: Ist Datensatz bereits vorhanden?
 
Na wenn es einen Datensatz mit diesem Namen gibt (Mustermann), dann musst also einen Eintrag erstellen, andernfalls updaten.

Also du stellst diese SQL-Select-Abfrage und erhälst ja ein Ergebnis. Erst einmal egal, mit welchem Inhalt.

Nun gut, überlege weiter. Zwei Zustände gibt es also. Datensatz da oder nicht. Wie könnte der sich z.B. bei der SELECT-Abfrage im Ergebnis unterscheiden? Und könntest Du etwas damit anfangen?

Perlsau 20. Jul 2014 02:47

AW: Abfrage: Ist Datensatz bereits vorhanden?
 
Zitat:

Zitat von BenneX (Beitrag 1266070)
Über eine Eindeutigkeit, bspw.
Delphi-Quellcode:
SELECT * FROM Kunden WHERE Name=Mustermann

Ja und wo ist da das Problem? Du kannst doch die Datensätze, die du damit erhältst, zählen, oder etwa nicht?

Medium 20. Jul 2014 03:54

AW: Abfrage: Ist Datensatz bereits vorhanden?
 
Manche SQL Dialekte unterstützen direkt eine "UPDATE OR INSERT"-Funktion. Wie diese genau aussieht, hängt von deinem DMBS ab.

Edit: Für SQLite scheint es dafür RELPACE INTO zu geben. Damit lagert man den Schritt der Prüfung, ob ein Satz für eine ID schon existiert gemütlich in die DB aus, wo diese imho auch hin gehört. Drüber hinaus spart es ein paar Zeilen und etwas Traffic.

Dejan Vu 20. Jul 2014 07:39

AW: Abfrage: Ist Datensatz bereits vorhanden?
 
Zitat:

Zitat von Perlsau (Beitrag 1266072)
Zitat:

Zitat von BenneX (Beitrag 1266070)
Über eine Eindeutigkeit, bspw.
Delphi-Quellcode:
SELECT * FROM Kunden WHERE Name=Mustermann

Ja und wo ist da das Problem? Du kannst doch die Datensätze, die du damit erhältst, zählen, oder etwa nicht?

Zählen ist keine gute Idee, weil dazu die gesamte Tabelle (oder zumindest der Index, wenn dieser angewendet wird) durchsucht werden muss.

Die effektivste Möglichkeit um herauszubekommen, ob ein Datensatz existiert, wäre imho ein ANY oder EXISTS:
SQL-Code:
 
select
  case when exists (
    select 1 from Tabelle where Name='Mustermann'
    )
    then 1 
    else 0 
  end;
Das konkrete Problem (insert or update) ist natürlich bereits von Medium beantwortet.

himitsu 20. Jul 2014 08:46

AW: Abfrage: Ist Datensatz bereits vorhanden?
 
Warum so umständlich?
- SubSelect?
- das innere Select gibt schon deine 1 zurück und bei "0" halt Nichts
- aber vorallem "case when" ist doch sinnlos?
- - Auf die Frage gibt es als Antwort Ja oder Nein ... wozu also diese Antwort nochmal in 0 oder 1 umwandeln?
- -
SQL-Code:
select exists(select 1 from Tabelle where Name='Mustermann'); -- 1, true, *, irgendwas ... egal

PS:
Zitat:

Zitat von BenneX
Ausgabe als Boolean wäre wünschenswert.



SQL-Code:
SELECT true FROM table WHERE id = :id


Entweder gibt es einen Datensatz mit True oder es gibt keinen Datensatz.
Da es eh immer nur True geben kann, braucht man also nur die Anzahl der Datensätze prüfen (RecordCount/Empty/EOF) und der Inhalt ist praktisch egal.

jobo 20. Jul 2014 08:47

AW: Abfrage: Ist Datensatz bereits vorhanden?
 
Eigentlich ist schon alles gesagt, ich möchte nur anmerken, dass "Mustermann", also ein Name, idR nicht taugt, um eine Eindeutigkeitzu bestimmen.
Technisch gibt es dafür Primärschlüssel, logisch gibt es dafür Kundennummern bspw oder Kombinationen aus verschiedenen Feldern wie Name, Geburtsdatum, Adresse. Die werden dann von einem Menschen abgerufen und verglichen und der entscheidet sich dann für einen der Datensätze und dieser eine Datensatz kann über den technischen Primärschlüssel haargenau identifiziert und upgedated werden.

Wenn Du in die Verlegenheit kommen solltest, anhand eines mehrdeutigen Kriteriums den zu ändernden Datensatz bestimmen zu müssen, ist irgendwas schiefgelaufen. Ob
CSV mit Datenaktualisierung
Anforderung aus der Sachbearbeitung
oder was auch immer
Es werden immer eindeutige Kriterien benötigt.

p80286 20. Jul 2014 08:59

AW: Abfrage: Ist Datensatz bereits vorhanden?
 
"Eindeutigkeit" ist hier das wichtige Stichwort. In einer Adressdatenbank wird ein Klaus Müller oder Manfred Fischer problemlos mehrmals auftauchen. Handelt es sich hierbei um Personen mit mehr als einer Adresse oder handelt es sich um zwei unterschiedliche Personen? Und dann ist ja auch die Frage was in der DB fehlt. Liegen beispielsweise Städte und Postleitzahlen in einer Tabelle oder in zwei getrennten Tabellen?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 Uhr.
Seite 1 von 4  1 23     Letzte »    

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