Autor Beitrag
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Mo 21.04.14 09:50 
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
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.04.14 11: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Mo 21.04.14 11: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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Mo 21.04.14 14: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"';

Für diesen Beitrag haben gedankt: rushifell
rushifell Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Mo 21.04.14 23: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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Di 22.04.14 01: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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 22.04.14 08:56 
user profile iconrushifell hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: rushifell
rushifell Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Mi 23.04.14 17: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