AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL -> Text mit ' einfügen ?
Thema durchsuchen
Ansicht
Themen-Optionen

SQL -> Text mit ' einfügen ?

Ein Thema von HolgerCW · begonnen am 12. Mär 2007 · letzter Beitrag vom 17. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

SQL -> Text mit ' einfügen ?

  Alt 12. Mär 2007, 10:57
Datenbank: ORACLE • Version: 9 • Zugriff über: TDatabase
Hallo zusammen,

ich führe eine Insert-Anweisung so durch:

INSERT INTO Tabelle(Wert) VALUES(''' + Wert + ''') Wenn die Variable Wert jetzt z.B. "An Klas'Kotten 10" annimmt, führt dies zu einem Fehler, da dort das Zeichen ' vorkommt. Wie kann ich dieses abfangen. Wert habe ich als String deklariert.

Gruss

Holger
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: SQL -> Text mit ' einfügen ?

  Alt 12. Mär 2007, 10:59
Hi Holger,

versuch mal:

INSERT INTO Tabelle(Wert) VALUES(' + QuotedStr(Wert) + ')
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#3

Re: SQL -> Text mit ' einfügen ?

  Alt 12. Mär 2007, 11:21
Das hat geklappt. Vielen Dank

Gruss

Holger
  Mit Zitat antworten Zitat
Valeo Pupsus

Registriert seit: 5. Jun 2006
21 Beiträge
 
#4

Re: SQL -> Text mit ' einfügen ?

  Alt 15. Mär 2007, 20:01
Benutzen Parameter bitte. Oracle Shared Pool liebet das.
Delphi-Quellcode:
...
Q.Close;
Q.Clear;
Q.SQL.Text := 'INSERT INTO Tabelle(Wert) VALUES(:pMeineParam)';
Q.ParamByName('pMeineParam').AsString := 'An Klas'Kotten 10';
Q.ExecSQL;
...
[edit=r_kerber]Delphi-Tags eingefügt. Mfg, r_kerber[/edit]
MFG,Val.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: SQL -> Text mit ' einfügen ?

  Alt 15. Mär 2007, 20:28
Also wenn du sowas wie Parameter nutzen kannst, wie "Valeo Pupsus" angesprochen hat, würd ich auch lieber diese nehmen schon aus Sicherheitstechnischen Gründen...

Bye Christian
Christian
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: SQL -> Text mit ' einfügen ?

  Alt 16. Mär 2007, 03:35
Sicherheitstechnisch kann da nicht viel passieren, wenn denn alles stimmt. Allerdings sind Tür und Tor für Fehler weit geöffnet. Valeo Pupsus liefert gleich ein schönes Bsp. Dieses lässt sich sicherlich in der Art nicht compilieren wegen Schreibfehler. Er hat vergessen aus dem ' im String ein '' zu machen. Wäre der Ausdruck syntaktisch zwar korrekt, aber nicht logisch dann kracht es zur Laufzeit umso mehr. Delphi würde bei diesem sinnlosen SQL-String nicht mal meckern :

Q.SQL.Text := 'jhlkkjhjkhkl'; Jetzt wird aber nicht nur ein Feld manuell besetzt, sondern sogar das ganze Insert-Statement. Durch schlichtes Zusammensetzen eines Strings und diesen dann an die DB schicken. Diese Strings werden meistens viel zu lang und deshalb unübersichtlich. Warum werden die (vorhandenen) Methoden von TDataSet nicht benutzt ?

Delphi-Quellcode:
Edit1.Text := 'An Klas''Kotten 10'; // falls Wert von Hand besetzt wird ' -> ''
DS.Insert;
DS.FieldByName('NAME').AsString := Edit1.Text;
.. weitere Felder
DS.Post;
// Commit usw.
Gruß
Hansa
  Mit Zitat antworten Zitat
Valeo Pupsus

Registriert seit: 5. Jun 2006
21 Beiträge
 
#7

Re: SQL -> Text mit ' einfügen ?

  Alt 16. Mär 2007, 09:23
