AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi String eintragen der Apostroph enthält

String eintragen der Apostroph enthält

Ein Thema von Satyr · begonnen am 18. Mai 2012 · letzter Beitrag vom 18. Mai 2012
Antwort Antwort
Seite 1 von 2  1 2   
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#1

String eintragen der Apostroph enthält

  Alt 18. Mai 2012, 16:46
Datenbank: SQLite • Version: 3 • Zugriff über: ASQL
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:

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
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#2

AW: String eintragen der Apostroph enthält

  Alt 18. Mai 2012, 16:52
Zitat:
Aber dann funktioniert meine String Übergabe nicht mehr weil Delphi '' schon selbst nutzt.
Hä? Das passiert doch zur Laufzeit, oder nicht?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: String eintragen der Apostroph enthält

  Alt 18. Mai 2012, 16:52
Forensuche:; http://www.delphipraxis.net/111378-q...im-string.html
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Pentium 80486
(Gast)

n/a Beiträge
 
#4

AW: String eintragen der Apostroph enthält

  Alt 18. Mai 2012, 16:54
---
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: String eintragen der Apostroph enthält

  Alt 18. Mai 2012, 17:01
Zitat:
Aber dann funktioniert meine String Übergabe nicht mehr weil Delphi '' schon selbst nutzt.
Hä? Das passiert doch zur Laufzeit, oder nicht?
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

AW: String eintragen der Apostroph enthält

  Alt 18. Mai 2012, 17:01
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
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: String eintragen der Apostroph enthält

  Alt 18. Mai 2012, 17:07
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).

Geändert von Satyr (18. Mai 2012 um 17:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: String eintragen der Apostroph enthält

  Alt 18. Mai 2012, 17:26
soo kompliziert ist das auch nicht:
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

AW: String eintragen der Apostroph enthält

  Alt 18. Mai 2012, 17:36
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 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.
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: String eintragen der Apostroph enthält

  Alt 18. Mai 2012, 17:38
soo kompliziert ist das auch nicht:
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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:27 Uhr.
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