![]() |
SQL-Abfrage mit Sonderzeichen
Hallo Leute,
sitze gerade an ner kleinen DB (Firebird). Meine Abfrage funktionieren eigentlich wunderbar, ausser die Abfragebedingung enthält Sonderzeichen wie z.B. ein '. :gruebel:
Delphi-Quellcode:
Das ist ein Teil meiner Abfrage, die ich dynamisch an ein TpFIBDataSet sende. Aufgerufen wird das ganze hier:
procedure TFMain.DoQuerySong(Field: String;Node: TTreeNode);
var SQL: String; begin //main sql query Screen.Cursor := crSQLWait; SQL := 'select * from SONG '; SQL := SQL + 'inner join ARTIST on ARTIST.ID = SONG.ARTIST_ID '; SQL := SQL + 'inner join SONG_DETAIL on SONG_DETAIL.SONG_ID = SONG.ID '; SQL := SQL + 'inner join GENRE on GENRE.ID = SONG.GENRE_ID '; SQL := SQL + 'inner join LANGUAGE on LANGUAGE.ID = SONG.LANGUAGE_ID '; SQL := SQL + 'where '+ Field + ' = ''' + Node.Text + ''' order by SONG'; ...
Delphi-Quellcode:
Wenn aber z.B. ein Artist wie "Lil' Kim" abgefragt wird, ist ja das ' zu viel. Rauslassen kann ich's ja aber auch net. Hat vielleicht jemand 'ne Idee?
if Node.Parent = NdArtists then
begin PGenre.Hide; PQuery.Align := alClient; DoQuerySong('ARTIST.ARTIST', Node); PQuery.Show; Exit; end; Danke |
Re: SQL-Abfrage mit Sonderzeichen
Moin, moin
Du bist völlig in Delphi aufgegangen! Nun ist SQL keine Wirth- oder Borland-Entwicklung, deshalb tausche das ' in der SQL gegen ein " aus.
Delphi-Quellcode:
Ist wirklich etwas leidlich...
'where '+ Field + ' = "' + Node.Text + '"' + Order ;
Grüße // Martin |
Re: SQL-Abfrage mit Sonderzeichen
Liste der Anhänge anzeigen (Anzahl: 1)
Normalerweise sollte es so gehen, aber nach Deinem Vorschlag bekam ich die angehängte Fehlermeldung
:wall: |
Re: SQL-Abfrage mit Sonderzeichen
Das mit den ' als Trenner als Texttrenner für SQL passt schon.
Dein Problem ist eher das ein ' in einem String den String-Abschluß "zerstört". Das kannst Du umgehen, indem Du mit Parametern arbeitest (Oder deinen String "Escapest", ist aber von DB zu DB unterschiedlich). Im Forum findest Du genug beispiele, wenn Du nach SQL + Parameter suchst. Auch bist Du damit gegen SQL-Injection geschützt. Wenn jetzt jemand nach "Text'; DROP TABLE <Deine Tabelle>;" sucht, so hast Du damit evtl. ein größeres Problem. 8) |
Re: SQL-Abfrage mit Sonderzeichen
Also hab das mit den Params ausprobiert - ohne Erfolg :(
Delphi-Quellcode:
Jetzt bekomme ich die Meldung, dass Parameter "search" nicht in DSSong existiert. Ich hab's auch schon davor geschrieben aber das selbe. Im OI von DSSong gibt es keine Params-Eigenschaft. Laut einem Beitrag von Sharky geht es aber so. Hmm
SQL := SQL + 'where '+ Field + ' =:search order by SONG';
with DMMedia.DSSong do begin Close; SelectSQL.Clear; ParamByName('search').AsString := Node.Text; SelectSQL.Add(SQL); Open; |
Re: SQL-Abfrage mit Sonderzeichen
Tausch mal die SQL-Zuweisung und die Parameterzuweisung
Delphi-Quellcode:
Ohne SQL-Anweisung kann es auch keine Parameter geben.
SQL := SQL + 'where '+ Field + ' =:search order by SONG';
with DMMedia.DSSong do begin Close; SelectSQL.Clear; SelectSQL.Add(SQL); ParamByName('search').AsString := Node.Text; Open; |
Re: SQL-Abfrage mit Sonderzeichen
Ach man manchmal könnte ich mich selber... :wall:
Mit etwas Verstand hätte man das ja sehen müssen. Naja bei 35° sollte man doch lieber am See sein... :thuimb: Also danke nochmal für die Hilfe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 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-2025 by Thomas Breitkreuz