AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Speichern von Datenfeldern mit Anführungszeichen im Text...
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von mgalli · begonnen am 1. Mär 2004 · letzter Beitrag vom 28. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
mgalli

Registriert seit: 16. Sep 2003
10 Beiträge
 
Delphi 7 Enterprise
 
#1

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

  Alt 1. Mär 2004, 12:44
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
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Speichern von Datenfeldern mit Anführungszeichen im Text

  Alt 1. Mär 2004, 13:35
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
Marco Warm
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Speichern von Datenfeldern mit Anführungszeichen im Text

  Alt 1. Mär 2004, 13:56
Hi,

die Funktion 'QuotedStr' könnte Dir weiterhelfen.

Gruß,

Barnti
  Mit Zitat antworten Zitat
DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: Speichern von Datenfeldern mit Anführungszeichen im Text

  Alt 1. Mär 2004, 14:03
dafür gibt es in der unit sysutils
die function quotedstr
z.b.

quotedstr(edit1.text)
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Speichern von Datenfeldern mit Anführungszeichen im Text

  Alt 1. Mär 2004, 14:08
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
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Speichern von Datenfeldern mit Anführungszeichen im Text

  Alt 1. Mär 2004, 15:13
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?
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: Speichern von Datenfeldern mit Anführungszeichen im Text

  Alt 1. Mär 2004, 15:31
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
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Speichern von Datenfeldern mit Anführungszeichen im Text

  Alt 1. Mär 2004, 16:49
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!

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 .
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: Speichern von Datenfeldern mit Anführungszeichen im Text

  Alt 1. Mär 2004, 17:04
@mGalli
Ich hoffe doch, das dein Problem geklärt ist, auch wenn es etwas abseits wurde

Nochmal OT
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!!!
  Mit Zitat antworten Zitat
Hammurabi

Registriert seit: 9. Nov 2005
25 Beiträge
 
#10

Re: Speichern von Datenfeldern mit Anführungszeichen im Text

  Alt 28. Nov 2005, 11:16
leider wurde hir nicht geantwortet wie das problem gelöst wurde, weil ich habe das gleiche und schon fast alles probirt
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:26 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