Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delete funktioniert nicht (https://www.delphipraxis.net/207992-delete-funktioniert-nicht.html)

juelin 25. Mai 2021 18:16

Datenbank: MySql • Version: MariaDB • Zugriff über: Devart

Delete funktioniert nicht
 
Hallo Forum,
ich benutze Windows 10, Delphi 10.3 und MySql MariaDB.
In einem Programm benutze ich direkt hintereinander
Delete und Insert in eine Tabelle.

Delphi-Quellcode:
                Form1.MyCommand1.SQL.Clear;
                Form1.MyCommand1.SQL.Add('DELETE FROM aufstellung WHERE Datum=:datum AND Spielnr=:spielnr AND Verein=:verein AND Spieler=:spieler AND von=:von');
                Form1.MyCommand1.ParamByName('datum').Name:='datum';
                Form1.MyCommand1.ParamByName('datum').DataType:=ftDateTime;
                Form1.MyCommand1.ParamByName('datum').Value:=datum7;
                Form1.MyCommand1.ParamByName('spielnr').Name:='spielnr';
                Form1.MyCommand1.ParamByName('spielnr').DataType:=ftInteger;
                Form1.MyCommand1.ParamByName('spielnr').Value:=nummer7;
                Form1.MyCommand1.ParamByName('verein').Name:='verein';
                Form1.MyCommand1.ParamByName('verein').DataType:=ftInteger;
                Form1.MyCommand1.ParamByName('verein').Value:=vereinnr7;
                Form1.MyCommand1.ParamByName('spieler').Name:='spieler';
                Form1.MyCommand1.ParamByName('spieler').DataType:=ftInteger;
                Form1.MyCommand1.ParamByName('spieler').Value:=spielnr7a;
                Form1.MyCommand1.ParamByName('von').Name:='von';
                Form1.MyCommand1.ParamByName('von').DataType:=ftDateTime;
                Form1.MyCommand1.ParamByName('von').Value:=von7a;
                Form1.MyCommand1.Execute;
                if SqlRet then
// der SqlRet ist nach Ausführung TRUE
                  Form1.MyCommand1.SQL.Clear;
                  Form1.MyCommand1.SQL.Add('INSERT INTO aufstellung (Datum, Spielnr, Verein, Spieler, Position, Detail, von, bis) VALUES (:datum, :spielnr, :verein, :spieler, :pos, :det, :von, :bis)');
                  Form1.MyCommand1.ParamByName('datum').Name:='datum';
                  Form1.MyCommand1.ParamByName('datum').DataType:=ftDateTime;
                  Form1.MyCommand1.ParamByName('datum').Value:=datum7;
                  Form1.MyCommand1.ParamByName('spielnr').Name:='spielnr';
                  Form1.MyCommand1.ParamByName('spielnr').DataType:=ftInteger;
                  Form1.MyCommand1.ParamByName('spielnr').Value:=nummer7;
                  Form1.MyCommand1.ParamByName('verein').Name:='verein';
                  Form1.MyCommand1.ParamByName('verein').DataType:=ftInteger;
                  Form1.MyCommand1.ParamByName('verein').Value:=vereinnr7;
                  Form1.MyCommand1.ParamByName('spieler').Name:='spieler';
                  Form1.MyCommand1.ParamByName('spieler').DataType:=ftInteger;
                  Form1.MyCommand1.ParamByName('spieler').Value:=spielnr7;
                  Form1.MyCommand1.ParamByName('pos').Name:='pos';
                  Form1.MyCommand1.ParamByName('pos').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('pos').Value:=pos7;
                  Form1.MyCommand1.ParamByName('det').Name:='det';
                  Form1.MyCommand1.ParamByName('det').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('det').Value:=det7;
                  Form1.MyCommand1.ParamByName('von').Name:='von';
                  Form1.MyCommand1.ParamByName('von').DataType:=ftDateTime;
                  Form1.MyCommand1.ParamByName('von').Value:=von7;
                  Form1.MyCommand1.ParamByName('bis').Name:='bis';
                  Form1.MyCommand1.ParamByName('bis').DataType:=ftDateTime;
                  Form1.MyCommand1.ParamByName('bis').Value:=bis7;
                  Form1.MyCommand1.Execute;
                  if not SqlRet then
                  begin
// Fehlermeldung dublicate Key
Alle Felder sind gleich und in Ordnung.
Warum wird der Delete nicht ausgeführt??????
Ich stehe vor einem Rätsel.
Danke und Gruß
Jürgen

hoika 25. Mai 2021 18:21

AW: Delete funktioniert nicht
 
Hallo,
was passiert denn, wenn Du statt dem Delete mal ein Select Count(*) machst?

(
Ein möglicher Ansatzpunkt ist vielleicht das
DataType:=ftDateTime und das .Value zuweisen.

Es gibt auch ftDate.

)

jobo 25. Mai 2021 18:23

AW: Delete funktioniert nicht
 
Was ist denn der SQLRet? Vielleicht ein SQL Fehler Code?
Mein Tipp, das Delete verletzt einen Datenbank Constraint.
Rückgabewerte prüfen und feststellen, woran es hapert.

juelin 25. Mai 2021 18:25

AW: Delete funktioniert nicht
 
Delphi-Quellcode:
procedure TForm1.MyCommand1AfterExecute(Sender: TObject; Result: Boolean);
begin
  SqlRet:=Result;
end;

himitsu 25. Mai 2021 18:27

AW: Delete funktioniert nicht
 
Was ist denn datum7 für ein Typ?

Ich denk mal als "Float" ist z.B. ein TDateTime (Double) für die DB bissl was "Anderes", als wie für Delphi.


Delphi-Quellcode:
                Form1.MyCommand1.ParamByName('datum').AsDateTime := datum7;
                Form1.MyCommand1.ParamByName('spielnr').AsInteger := nummer7;
                Form1.MyCommand1.ParamByName('verein').AsString := vereinnr7;
                Form1.MyCommand1.ParamByName('spieler').AsString := spielnr7a;
                Form1.MyCommand1.ParamByName('von').AsKeineAhnungWas := von7a;

Gab es bei Devart nicht in der Connection oder den Querys eine Funktion, welche das SQL-Statement ohne Parameter zurückgibt?
Also wo die Parameter durch die Werte ersetzt wurden.
Ansonsten kann man doch bestimmt in der DB in irgendeiner Log- oder Statusanzeige die letzten ausgeführten SQL-Statements sehen?


Ach ja, wieso weißt du .Name etwas zu?

juelin 25. Mai 2021 18:44

AW: Delete funktioniert nicht
 
Also,
ich mach so Datenbank SQL nicht zum ersten mal.
Bis jetzt hat auch immer alles funktioniert.

datum7 = TDate
nummer7 = Integer
vereinnr7 = Integer
spielnr7 = Integer = spielnr7a
von7 = TTime = von7a

hoika 25. Mai 2021 19:56

AW: Delete funktioniert nicht
 
Hallo,
und trotzdem scheint es ja nicht zu funktionieren.

Was bringt denn ein Select Count(*)

PS: Nicht alle deine Delete-Parameter sind die gleichen wie beim Insert.

juelin 25. Mai 2021 20:32

AW: Delete funktioniert nicht
 
von7 und von7a sind gleich
spielnr7 und spielnr7a sind gleich
der Select Count(*) würde aber nicht mit MyCommand1
sondern mit MyQuery1 ausgeführt.
Soll das dann was bringen?

Uwe Raabe 25. Mai 2021 21:08

AW: Delete funktioniert nicht
 
Kannst du mal prüfen, ob der Datumsanteil der Time-Felder wirklich dem entspricht, was du erwartest? Da es sich ja um ftDateTime-Parameter handelt, wird der Datumsanteil wohl beim WHERE mit berücksichtigt.

hoika 25. Mai 2021 21:43

AW: Delete funktioniert nicht
 
Hallo,
womit das Count(*) läuft, ist egal,
was kommt raus?
Auch wegen dem, was Uwe gerade geschrieben hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 Uhr.
Seite 1 von 2  1 2      

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