![]() |
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:
Alle Felder sind gleich und in Ordnung.
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 Warum wird der Delete nicht ausgeführt?????? Ich stehe vor einem Rätsel. Danke und Gruß Jürgen |
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. ) |
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. |
AW: Delete funktioniert nicht
Delphi-Quellcode:
procedure TForm1.MyCommand1AfterExecute(Sender: TObject; Result: Boolean);
begin SqlRet:=Result; end; |
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? |
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 |
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. |
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? |
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.
|
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 22:28 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 by Thomas Breitkreuz