AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Abfrage: Ist Datensatz bereits vorhanden?
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage: Ist Datensatz bereits vorhanden?

Ein Thema von BenneX · begonnen am 20. Jul 2014 · letzter Beitrag vom 23. Jul 2014
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
BenneX

Registriert seit: 9. Jul 2014
21 Beiträge
 
#1

Abfrage: Ist Datensatz bereits vorhanden?

  Alt 20. Jul 2014, 01:32
Datenbank: SQLite • Version: 3 • Zugriff über: SQLite4Delphi Wrapper von Tim Anderson
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
  Mit Zitat antworten Zitat
Benutzerbild von borncrush
borncrush

Registriert seit: 18. Dez 2005
Ort: Berlin
115 Beiträge
 
Delphi XE7 Enterprise
 
#2

AW: Abfrage: Ist Datensatz bereits vorhanden?

  Alt 20. Jul 2014, 01:38
Ohne Programmierung erst einmal.

Wie lässt sich der Datensatz identifizieren?

Danach gehts weiter ...
Delphi programming
  Mit Zitat antworten Zitat
BenneX

Registriert seit: 9. Jul 2014
21 Beiträge
 
#3

AW: Abfrage: Ist Datensatz bereits vorhanden?

  Alt 20. Jul 2014, 01:47
Über eine Eindeutigkeit, bspw.

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 :-/
  Mit Zitat antworten Zitat
Benutzerbild von borncrush
borncrush

Registriert seit: 18. Dez 2005
Ort: Berlin
115 Beiträge
 
Delphi XE7 Enterprise
 
#4

AW: Abfrage: Ist Datensatz bereits vorhanden?

  Alt 20. Jul 2014, 03:30
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?
Delphi programming
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Abfrage: Ist Datensatz bereits vorhanden?

  Alt 20. Jul 2014, 03:47
Über eine Eindeutigkeit, bspw.
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?
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#6

AW: Abfrage: Ist Datensatz bereits vorhanden?

  Alt 20. Jul 2014, 04:54
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (20. Jul 2014 um 04:59 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Abfrage: Ist Datensatz bereits vorhanden?

  Alt 20. Jul 2014, 08:39
Über eine Eindeutigkeit, bspw.
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Abfrage: Ist Datensatz bereits vorhanden?

  Alt 20. Jul 2014, 09:46
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?
- - select exists(select 1 from Tabelle where Name='Mustermann'); -- 1, true, *, irgendwas ... egal
PS:
Zitat von BenneX:
Ausgabe als Boolean wäre wünschenswert.


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.
$2B or not $2B

Geändert von himitsu (20. Jul 2014 um 09:54 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: Abfrage: Ist Datensatz bereits vorhanden?

  Alt 20. Jul 2014, 09:47
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Abfrage: Ist Datensatz bereits vorhanden?

  Alt 20. Jul 2014, 09:59
"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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 16:09 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