Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL - Anweisung - Kommatrennung (https://www.delphipraxis.net/146749-sql-anweisung-kommatrennung.html)

MasterChief_88 26. Jan 2010 16:44


SQL - Anweisung - Kommatrennung
 
Hi!

also hab ne Frage zu SQL:

ich möchte aus einer Tabelle nicht alle Datensätze, sondern nur ganz bestimmte haben.
Die ganz bestimmten Datensätze liegen in einer Stringlist (also der KEY zu jedem Datensatz).
Die ganzen KEYs les in ein string ein und trenne sie durch Komma.

hier der quelltext:

Delphi-Quellcode:
Table.Sql.text := ('Select * from MYTABLE where KEY in (' + QuotedStr(stringKEY));
somit vermeide ich, dass ich *-zig "SELECT"-Anweisungen schreibe.
Ich muss aber noch irgendwie delphi sagen, das die einzelnen KEYs in dem string kommagetrennt sind.

Nun meine Frage: WIE MACHEN ICH DAS? ODER WIE IST DER BEFEHL DAZU?

danke schon mal im voraus ;)!

nahpets 26. Jan 2010 16:54

Re: SQL - Anweisung - Kommatrennung
 
Hallo,

Du musst wohl um jeden Wert in der Stringliste ein QuotedStr machen und nicht um die ganze Stringliste. Sofern es sich um numerische Werte handelt, ist ein QuotedStr aber nicht erforderlich, eventuell fehlte Dir nur die schließende Klammer?

Delphi-Quellcode:
Table.Sql.text := ('Select * from MYTABLE where KEY in (' + QuotedStr(stringKEY) + ')');

MasterChief_88 26. Jan 2010 17:13

Re: SQL - Anweisung - Kommatrennung
 
also wenn ich das so klammer wie du, dann erhalt ich folgende Fehlermeldung:

Delphi-Quellcode:
arithmetic exception, numeric overflow, or string truncation
muss sagen, die fehlermeldung sagt mir gar nix ^^

MasterChief_88 26. Jan 2010 17:17

Re: SQL - Anweisung - Kommatrennung
 
und wenn ich das so mach:

Delphi-Quellcode:
Table.Sql.text := ('Select * from MYTABLE where KEY in (' + stringKEY + ')' );
da haut er mir raus, dass er mit dem ) nichts anfangen kann ^^
schon komisch!

mkinzler 26. Jan 2010 17:21

Re: SQL - Anweisung - Kommatrennung
 
Verwende Parameter

MasterChief_88 26. Jan 2010 17:31

Re: SQL - Anweisung - Kommatrennung
 
???

nahpets 26. Jan 2010 17:33

Re: SQL - Anweisung - Kommatrennung
 
Hallo,

zeig' uns bitte mal den Inhalt von stringKEY, da der ja Teil des SQL's wird. Da kann noch allerlei an "Strubbel" passieren.

@mkinzler: Wie müssten hier die Parameter aussehen? Eine kommaseparierte Stringliste (unbekannter Größe) bekommt man (glaub' ich) nicht so leicht in Parameter. Grundsätzlich sollte hier sicherlich das Vorgehen nochmal überdacht werden. Und: Prinzipiell sind Parameter die bessere Alternative.

shmia 26. Jan 2010 17:33

Re: SQL - Anweisung - Kommatrennung
 
Parameter funktionieren hier leider nicht.
Man muss sich daher eine Funktion schreiben:
Delphi-Quellcode:
function GetQuotedKommaString(list:TStrings):string;
begin
   Result := '';
   for i:=0 to list.count-1 do
   begin
     if i =0 then
        Result := QuotedStr(list[i])
     else
        Result := Result + ','+QuotedStr(list[i]);
   end;
end;
...
Query.Sql.Text := 'Select * from MYTABLE where KEY in (' + GetQuotedKommaString(liste_dey_keys) + ')';

MasterChief_88 26. Jan 2010 17:50

Re: SQL - Anweisung - Kommatrennung
 
@shmia

funktioniert super!!
Genau das war meine Frage und hab ick gesucht ;)!!!

DANK DIR!! HAT MICH WEIT NACH VORNE GEBRACHT!!

DP-Maintenance 28. Jan 2010 23:03

DP-Maintenance
 
Dieses Thema wurde von "fkerber" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Datenbanken" verschoben.
Da es sich um eine Frage und nicht um ein Code-Snippet handelt, verschiebe ich das mal ;)

webcss 29. Jan 2010 08:16

Re: SQL - Anweisung - Kommatrennung
 
Zitat:

Zitat von shmia
Parameter funktionieren hier leider nicht.
Man muss sich daher eine Funktion schreiben:
Delphi-Quellcode:
function GetQuotedKommaString(list:TStrings):string;
begin
   Result := '';
   for i:=0 to list.count-1 do
   begin
     if i =0 then
        Result := QuotedStr(list[i])
     else
        Result := Result + ','+QuotedStr(list[i]);
   end;
end;
...
Query.Sql.Text := 'Select * from MYTABLE where KEY in (' + GetQuotedKommaString(liste_dey_keys) + ')';

Geht natürlich auch einfacher:
Delphi-Quellcode:
liste_dey_keys.QuoteChar:= '"';
liste_dey_keys.Delimiter:= ',';
Query.Sql.Text := 'Select * from MYTABLE where KEY in (' + liste_dey_keys.DelimitedText + ')';
oder

Delphi-Quellcode:
Query.Sql.Text := 'Select * from MYTABLE where KEY in (' + liste_dey_keys.CommaText + ')';
wobei jeweils jeder einzelne string in der liste mit einem leerteichen abgeschlossen sein muss, also
Delphi-Quellcode:
liste_dey_keys[i]:= 'Feldname' + ' ';


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:28 Uhr.

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