Einzelnen Beitrag anzeigen

Benutzerbild von Jasocul
Jasocul

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

AW: Datensatz wird nicht gelöscht

  Alt 8. Nov 2022, 07: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