AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi xe2 und #39 =ZWEI Hochkommas
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi xe2 und #39 =ZWEI Hochkommas

Ein Thema von Ykcim · begonnen am 17. Sep 2012 · letzter Beitrag vom 8. Okt 2012
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#1

AW: Delphi xe2 und #39 =ZWEI Hochkommas

  Alt 5. Okt 2012, 15:53
Zitat:
Da bekomme ich mit Delphi xe2 jetzt nur noch Murks raus, weil irgendwann zwischen TurboDelphi (Delphi 6) und Delphi xe2 die Änderung vollzogen wurde, dass #39 statt einem Hochkomma (') bei Delphi xe2 zwei Hochkommas ('') (kein Gänsfüßchen) auswirft.
Nein, es wurde im Delphi absolut nichts umgebaut.
(höchstens einige Debugtools, ala Variablenanzeigen, wurden überarbeitet und zeigen Vieles jetzt "fehlerfreier" an)

Delphi-Quellcode:
query := 'select * from Tabelle where Feld=''Test''';

Variable := 'Test';
query := 'select * from Tabelle where Feld=''' + Variable + '''';

query := 'select * from Tabelle where Feld='#39 + Variable + #39;
'' (in einem String) und #39 oder #$27, Ord(39) usw. sind grundsätzlich genau das Selbe.
Es sind schon immer Kodierungen, um ein ' darzustellen.
In anderen Sprachen sieht man z.B. stattdessen \' , wo dann \\ für ein \ stünde


Raus kommt hier immer
Code:
select * from Tabelle where Feld='Test'


Wenn möglich solltest du ganz einfach parametrisierte Abfragen verwenden (so wie es schon öfters genannt wurde)
und falls das nicht unterstützt wird, dann das entsprechende "QuoteString", welches im String die ' ergänzt.
z.B. query := 'select * from Tabelle where Feld=' + QuoteString(Variable); Bei einer "ordentlichen" Zugriffskomponente, kommt dann z.B. sowas bei raus
Delphi-Quellcode:
query.Sql.Text := 'select * from Tabelle where Feld = :wert';
query.ParamByName('wert').Value := 'Test';
Wenn dein mySql so arbeitet, wie ich es noch vom PHP+mySQL kenn, dann wohl eher so
Delphi-Quellcode:
query.Sql.Text := 'select * from Tabelle where Feld = ?';
query.Params[0].Value := 'Test';
In dem Parameter können dann soviele Sonderzeichen und vorallem Steuerzeichen drin vorkommen, wie sie wollen.
Bei QuoteString wird davon vieles abgefangen und wenn man das ohne irgendwas selbst zusammenbaut, dann hat man ganz schnell ein rießiges "Sicherheitsproblem".
Stichwort SQL-Injection.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Okt 2012 um 16:02 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi xe2 und #39 =ZWEI Hochkommas

  Alt 5. Okt 2012, 16:30
Hallo,

Danke für die Antworten.

Ich muss glaube ich mal generell etwas erklären: Ich schätze jede Antwort und versuche alle Antworten zu verstehen - über die Erfolgsquote meiner Bemühung sage ich jetzt lieber nichts...
Dazu habt Ihr mir in diesem Forum schon viel zu viel beigebracht, aber wie bereits angedeutet, verstehe ich als Hobbyprogrammierer oft nicht was damit gemeint ist...
So auch mit der Hilfestellung, dass ich QuotedStr() verwenden soll.

Ich verwende keine Komponenten, um auf den MySQL-Server zu zugreifen, da ich keine habe und auch noch nicht geblickt habe, wie ich dann damit umgehen muss. Sorry, aber ich weiß es wirklich nicht und konnte es mir trotz vieler Suchstunden nicht zusammenlesen.

Ich habe eine umfangreiche Anwendung ohne Komponenten seid 1 Jahr im Produktiveinsatz laufen und dachte, dass ich das auch unter xe2-Starter schaffen könnte.

Ich habe in der Liste der überwachten Objekte festgestellt, dass #39='' statt ' ergibt. Ob das jetzt der Wahrheit entspricht, weiß ich nicht. Ich habe eine Screenshot angehängt, auf dem Ihr es sehen könnt.
Wenn ich aber einem Editfeld #39 als Text zuweise, dann kommt wie üblich nur '. Also, ich weiß jetzt nicht, wo der Fehler liegt...

Ich habe festgestllt, dass #34 (Gänsefüßchen) für den MySQL-Server auch in Ordnung zu sein scheint und daher versuche ich es jetzt mal damit.

ABer vielleicht habt Ihr ja auch noch den ein oder anderen Tip für mich.

Vielen Dank

Ykcim
Angehängte Grafiken
Dateityp: jpg #39.jpg (120,1 KB, 27x aufgerufen)
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#3

AW: Delphi xe2 und #39 =ZWEI Hochkommas

  Alt 5. Okt 2012, 16:34
QuotedStr ist eine Funktion, die hat mit Komponenten nichts zu tun und ist weiter vorn sogar verlinkt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi xe2 und #39 =ZWEI Hochkommas

  Alt 5. Okt 2012, 16:48
Zitat:
Ich habe in der Liste der überwachten Objekte festgestellt, dass #39='' statt '
Da hast du etwas falsch geguckt.
Im String ist nur ein ' enthalten, aber es wird dort so dargestellt, wie man es im Quellcode schreiben würde, also '' im String und dazu noch die beiden ' am Anfang und am Ende.

Wären dort wirklich 2 ' dann würdes du '''' sehn, also 'abc''''def' statt dem abc''def welches wirklich im string wäre.
Wie gesagt, die "Darstellung" dessen wurde überarbeitet, was sich wirklich im String befindet.
So werden nun auch gewisse Steuerzeichen ordentlich und vorallem "sichtbar" dargestellt, wie z.B. Tabulatoren und Zeilenumbrüche.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Delphi xe2 und #39 =ZWEI Hochkommas

  Alt 5. Okt 2012, 16:52
Ich habe in der Liste der überwachten Objekte festgestellt, dass #39='' statt ' ergibt. Ob das jetzt der Wahrheit entspricht, weiß ich nicht. Ich habe eine Screenshot angehängt, auf dem Ihr es sehen könnt.
Das die Textdarstellung etwas gewöhnungsbedürftig ist hat sich noch nicht bis zu Embacadingsbums herum gesprochen. (Proportional-Font bei einer Programmieroberfläche brrr)

Aus Deinen Screenshot leite ich hingegen ab, daß Du vollkommen unproblematisch mit Parametern arbeiten könntest.

Gruß
K-H

och mann alle sind schneller als ich

Edith2:
Das "ohne Komponenten" halte ich für ein Gerücht, Zeig doch einmal Deine Uses her.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 ( 5. Okt 2012 um 16:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Delphi xe2 und #39 =ZWEI Hochkommas

  Alt 5. Okt 2012, 16:14
Wenn ich eine Abfrage mache, könnte sie wie folgt aussehen:


query:='select * from Tabelle where Feld=''Test'';
Wenn deine Quelltextzeile so aussieht sollte es mindestens eine Fehlermeldung geben, da die Anzahl der Hovhkommata nicht stimmt!

query:='select * from Tabelle where Feld=''Test'''; ergibt
select * from Tabelle where Feld='Test' eine Möglichkeit mit Parametern könnte so aussehen:
Delphi-Quellcode:
query:='select * from Tabelle where Feld=:myfeld;
.params.Parambyname(
'myfeld').asstring:='Test'; {oder so ähnlich}
ergibt
select * from Tabelle where Feld='Test' und jetzt begründe bitte einmal warum die vielen bisher gezeigten Möglichkeiten für Dich nicht in Frage kommen.
Ohne das haben wir keine Möglichkeit Dir weiter zuhelfen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 ( 5. Okt 2012 um 16:20 Uhr) Grund: Ergänzung
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:42 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 by Thomas Breitkreuz