>Hansa
>Er hat vergessen aus dem ' im String ein '' zu machen.
Ja, leider, aber das ist eine Kleinigkeit. Der Sinn im SQL-Statement fuer Oracle Parameter benutzen.
>aber nicht logisch dann kracht es zur Laufzeit umso mehr
Warum?
>Warum werden die (vorhandenen) Methoden von TDataSet nicht benutzt ?
Du kannst dataset nicht brauchen. Du kannst nur insert/update machen brauchen.
MFG,Val.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: SQL -> Text mit ' einfügen ?

  Alt 16. Mär 2007, 09:40
nunja, wenn man direkt Strings von Benutzern per Insert einfügt, sollte man immer ein wenig vorsichtig sein, zumindest bin ich es...
Man weis ja nie wer vor dem Rechner sitzt und da was in die TextBox einklimpert... Stichwort "SQL-Injektion"

IHMO ist man da mit Parametern eigendlich immer auf der sicheren Seite...

Bye Christian
Christian
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#9

Re: SQL -> Text mit ' einfügen ?

  Alt 16. Mär 2007, 09:56
Also... den Beitrag von Hansa halte ich für absoluten Schwachsinn!!!!

ParamByName ist die richtige Lösung und dass man den SQL.Text auf ein INSERT-Statement setzt die beste Lösung. Besser als die von Hansa vorgeschlagene.

Zitat von Hansa:
Sicherheitstechnisch kann da nicht viel passieren, wenn denn alles stimmt. Allerdings sind Tür und Tor für Fehler weit geöffnet. Valeo Pupsus :shock: liefert gleich ein schönes Bsp. Dieses lässt sich sicherlich in der Art nicht compilieren wegen Schreibfehler. Er hat vergessen aus dem ' im String ein '' zu machen. Wäre der Ausdruck syntaktisch zwar korrekt, aber nicht logisch dann kracht es zur Laufzeit umso mehr. Delphi würde bei diesem sinnlosen SQL-String nicht mal meckern :

Q.SQL.Text := 'jhlkkjhjkhkl'; Jetzt wird aber nicht nur ein Feld manuell besetzt, sondern sogar das ganze Insert-Statement. Durch schlichtes Zusammensetzen eines Strings und diesen dann an die DB schicken. Diese Strings werden meistens viel zu lang und deshalb unübersichtlich. Warum werden die (vorhandenen) Methoden von TDataSet nicht benutzt ?

Delphi-Quellcode:
Edit1.Text := 'An Klas''Kotten 10'; // falls Wert von Hand besetzt wird ' -> ''
DS.Insert;
DS.FieldByName('NAME').AsString := Edit1.Text;
.. weitere Felder
DS.Post;
// Commit usw.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: SQL -> Text mit ' einfügen ?

  Alt 16. Mär 2007, 13:01
Zitat von bttb930:
Also... den Beitrag von Hansa halte ich für absoluten Schwachsinn!!!!
Muss man sich sowas hier anhören ? Schweinerei. Du bist bei mir in dieser Frage disqualifiziert. Zum Thema : natürlich soll er "Parameter" verwenden. Streng genommen sind das aber keine. Im konkreten Fall ist FieldByName wohl besser geeignet, weil als Funktionswert ein TField zurückgeliefert wird. Es geht schließlich lediglich um ein Tabellenfeld. Guck dir mal TParamByName genau an. Prinzip ist allerdings dasselbe. Jetzt kommt dann noch so etwas :

Delphi-Quellcode:
Q.SQL.Text := 'INSRT INTO Tabelle(Wert) VALUES(:pMeineParam';
Q.ParamByName('pMeineParam').AsString := 'An Klas'Kotten 10';
Aber Achtung ! Da sind noch zwei neue Fehler eingebaut und Delphi wird die nicht erkennen (können). String ohne Syntaxfehler ist eben String. Anders als der alte Fehler mit den ''. Wird das Dataset allerdings nicht selber von Hand bestückt, sondern per SQL-Generator und notfalls noch von Hand geändert, dann wird ein Fehler schon früh genug bemerkt, sogar ohne zu compilieren (active auf true setzen reicht schon). Danach besteht kein Grund mehr die vorhandenen TDataSet-Methoden wie Insert nicht zu benutzen und sie von Hand in den Source zu schreiben.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:27 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