Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL delete where funktioniert nicht (https://www.delphipraxis.net/190047-sql-delete-where-funktioniert-nicht.html)

BBoy 24. Aug 2016 11:17

Datenbank: sqlite • Version: ? • Zugriff über: ?

SQL delete where funktioniert nicht
 
Mal wieder ich :?

Ich möchte einen Datensatz löschen wobei drei Bedingungen erfüllt sein müssen.
Alle Felder sind vom Typ TEXT
Mein Versuch:
Code:
 
  sqlquery1.SQL.Text := 'DELETE FROM customers WHERE Name = :name AND Vorname = :vorname AND Datum = :datum';
  sqlquery1.Params.ParamByName('name').AsString := 'Pan';
  sqlquery1.Params.ParamByName('vorname').AsString := 'Peter';
  sqlquery1.Params.ParamByName('datum').AsString := '22.08.2016';
  sqlquery1.ExecSQL;
Führt nicht zum Erfolg da keine Entsprechungen gefunden werden. Also habe ich zum testen einfach nur:
Code:
 
sqlquery1.SQL.Text := 'DELETE FROM customers WHERE Datum = :datum';
...
..
.
Auch hier wurden keine Entsprechungen gefunden. Dieses Problem ist bei allen Feldern mit Leerzeichen/Satzzeichen
Nur wenn ich nach Name Suche funktioniert es.

Liegt es an den Punkten zwischen dem Datum? Oder was mache ich falsch?

joachimd 24. Aug 2016 11:22

AW: SQL delete where funktioniert nicht
 
Zitat:

Zitat von BBoy (Beitrag 1345600)
Code:
 
  sqlquery1.SQL.Text := 'DELETE FROM customers WHERE Name = :name AND Vorname = :vorname AND Datum = :datum';

Von welchem Typ ist das Feld Datum in der Datenbank? Zumeist ist es eine Fliesskommazahl oder auf eine Fliesskommazahl gemappt und da gibt es keine Gleichheit.

mkinzler 24. Aug 2016 11:23

AW: SQL delete where funktioniert nicht
 
= prüft auf absolute Gleichheit.

Leerzeichen könnte man weg"Trim"men.

Was für einen Typ hat das Feld Datum?

BBoy 24. Aug 2016 11:30

AW: SQL delete where funktioniert nicht
 
Wie bereits im ersten post geschrieben: Alle felder sind vom typ : TEXT

Ja und das Datum ist vorhanden in der DB und es sind keine Leerzeichen am Ende oder ähnliches.

mkinzler 24. Aug 2016 11:34

AW: SQL delete where funktioniert nicht
 
Und wie steht das Datum genau in der DB? Wenn es Strings sind, muss es genauso formatiert sein.

Ps.S. deshalb besser passende Typen verwenden.

BBoy 24. Aug 2016 11:36

AW: SQL delete where funktioniert nicht
 
Format ist: '22.08.2016'
Genau so steht es in der DB und genau so suche ich danach. Würde eigentlich lieber bei den Strings bleiben wenn möglich.

DeddyH 24. Aug 2016 11:39

AW: SQL delete where funktioniert nicht
 
Dann nimm doch das vorgesehene Format, damit können dann auch die eingebauten DateTime-Routinen genutzt werden: https://www.sqlite.org/datatype3.html#section_2_2

joachimd 24. Aug 2016 11:43

AW: SQL delete where funktioniert nicht
 
Zitat:

Zitat von BBoy (Beitrag 1345606)
Format ist: '22.08.2016' Genau so steht es in der DB und genau so suche ich danach.

Versuche mal, mit LIKE zu arbeiten:
Delphi-Quellcode:
sqlquery1.SQL.Text := 'SELECT * FROM customers WHERE Datum LIKE ''22.08.2016%''';

Bringt das ein Ergebnis, so versuche die Parameter:
Delphi-Quellcode:
sqlquery1.SQL.Text := 'SELECT * FROM customers WHERE Datum LIKE :datum';
sqlquery1.Params.ParamByName('datum').AsString := '22.08.2016';
Zitat:

Würde eigentlich lieber bei den Strings bleiben wenn möglich.
Man kann ja keinen zwingen, das Richtige zu tun ;)

DeddyH 24. Aug 2016 11:47

AW: SQL delete where funktioniert nicht
 
Es gibt in SQLite keinen DateTime-Datentyp, von daher ist TEXT ja keine falsche Wahl, siehe Link in meinem letzten Post.

BBoy 24. Aug 2016 12:13

AW: SQL delete where funktioniert nicht
 
Zitat:

Zitat von joachimd (Beitrag 1345609)
Bringt das ein Ergebnis, so versuche die Parameter:
Delphi-Quellcode:
sqlquery1.SQL.Text := 'SELECT * FROM customers WHERE Datum LIKE :datum';
sqlquery1.Params.ParamByName('datum').AsString := '22.08.2016';

Das hat geholfen. Allerdings wunderte es mich und ich habe einfach mal trim in die entsprechende variable für das Datum eingebaut. und siehe da, es funktionierte! Muss wohl ein Sonderzeichen mit dabei gewesen sein. Nun funktioniert es auch ohne LIKE. Danke!

Zitat:

Zitat von joachimd (Beitrag 1345609)
Zitat:

Würde eigentlich lieber bei den Strings bleiben wenn möglich.
Man kann ja keinen zwingen, das Richtige zu tun ;)

Werde deinen Vorschlag bei der nächsten DB berücksichtigen. Aber die vorhandene zu ändern, dafür habe ich wenig Lust so kurz vor der Fertigstellung :?

Also, Problem gelöst.

Vielen Dank für eure Hilfe :thumb:

.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 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