Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Speichern von Datenfeldern mit Anführungszeichen im Text... (https://www.delphipraxis.net/17211-speichern-von-datenfeldern-mit-anfuehrungszeichen-im-text.html)

mgalli 1. Mär 2004 12:44


Speichern von Datenfeldern mit Anführungszeichen im Text...
 
hallo,

mein problem ist eigentlich recht simpel zu beschreiben und ich denke es müsste ständig auftauchen. dennoch konnte ich weder hier im forum noch per google irgendwelche infos dazu finden???

da mich nun das gefühl beschleicht ich stelle mich dabei einfach nur ziemlich dämlich an, wollte ich's vorab erwähnt haben :?

sobald ich ein datenfeld aktualisieren oder neu anlegen möchte welches ein einziges " anführungszeichen enthält oder eine ungrade anzahl an ' beeinflusst das direkt meinen code. soll heissen, z.b. ein anführungszeichen in einem edit-feld das ich auslese wirkt sich gleich auf meinen sql-befehl aus und beendet diesen z.b. mittendrin. das dann fehlermeldungen wie "typ für feld x unbekannt" oder "rechtes anführungszeichen fehlt"...

als beispiel:

Code:
QueryEinzelfelder.sql.clear;
QueryEinzelfelder.SQL.Text := 'INSERT INTO einzelfelder(id,typ,beschreibung,aktiv,text,bemerkungen,timestamp) VALUES ("", "' + combobox1.Text + '", "' + edit2.Text + '", "' + feld_aktiv + '", "' + memo2.Text + '", "' + memo1.Text + '", NOW())';
QueryEinzelfelder.ExecSQL;

bin ratlos und vor allem für jeden tipp dankbar...

gruß

mgalli

MarcoWarm 1. Mär 2004 13:35

Re: Speichern von Datenfeldern mit Anführungszeichen im Text
 
so weit ich weiß sollte man bei insert-statements einfache Hochkommas benutzen - vielleicht liegts daran

versuch mal

'INSERT INTO einzelfelder(id,typ) VALUES ('''', ''' + AnsiReplaceStr(Edit1.Text,'''','''''') + ''')';

wie in Delphi so muß auch in SQL ein einfaches Hochkomma verdoppelt werden. Schau mal in der Delphi Hilfe unter "Zeichen-Strings" nach

Ciao

Marco

barnti 1. Mär 2004 13:56

Re: Speichern von Datenfeldern mit Anführungszeichen im Text
 
Hi,

die Funktion 'QuotedStr' könnte Dir weiterhelfen.

Gruß,

Barnti

DelphiDeveloper 1. Mär 2004 14:03

Re: Speichern von Datenfeldern mit Anführungszeichen im Text
 
dafür gibt es in der unit sysutils
die function quotedstr
z.b.

quotedstr(edit1.text)

Robert_G 1. Mär 2004 14:08

Re: Speichern von Datenfeldern mit Anführungszeichen im Text
 
Für bessere Übersicht/Performance kann ich da nur die Verwendung von Parametern empfehlen:
Delphi-Quellcode:
With ADOQuery Do
Begin
  SQL.Text :=
    'Insert Into EinzelFelder' + #10 +
    '  (Typ, Beschreibung, Aktiv, Text, Bemerkungen, Timestamp)' + #10 +
    'Values' + #10 +
    '  (:i_Typ,' + #10 +
    '   :i_Beschreibung,' + #10 +
    '   :i_Aktiv,' + #10 +
    '   :i_Text,' + #10 +
    '   :i_Bemerkungen,' + #10 +
    '   :i_TimeStamp)';
  // mit Prepared wird das Statement nach SQL-Variablen (Parametern) durchsucht
  Prepared := True;
  Parameters.ParamByName('i_Typ').Value         := ComboBox1.Text;
  Parameters.ParamByName('i_Beschreibung').Value := Edit2.Text;
  Parameters.ParamByName('i_Aktiv').Value       := Feld_Aktiv;
  Parameters.ParamByName('i_Text').Value        := Memo2.Text;
  Parameters.ParamByName('i_Bemerkungen').Value := Memo1.Text;
  Parameters.ParamByName('i_TimeStamp').Value   := Now();
  ExecSQL;
End;
Da ID bei dir anscheinend durch einen Trigger in der DB gesetzt wird, musst du es auch nicht in deine Spaltenliste aufnehmen.

p.s.:
Control-Bezeichnungen wie: ComboBox1, Edit1,Memo2,... sorgen dafür, dass du deinen Code in 2 Wochen genau Durchlesen musst um zu wissen was du da eigentlich machen wolltest.
Bei aussagekräftigen Bezeichnungen reicht meistens ein kurzes "Überfliegen".

Edit: Delphi-SchlussTag gesetzt

APP 1. Mär 2004 15:13

Re: Speichern von Datenfeldern mit Anführungszeichen im Text
 
Hallo Robert,
ich wollte Dich schon länger mal fragen, warum Du Deine Zeilenumbrüche bei den SQL-Anweisungen nur mit #10 machst?
Ich persönlich nehme (wohl aus Gewohnheit) immer #13#10, soweit ich weiß ist #10 ja aus der Unix-Welt, oder?

Robert_G 1. Mär 2004 15:31

Re: Speichern von Datenfeldern mit Anführungszeichen im Text
 
In Oracle ist ein #13#10 nicht zulässig, da man mit einem simplen #10 ein Zeichen/Zeile einspart.
(Bei Zugriffen von außerhalb der DB geht auch CrLf, wird aber vom ADO / ODBC Treiber in Lf übersetzt)
Da es in bisher jeder DB funktioniert hat, habe ich mir das angewöhnt.

In meiner Oracle IDE habe ich einen Code Formatter und kann eigene Special-Copy-Definitionen schreiben, eine davon sieht zum Bleistift so aus: (hat einen Großteil des Codes oben generiert).

Code:
;PL/SQL Developer SpecialCopy definition
;<LINE_1> for first line
;<LINE_*> for all other lines
;<LINE_N> for last line
;
With ADOQuery Do
Begin
  SQL.Text :=
    '<line_1>' + #10 +
    '<line_*>' + #10 +
    '<line_n>';
  Prepared := True;
  Parameters.ParamByName('XYZ').Value := ABC;
  ExecSQL/Open;
End;
Edit: Tippfehler

APP 1. Mär 2004 16:49

Re: Speichern von Datenfeldern mit Anführungszeichen im Text
 
Hallo Robert,
danke für Deine Erklärungen, ich benutze auch die DOA-Kompos
von Allroundautomations. Den PL/SQL Dev. setze ich nur sporadisch ein,
das "SpecialCopy" kannte ich noch gar nicht! :firejump:

Ich habe jetzt bei meinen Soßen nachgeschaut, wenn ich DOA verwende
nutze ich immer Sql.Add('sql-befehl') und nicht Sql.Text,
daher ist mir das mit dem nicht erlaubten #13#10 auch nie aufgefallen :oops:.

Robert_G 1. Mär 2004 17:04

Re: Speichern von Datenfeldern mit Anführungszeichen im Text
 
@mGalli
Ich hoffe doch, das dein Problem geklärt ist, auch wenn es etwas abseits wurde

Nochmal OT :roll:
Der PL/SQL Dev. ist so ziemlich die genialste DB-Oberfläche, die mir unter die Augen gekommen ist.
Du kannst auch direkt den SQL-Code zwischen einer OracleQuery in Delphi und dem TestWindow hin&her schieben.
Hast du die 2 PlugIn-Delphi-Projekte gesehen (unter ..\PLSQL Developer\PlugInDoc\). Das ist mal eine PlugIn-Doku!!!

Hammurabi 28. Nov 2005 11:16

Re: Speichern von Datenfeldern mit Anführungszeichen im Text
 
leider wurde hir nicht geantwortet wie das problem gelöst wurde, weil ich habe das gleiche und schon fast alles probirt :cry:
Delphi-Quellcode:
Form1.Query1.SQL.Add
('INSERT INTO Artikelliste
(Artikel_Nummer,Artikel,Hersteller,Hersteller_Nummer,EAN_Code,Warengruppe,Nettopreis_EUR,Status,Beschreibung)
VALUES
('+QuotedStr(text[1])+','+QuotedStr(text[2])+','+QuotedStr(text[3])+','+QuotedStr(text[4])+','+QuotedStr(text[5])+','+QuotedStr(text[6])+','+QuotedStr(text[7])+','+QuotedStr(text[8])+','+QuotedStr(text[9])+')');
auf den feldern steht:
text[1]:='20259';
text[2]:='Geh K Ext. 5,25" MULTICASE CA-800B2 IDE=>USB2.0 (Lü)';
text[3]:='Multicase';
text[4]:='ME-320U2';
text[5]:='-';
text[6]:='Gehäuse';
text[7]:='46,46';
text[8]:='Auf Lager';
text[9]:='Geh MULTICASE 5,25&quot; USB 2.0

Multicase Hotline : 02131-66191-30

- inkl. internen Netzteil
- ME-320 Series<br'+' />- Kunststoff Geh&auml;use
- Ali-Chipssatz ( bis 300GB )


Irrt&uuml;mer und technische &Auml;nderungen vorbehalten';

ich habe schon versucht einzelne text[x] einfach mit '-' zu füllen um zu testen welcher string das problem macht hat aber nichts geholfen


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 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