Entwickler-Ecke
Datenbanken - Nicht erlaubte Zeichen sinnvoll maskieren?
rushifell - Mo 21.04.14 08:50
Titel: Nicht erlaubte Zeichen sinnvoll maskieren?
Hallo,
ich nutze SQLITE3. Strings, die Hochkommata enthalten, werden nicht akzeptiert. Außerdem speichere ich z.B. den Inhalt einer Memo-Komponente über Memo.Text als TEXT. Es funktioniert, aber können dabei Probleme durch die Steuerzeichen entstehen?
Gibt es weitere Zeichen, die bei der Eingabe nicht erlaubt sind?
Wie geht ihr beim Vorkommen von Hochkommata vor? Sollte man die Eingabe einfach nicht erlauben oder die Hochkommata durch ein anderes Zeichen ersetzen? Danke :-)
Viele Grüße
Delete - Mo 21.04.14 10:20
Was heißt "werden nicht akzeptiert"? Von wem werden sie nicht akzeptiert? Wie äußert sich das?
Welche Steuerzeichen befinden sich in Memo.Txt? Was sollen die steuern?
Einfach mal die relevanten Code-Stellen zeigen, dann kan man dir vielleicht weiterhelfen ...
rushifell - Mo 21.04.14 10:38
Hier mal ein Beispiel:
Wenn ich "Satz mit Hochkommata" einfügen möchte, erscheint folgende Fehlermeldung:
| Error hat folgendes geschrieben: |
Error executing SQL.
Error[1]: SQL Error or missing database
"Insert INTO VokabelTabelle (WortFremd,WortDeutsch) VALUES (""Satz mit Hochkommata"","": Near "Satz":Syntax error.
|
Die Fehlermeldung liegt an den Hochkommata, da SQL
" zur Begrenzung der Strings verwendet. Wenn ich
Satz ohne Hochkommata eingebe funktionierts.
Die Eingabe erfolgt über eine Edit-Komponente. Wenn der Benutzer auf die Idee kommt, irgendetwas mit Hochkomma einzugeben, gibts die Fehlermeldung. Generell kann ich den Fehler einfach abfangen und vom Benutzer verlangen, andere Satzzeichen zu verwenden. Das wäre die einfachste Lösung. Mich würde nur interessieren, wie ihr das handhabt.
Beim Memo.Text handelt es sich einfach um den Inhalt einer Memo-Komponenten mit Zeilenumbruch. Die Frage die sich mir hier stellt ist, ob ich das einfach per INSERT als Text speichern kann oder ob ich ein BLOB-Feld nutzen muss. Beim RichEdit brauche ich wegen der Formatierung ein BLOB-Feld. Das mit dem Memo funktioniert, deshalb ist es grundsätzlich möglich. Ich möchte nur nicht, dass später in meinem Programm Probleme auftreten.
mandras - Mo 21.04.14 13:59
Versuch es doch mit Parametern:
X.SQL.Text := 'Insert INTO VokabelTabelle (WortFremd,WortDeutsch) VALUES (:WF,:WD)'
X.Params.ParamByName ('WF').AsText := 'something';
X.Params.ParamByName ('WD').AsText := '"Satz mit Hochkommata"';
rushifell - Mo 21.04.14 22:01
Wow, vielen Dank mandras :-)
So funktionierts einwandfrei, ...warum auch immer. Außerdem ist die Eingabe über die Parameter wesentlich bequemer.
Viele Grüße
mandras - Di 22.04.14 00:02
Grinsel..
"Warum auch immer"...
Liegt daran, daß die jeweiligen Bibliotheken bei Delphi das so erledigen.
Lach nicht, da ich leider auch öfters mit PHP unterwegs bin würde ich mir derartiges auch dort wünschen.
Nersgatt - Di 22.04.14 07:56
rushifell hat folgendes geschrieben : |
| So funktionierts einwandfrei, ...warum auch immer. Außerdem ist die Eingabe über die Parameter wesentlich bequemer. |
Nicht nur das. Wenn die Abfrage mehrfach ausgeführt wird, ist das meinstens auch signifikant schneller.
Du erstellst dann nur einmal die Abfrage und füllst jeweils die Parameter mit anderen Werten. So muss die Datenbankengine die Abfrage nur einmal auf korrekte Syntax prüfen und parsen. Gerade, wenn man z.B. eine große Anzahl Datensätze importiert, dann ist das spürbar schneller.
Aus dem Grund sollte man meiner Meinung nach diese Arbeitsweise grundsätzlich verwenden.
rushifell - Mi 23.04.14 16:59
Danke :-)
In dem Wrapper, den ich nutze funktioniert das wohl mit PrepareSQL und ReleaseSQL, konnte ich bisher jedoch noch nicht erfolgreich testen.
Viele Grüße
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!