AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Datensatz wird nicht gelöscht

Datensatz wird nicht gelöscht

Ein Thema von juelin · begonnen am 7. Nov 2022 · letzter Beitrag vom 8. Nov 2022
Antwort Antwort
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
752 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Datensatz wird nicht gelöscht

  Alt 8. Nov 2022, 05:43
Hey,

Suchen oder gar Löschen via Timestamps oder Datum+Zeitwerten sollte man sich wirklich genau überlegen. Das wird im schlimmstenfall unscharf und betrifft mehr als einen Datensatz. ...oder gar keinen, wie bei dir
Deine Tabelle(n) sollte(n) einen einfachen eindeutigen Index besitzen. Am besten eignet sich ein Integer mit AutoInc Eigenschaft.
So ist jeder Datensatz dann garantiert eindeutig identifizierbar.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.251 Beiträge
 
Delphi 12 Athens
 
#2

AW: Datensatz wird nicht gelöscht

  Alt 8. Nov 2022, 06:33
Bei solchen Problemen mache ich aus dem Delete immer ein Select + schau, ob der gewünschte Datensatz überhaupt gefunden wird.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

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

AW: Datensatz wird nicht gelöscht

  Alt 8. Nov 2022, 06:34
Delphi-Quellcode:
            Form1.MyCommand1.SQL.Clear;
            Form1.MyCommand1.SQL.Add('DELETE FROM logbuch WHERE Rufzeichen1=:ru1 AND Rufzeichen2=:ru2 AND Rufzeichen3=:ru3 AND Datumvon=:dav AND Uhrzeitvon=:urv');
            Form1.MyCommand1.ParamByName('ru1').Name:='ru1';
            Form1.MyCommand1.ParamByName('ru1').DataType:=ftString;
            Form1.MyCommand1.ParamByName('ru1').Value:=e9ruf1;
            Form1.MyCommand1.ParamByName('ru2').Name:='ru2';
            Form1.MyCommand1.ParamByName('ru2').DataType:=ftString;
            Form1.MyCommand1.ParamByName('ru2').Value:=e9ruf2;
            Form1.MyCommand1.ParamByName('ru3').Name:='ru3';
            Form1.MyCommand1.ParamByName('ru3').DataType:=ftString;
            Form1.MyCommand1.ParamByName('ru3').Value:=e9ruf3;
            Form1.MyCommand1.ParamByName('dav').Name:='dav';
            Form1.MyCommand1.ParamByName('dav').DataType:=ftDateTime;
            Form1.MyCommand1.ParamByName('dav').Value:=e9vdat;
            Form1.MyCommand1.ParamByName('urv').Name:='urv';
            Form1.MyCommand1.ParamByName('urv').DataType:=ftDateTime;
            Form1.MyCommand1.ParamByName('urv').Value:=e9vzeit;
            Form1.MyCommand1.Execute;
            if not SqlRet then
Erstmal den Delphi-Code ändern:
Delphi-Quellcode:
            Form1.MyCommand1.SQL.Clear;
            Form1.MyCommand1.SQL.Add('DELETE FROM logbuch WHERE Rufzeichen1=:ru1 AND Rufzeichen2=:ru2 AND Rufzeichen3=:ru3 AND Datumvon=:dav AND Uhrzeitvon=:urv');
            Form1.MyCommand1.ParamByName('ru1').DataType:=ftString;
            Form1.MyCommand1.ParamByName('ru1').AsString:=e9ruf1;
            Form1.MyCommand1.ParamByName('ru2').DataType:=ftString;
            Form1.MyCommand1.ParamByName('ru2').AsString:=e9ruf2;
            Form1.MyCommand1.ParamByName('ru3').DataType:=ftString;
            Form1.MyCommand1.ParamByName('ru3').AsString:=e9ruf3;
            Form1.MyCommand1.ParamByName('dav').DataType:=ftDateTime;
            Form1.MyCommand1.ParamByName('dav').AsDateTime:=e9vdat;
            Form1.MyCommand1.ParamByName('urv').DataType:=ftDateTime;
            Form1.MyCommand1.ParamByName('urv').AsDateTime:=e9vzeit;
            Form1.MyCommand1.Execute;
            if not SqlRet then
Eine Namenszuweisung auf einen Parameter, den du schon mit dem Namen ansprichst, ist nicht nötig.
Die Wertzuweisung auf ParamByName('...').Value sollte man vermeiden, wenn man den Typ bereits kennt. Das bremst die Performance und kann in seltenen Fällen zu falschen Umwandlungen führen.
Den Type deiner Variablen kenne ich nicht. Gegebenenfalls musst du die noch umwandeln.

Die Probleme mit DateTime und Time wurden bereits angedeutet. Warum kann das ein Problem sein? Eim Time-Feld in der DB wird evtl. anders verwaltet, als ein DateTime-Feld. Möglicherweise werden Millisekunden mit abgespeichert, aber deine Zuweisung ist nur sekundengenau. Wird in der DB vielleicht ein anderes Datumsformat genutzt?

Mache aus deinen Delete erstmal ein Select. Teste es auf einem DB-Frontend. Dann siehst du vielleicht schon, ob du überhaupt den Datensatz findest. Teste das gegebenenfalls noch mit einem entsprechenden Select (das auch eine Ergebnis liefert) in Delphi und schaue dir dort die Feldinhalte an (FieldByName mit AsString, bzw. AsDateTime).
Peter
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.473 Beiträge
 
Delphi 12 Athens
 
#4

AW: Datensatz wird nicht gelöscht

  Alt 8. Nov 2022, 07:05
Moin...
Zitat:
Eine Namenszuweisung auf einen Parameter, den du schon mit dem Namen ansprichst, ist nicht nötig.
1. Auch eine DataTyp Zuweisung ist nicht nötig.
2. Ein SQL.CLEAR ist nur bei Verwendung von ADD nötig. Bei Verwendung von SQL.TEXT nicht.
3. Form1 ist ...sprechende Namen mit Präfix sind kein Luxus mehr.

Delphi-Quellcode:
foBlubb.qryCommand.SQL.Text := 'DELETE FROM logbuch WHERE Rufzeichen1=:ru1 AND Rufzeichen2=:ru2 AND Rufzeichen3=:ru3 AND Datumvon=:dav AND Uhrzeitvon=:urv';
foBlubb.qryCommand.ParamByName('ru1').AsString := e9ruf1;
foBlubb.qryCommand.ParamByName('ru2').AsString := e9ruf2;
foBlubb.qryCommand.ParamByName('ru3').AsString := e9ruf3;
foBlubb.qryCommand.ParamByName('dav').AsDateTime := e9vdat;
foBlubb.qryCommand.ParamByName('urv').AsDateTime := e9vzeit;
foBlubb.qryCommand.Execute;
PS: Ich würde den "Zeitstempel" in einem Feld speichern. Ggf. in der Oberfläche optisch trennen.


Geändert von haentschman ( 8. Nov 2022 um 07:10 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz