![]() |
Delphi-Version: XE4
Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Hallo!
Mir ist das heute zufällig aufgefallen:
Delphi-Quellcode:
Kann das noch jemand bestätigen?
// D7
sTest:= 'Hello ''World''!'; // Ausgabe: Hello World! sTest:= 'Hello '''World'''!'; // Ausgabe: Hello 'World'! // DXE4 sTest:= 'Hello ''World''!'; // Ausgabe: Hello 'World'! sTest:= 'Hello '''World'''!'; // Ausgabe: Hello ''World''! Grüße Cody |
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Hallo.
Kann ich nicht bestätigen. In D7 und XE2 ist die Ausgabe jeweils die gleiche. Gruß, Stefan |
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
In DXE6 ist sie verschieden. Also scheint diese Änderung mit XE3 üder XE4 gekommen zu sein.
|
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Zitat:
|
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Also für D7 kann ich das nicht bestätigen
Delphi-Quellcode:
ergibt
showmessage('Hello ''world'' '#13#10' hello '''' World ''''!'
Hello 'World' Hello ''World'' ! bei
Delphi-Quellcode:
meckert er daß er einen nicht abgeschlossenen String hat.
'Hello ''''World'''!';
Gruß K-H |
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Zitat:
|
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Also wenn du wirklich deine Ausgaben hast, dann ist dein D7 kaputt!
Zwei hochkomme hinterheinander ist eine Escape-Sequenz das im String ein hochkomma sein soll. Ähnlich wie in C/C++ das \\. |
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Wegen dem nicht abgeschlossenen String: Mein Fehler, hatte es frei getippt und nicht aus der IDE kopiert. Am eigentlichen Kern der Frage ändert das erstmal nix: In D7 und in DXE4 (oder 3?) ist die Verarbeitung von doppelten bzw. mehrfachen Hochkommas im (hartcodierten) String unterschiedlich.
|
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Zitat:
|
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Also wie war das jetzt?
Delphi-Quellcode:
In Delphi 7 soll nicht das vom Kommentar angezeigt werden und in aktuelleren XEs soll es nun stimmen?
ShowMessage('Hello ''World''!'); // Hello 'World'!
ShowMessage('Hello ''''World''''!'); // Hello ''World''! Für D4 bis XE3 (gerade nochmal in D7 getestet) kann ich das nicht nachvollziehen. Und wenn sich ab XE4 daran was geändert hat, dann würde ich das als Bug einstufen. PS: Den Schreibfehler im ersten Post kannst du ja noch schnell beheben. |
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Zitat:
Code:
das ist korrekt!
''<>"
Gruß K-H |
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
D7 und XE6 bringen beide das korrekte Ergebnis.
|
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Das Einzige, wo ich derartige Probleme kenn', ist bei der Übergabe in Scriptsprachen (z.B. im FastReport) oder in der Stringbehandlung im FinalBuilder, wo es manchmal recht wirr ist, und man kaum mitbekommt wann man wo und warum die Zeichen wie oft maskieren muß, damit 10 Befehle später der richtige String raus kommt.
Ansonsten kann/darf/wird sich so ein fundamentales Verhalten nicht ändern, da sonst alte Codes nicht mehr funktionieren würden. Man stelle sich mal vor was wohl passieren würde, wenn sich in einem SQL-String Dieses verändert, vorallem bei denen, welche nicht parametrisiert arbeiten. |
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Zitat:
Wenn das hier das gewollte richtige Verhalten ist:
Delphi-Quellcode:
dann muss das hier aus unserem D7-Code ursprünglich mal ein Bug gewesen und nie aufgefallen sein:
sTest:= 'Hello ''World''!'; // Ausgabe: Hello 'World'!
sTest:= 'Hello '''World'''!'; // Ausgabe: Hello ''World''!
Delphi-Quellcode:
sTest:= 'Hello ''World''!'; // Ausgabe: Hello World!
sTest:= 'Hello '''World'''!'; // Ausgabe: Hello 'World'! |
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Dann würde ich den Fehler nicht bei Delphi suchen, sondern bei der Datenbank und vorallem bei den Schnittstellenkomponenten.
Die werden dann vermutlich irgendwo einen Bug haben. Wolltest du nicht mal den Tippfehler beheben? Wie erwähnt, zeigt dir der CodeHighlighter, daß der zweite Zeile definitiv falsch ist, welches dir auch der Compiler gern nochmal bestätigen wird. Aus Sicht des Codeparsers, ist das hier korrekt, wenn man es auf den "String" bezieht.
Delphi-Quellcode:
Wenn man jetzt nochmal einen Parser dazwischen schaltet, welcher ebenfalls wieder die Strings entsprechend parst, dann könnte das so aussehen.
sTest:= 'Hello ''World''!'; // im String: Hello 'World'!
sTest:= 'Hello ''''World''''!'; // im String: Hello ''World''! (einmal ein Parser nach Delphi-Standard und einer nach C-Standard ... auf Seite der Datenbank meist das Letztere)
Delphi-Quellcode:
sTest:= 'SELECT ''Hello ''''World''''!'''; // im Query: SELECT 'Hello ''World''' => im DB-Feld: Hello 'World'!
sTest:= 'SELECT ''Hello \''World\''!'''; // im Query: SELECT 'Hello \'World\'' => im DB-Feld: Hello 'World'! |
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Verwendest Du keine parametrisierten SQL-Statements? Damit würde das ganze Geraffel ersatzlos entfallen.
|
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Zitat:
|
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Zitat:
Delphi-Quellcode:
QuotedStr
|
AW: Änderungen bei Hochkommas in Strings zwischen D7 und XE4?
Zitat:
Punkt 2: Kann der dortige Client nicht. Punkt 3: Das Problem war ja nicht auf SQL-Statements beschränkt sondern auf sämtliche hartcodierte Strings. Aber das hat sich ja heute Morgen auf ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 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