AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-Abfrage mit Sonderzeichen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Abfrage mit Sonderzeichen

Ein Thema von djmasi · begonnen am 17. Jul 2004 · letzter Beitrag vom 17. Jul 2004
Antwort Antwort
djmasi

Registriert seit: 9. Jun 2004
Ort: Leipzig
105 Beiträge
 
Delphi 7 Enterprise
 
#1

SQL-Abfrage mit Sonderzeichen

  Alt 17. Jul 2004, 14:08
Hallo Leute,

sitze gerade an ner kleinen DB (Firebird). Meine Abfrage funktionieren eigentlich wunderbar, ausser die Abfragebedingung enthält Sonderzeichen wie z.B. ein '.

Delphi-Quellcode:
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';
  ...
Das ist ein Teil meiner Abfrage, die ich dynamisch an ein TpFIBDataSet sende. Aufgerufen wird das ganze hier:
Delphi-Quellcode:
  if Node.Parent = NdArtists then
  begin
    PGenre.Hide;
    PQuery.Align := alClient;
    DoQuerySong('ARTIST.ARTIST', Node);
    PQuery.Show;
    Exit;
  end;
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?

Danke
Thomas Maßmann
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#2

Re: SQL-Abfrage mit Sonderzeichen

  Alt 17. Jul 2004, 14:17
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.

  'where '+ Field + ' = "' + Node.Text + '"' + Order ; Ist wirklich etwas leidlich...

Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
djmasi

Registriert seit: 9. Jun 2004
Ort: Leipzig
105 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: SQL-Abfrage mit Sonderzeichen

  Alt 17. Jul 2004, 14:24
Normalerweise sollte es so gehen, aber nach Deinem Vorschlag bekam ich die angehängte Fehlermeldung
Miniaturansicht angehängter Grafiken
error_205.jpg  
Thomas Maßmann
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: SQL-Abfrage mit Sonderzeichen

  Alt 17. Jul 2004, 14:28
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)
  Mit Zitat antworten Zitat
djmasi

Registriert seit: 9. Jun 2004
Ort: Leipzig
105 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: SQL-Abfrage mit Sonderzeichen

  Alt 17. Jul 2004, 15:00
Also hab das mit den Params ausprobiert - ohne Erfolg

Delphi-Quellcode:
  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;
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
Thomas Maßmann
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: SQL-Abfrage mit Sonderzeichen

  Alt 17. Jul 2004, 15:29
Tausch mal die SQL-Zuweisung und die Parameterzuweisung

Delphi-Quellcode:
  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;
Ohne SQL-Anweisung kann es auch keine Parameter geben.
  Mit Zitat antworten Zitat
djmasi

Registriert seit: 9. Jun 2004
Ort: Leipzig
105 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: SQL-Abfrage mit Sonderzeichen

  Alt 17. Jul 2004, 15:34
Ach man manchmal könnte ich mich selber...

Mit etwas Verstand hätte man das ja sehen müssen. Naja bei 35° sollte man doch lieber am See sein...
Also danke nochmal für die Hilfe
Thomas Maßmann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 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