![]() |
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:
Funktioniert fast perfekt. Aufgerufen wird es mit:
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;
Delphi-Quellcode:
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.
func.addMail('Hans Meier', 'Text');
Kann ich da irgendwas einfaches machen? Bestimmt, ich komme nur grad nicht drauf *grml*. Gruß, Andreas |
AW: String eintragen der Apostroph enthält
Zitat:
|
AW: String eintragen der Apostroph enthält
|
AW: String eintragen der Apostroph enthält
---
|
AW: String eintragen der Apostroph enthält
Zitat:
|
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 ;-) ![]() |
AW: String eintragen der Apostroph enthält
Zitat:
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). |
AW: String eintragen der Apostroph enthält
soo kompliziert ist das auch nicht:
Delphi-Quellcode:
je nachdem mit welcher Schnittstelle Du arbeitest vaariiert die Parameterübergabe etwas:
fuunc.ASQLite3Query1.SQL.Add('INSERT INTO mails (absender, mail, datum) VALUES (:abs_txt,:txt_txt,:datum_txt)');
Delphi-Quellcode:
ggf. müsste da statt .asstring .value stehen und parameters könnten auch params heißen. schau mal nach.
fuunc.ASQLite3Query1.Parameter.ParameterbyName('txt_txt').asstring:=MeinText;
fuunc.ASQLite3Query1.Parameter.ParameterbyName('abs_txt').asstring:=MeinABS; fuunc.ASQLite3Query1.Parameter.ParameterbyName('datum_txt').asstring:=MeinDatum; Gruß K-H |
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
![]() Was unter Delphi die Standard-Methode zum escapen ist, weiß ich nicht, vielleicht ist
Delphi-Quellcode:
ja schon die Lösung.
QuotedStr
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. |
AW: String eintragen der Apostroph enthält
Zitat:
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 11:12 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