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:
somit vermeide ich, dass ich *-zig "SELECT"-Anweisungen schreibe.
Table.Sql.text := ('Select * from MYTABLE where KEY in (' + QuotedStr(stringKEY));
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 ;)! |
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) + ')');
|
Re: SQL - Anweisung - Kommatrennung
also wenn ich das so klammer wie du, dann erhalt ich folgende Fehlermeldung:
Delphi-Quellcode:
muss sagen, die fehlermeldung sagt mir gar nix ^^
arithmetic exception, numeric overflow, or string truncation
|
Re: SQL - Anweisung - Kommatrennung
und wenn ich das so mach:
Delphi-Quellcode:
da haut er mir raus, dass er mit dem ) nichts anfangen kann ^^
Table.Sql.text := ('Select * from MYTABLE where KEY in (' + stringKEY + ')' );
schon komisch! |
Re: SQL - Anweisung - Kommatrennung
Verwende Parameter
|
Re: SQL - Anweisung - Kommatrennung
???
|
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. |
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) + ')'; |
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
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 ;) |
Re: SQL - Anweisung - Kommatrennung
Zitat:
Delphi-Quellcode:
oder
liste_dey_keys.QuoteChar:= '"';
liste_dey_keys.Delimiter:= ','; Query.Sql.Text := 'Select * from MYTABLE where KEY in (' + liste_dey_keys.DelimitedText + ')';
Delphi-Quellcode:
wobei jeweils jeder einzelne string in der liste mit einem leerteichen abgeschlossen sein muss, also
Query.Sql.Text := 'Select * from MYTABLE where KEY in (' + liste_dey_keys.CommaText + ')';
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