Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi String eintragen der Apostroph enthält (https://www.delphipraxis.net/168396-string-eintragen-der-apostroph-enthaelt.html)

Satyr 18. Mai 2012 16:46

Datenbank: SQLite • Version: 3 • Zugriff über: ASQL

String eintragen der Apostroph enthält
 
Guten Abend,

ich stehe ein wenig auf dem Schlauch.
Ich habe ein Programm das ein Mail System "simuliert". Es arbeitet also als Mail System, die Mails sind aber keinen echten Mails.
Dazu nutze ich eine SQLite Datenbank um die Mails (welche auch vom Programm generiert werden können) speichert. Mit virtuellem Absender und Datum. Dazu habe ich mir eine Procedure geschrieben:

Delphi-Quellcode:
procedure addMail(abs: String; txt: String);
var
datum: String;
begin
datum := FormatDateTime('dd.mm.yyyy', Now);

 fuunc.ASQLite3Query1.SQL.Clear;
 fuunc.ASQLite3Query1.SQL.Add('INSERT INTO mails (absender, mail, datum) VALUES ('''+abs+''', '''+txt+''', '''+datum+''')');
 fuunc.ASQLite3Query1.ExecSQL;
end;
Funktioniert fast perfekt. Aufgerufen wird es mit:

Delphi-Quellcode:
func.addMail('Hans Meier', 'Text');
Mein Problem ist nun, das es den SQL Befehl zerhaut, wenn im Text oder Absender ein ' vorkommt. Kein Problem, dachte ich und lasse alle ' durch '' ersetzen. Aber dann funktioniert meine String Übergabe nicht mehr weil Delphi '' schon selbst nutzt.
Kann ich da irgendwas einfaches machen? Bestimmt, ich komme nur grad nicht drauf *grml*.

Gruß,
Andreas

implementation 18. Mai 2012 16:52

AW: String eintragen der Apostroph enthält
 
Zitat:

Aber dann funktioniert meine String Übergabe nicht mehr weil Delphi '' schon selbst nutzt.
Hä? Das passiert doch zur Laufzeit, oder nicht? :gruebel:

Luckie 18. Mai 2012 16:52

AW: String eintragen der Apostroph enthält
 
Forensuche:; http://www.delphipraxis.net/111378-q...im-string.html

Pentium 80486 18. Mai 2012 16:54

AW: String eintragen der Apostroph enthält
 
---

Satyr 18. Mai 2012 17:01

AW: String eintragen der Apostroph enthält
 
Zitat:

Zitat von implementation (Beitrag 1167138)
Zitat:

Aber dann funktioniert meine String Übergabe nicht mehr weil Delphi '' schon selbst nutzt.
Hä? Das passiert doch zur Laufzeit, oder nicht? :gruebel:

Ja.. aber ich habe z.B. viele englische Texte. Dann übergebe ich beispielsweise als txt "No, this isn''t true"... Das lässt sich kompilieren aber ich kann es nicht mit obiger Procedure in die Datenbank schreiben, weil SQLite sich dann an dem ' von isn't stört.

jfheins 18. Mai 2012 17:01

AW: String eintragen der Apostroph enthält
 
Du könntest es mal mit Parametern probieren.
Das ist nicht nur sicherer, sondern umgeht auch solche Probleme mit Quotes ;-)

http://www.mail-archive.com/sqlite-u.../msg27004.html

Satyr 18. Mai 2012 17:07

AW: String eintragen der Apostroph enthält
 
Zitat:

Zitat von jfheins (Beitrag 1167143)
Du könntest es mal mit Parametern probieren.
Das ist nicht nur sicherer, sondern umgeht auch solche Probleme mit Quotes ;-)

http://www.mail-archive.com/sqlite-u.../msg27004.html

Das ist mir eig. in der Logik zu "kompliziert", weil ich viel mit PHP arbeite und da Params nicht gewöhnt bin *g*.
Aber ich tüftel dann mal da rum, danke :).

Edit:
@Luckie
Danke, das hatte ich schon gefunden. Aber so wie ich das lese, löst das nicht mein Problem... (oder ich verstehe es falsch).

p80286 18. Mai 2012 17:26

AW: String eintragen der Apostroph enthält
 
soo kompliziert ist das auch nicht:
Delphi-Quellcode:
fuunc.ASQLite3Query1.SQL.Add('INSERT INTO mails (absender, mail, datum) VALUES (:abs_txt,:txt_txt,:datum_txt)');
je nachdem mit welcher Schnittstelle Du arbeitest vaariiert die Parameterübergabe etwas:
Delphi-Quellcode:
fuunc.ASQLite3Query1.Parameter.ParameterbyName('txt_txt').asstring:=MeinText;
fuunc.ASQLite3Query1.Parameter.ParameterbyName('abs_txt').asstring:=MeinABS;
fuunc.ASQLite3Query1.Parameter.ParameterbyName('datum_txt').asstring:=MeinDatum;
ggf. müsste da statt .asstring .value stehen und parameters könnten auch params heißen. schau mal nach.

Gruß
K-H

Namenloser 18. Mai 2012 17:36

AW: String eintragen der Apostroph enthält
 
Du musst, wenn du nicht mit Parametern arbeitest, die Strings aber unbedingt escapen, da man sonst sehr leicht SQL-Injections machen kann! Wenn du dies tun würdest, hättest du auch das Problem mit dem Apostroph nicht.

Was unter Delphi die Standard-Methode zum escapen ist, weiß ich nicht, vielleicht ist
Delphi-Quellcode:
QuotedStr
ja schon die Lösung.

Würde dir aber auch eindeutig zu der Parameter-Variante raten... damit bist du zu 100% sicher unterwegs und gewinnst außerdem eine Menge Übersicht.

Satyr 18. Mai 2012 17:38

AW: String eintragen der Apostroph enthält
 
Zitat:

Zitat von p80286 (Beitrag 1167150)
soo kompliziert ist das auch nicht:
Delphi-Quellcode:
fuunc.ASQLite3Query1.SQL.Add('INSERT INTO mails (absender, mail, datum) VALUES (:abs_txt,:txt_txt,:datum_txt)');
je nachdem mit welcher Schnittstelle Du arbeitest vaariiert die Parameterübergabe etwas:
Delphi-Quellcode:
fuunc.ASQLite3Query1.Parameter.ParameterbyName('txt_txt').asstring:=MeinText;
fuunc.ASQLite3Query1.Parameter.ParameterbyName('abs_txt').asstring:=MeinABS;
fuunc.ASQLite3Query1.Parameter.ParameterbyName('datum_txt').asstring:=MeinDatum;
ggf. müsste da statt .asstring .value stehen und parameters könnten auch params heißen. schau mal nach.

Gruß
K-H

Danke, soweit bin ich langsam. Mit .value funktioniert es wie es soll *s*.
Allerdings nur ein Mal. Wenn ichs dann direkt wieder versuche, bekomme ich ne kryptische Zugriffsverletzung.
Durch das "free" im finally Part, dürfte doch aber nichts im Speicher hängen bleiben, oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 Uhr.
Seite 1 von 2  1 2      

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