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
 
EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#13

AW: Delphi xe2 und #39 =ZWEI Hochkommas

  Alt 5. Okt 2012, 21:01
Jede Datenbank reagiert anders. Nun dreht es sich hier um MySQL. Ok kleinens tutorial, Männers.

Ihr könnt weder x ' zu euren Strings hinzufügen noch diese weglassen, es sei den es sind soganante Identifier.

Zurück zum Thema:

Du willst das ' oder mehrere ' ein einem String speichern und das nicht via Parameter sondern in einer selbst assemblierten Abfrage.

prinzipiel kannst du einen String nur mit #39+String+#39 versehen ABER alle dazwischen liegenden #39 MUSST du ESCAPEN. Sonst kommt MySQL beim splitten deiner Query mit den Tokens durcheinander. MySQL bietet dafür functionen an, die das für dich tun und du mußt nur noch den #39 drumherum setzen. Zeos bietet hierfür die function EscapeString(Value: String): String an. Falls du jedoch die möglichkeit hast direkt mit deiner libmysql zu arbeiten, sollte dir die function mysql_escape_string(PTo, PFrom: PAnsiChar; Len: ULong): ULong; weiterhelfen.

Das problem, welches du hier anschneidest ist weitaus größer als du denkst. Alle diese Datenbanken haben ein unterschiedliches Escaping verhalten mit den jeweils unterschiedlichen CharacterSets. Den Vogel schießt da meines Erachtens nach PostgreSQL ab.

Also grundsätlich HÄNDE weg von AnsiQuotedStr oder QuotedStr! Was die Pascal Compiler verstehen heist NICHT das es die Datenbank versteht.

Nächstes Problem wäre zum Beispiel dieser String '''abc\''abc''', da nun auch der Backslash beim escapen eine enorme Rolle spielt

Fazit: Solltest du explizit nicht wissen, was in deinem String enthalten ist, laß die Datenbank das escapen übernehmen, was Parameterisierte Queries automatisch für dich tun.

dein #39Test#39 String müßte (hoffe das ist jetzt vollkommen richtig) also wie folgt behandelt werden:
select * from tabelle1 where feld1='#39+'\'+#39+'text+'\'+#39+#39 quasi OHNE Pascal Quotes '\'text\''

Wenn das nun alles zu kompliziert wird: Benutze Paramter!

Michael
  Mit Zitat antworten Zitat
 


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