![]() |
Datenbank: Alle • Zugriff über: BDE
Wie fluchtet man Hochkomma im SQL?
Genau wie der Der titel meine Frage .
Wie fluchtet man Hochkomma im SQL?
Delphi-Quellcode:
Also wie Speicher ich 'uwe' statt uwe?
Folgender Datensatz soll eingefügt werden
q.SQL.TEXT := 'Insert into Bla (TExtfeld1,textfeld2) (' + QuotedStr(' Nickname: ''Otto'' ') + ','+ QuotedStr(' Nickname2: ''Uwe'' ') + ')'; |
Re: Wie fluchtet man Hochkomma im SQL?
Nimm Parameter. Dann ist das Escaping-Problem gelößt - Du brauchst nichts zu escapen.
|
Re: Wie fluchtet man Hochkomma im SQL?
Was soll denn dabei rauskommen. Wieso speicherst du " Nickname: " mit.
Übrigens die korrekte Syntax für Insert lautet
SQL-Code:
insert into Tabelle (F1,F2...) values (V1, V2...)
|
Re: Wie fluchtet man Hochkomma im SQL?
Ja
es geht darum das Alle Strings im Programm gesucht werden und in einer Tabelle gespeichert werden sollen dazu kann ich keine Parameter gebrachen ,weil die ÜbersetzungsUnit schon geschrieben ist. Nun kommt leider in einigen Strings im Programm ein Hochkomma vor |
Re: Wie fluchtet man Hochkomma im SQL?
Lies doch deine Strings in eine Variable, und ersetzte die ' durch '' mit
Delphi-Quellcode:
V := StringReplace (V,'''','''''',[rfReplaceAll]) ;
|
Re: Wie fluchtet man Hochkomma im SQL?
Ja das hatte ich auch gedacht, nur ist unserem 450.000 Zeilen Programm
ab und zu auch mal ein SQL der seine String s und Datums in Doppelhockomma fast. weshalb bereits folgende Schleife aus " "" macht. (kann auch andere Gründe haben)
Delphi-Quellcode:
Hab in PHP Foren von \' gelesen aber das ist wohl
while Pos('"', ts2) > 0 do
begin PosZP := Pos('"', ts2); insert('"', ts2, PosZP); ts := ts + copy(ts2, 1, PosZP + 1); delete(ts2, 1, PosZP + 1); end; weils ein c Dialekt ist oder? |
Re: Wie fluchtet man Hochkomma im SQL?
QuotedStr setzt eine String in hochkomma und verdoppelt ausserdem jedes Hochkomma innerhalb des Strings.
Also alles paletti. Du musst nur korrekten Sourcecode hinschreiben:
Delphi-Quellcode:
text1 := ' Nickname: ''Otto'' ';
text2 := ' Nickname2: ''Uwe'' '; q.SQL.TEXT := 'Insert into Bla (TExtfeld1,textfeld2) Values ('+ QuotedStr(text1) + ','+ QuotedStr(text2) + ')'; q.ExecSQL; |
Re: Wie fluchtet man Hochkomma im SQL?
meinst du das Quotedstring('''');
dem SQL Server '''' übergibt also ein ' innerhalb eines SQL genauso wie in delhi gefluchtet wird in dem er verdoppelt '' wird??? Also 'insert into bla (bla2) Values('' '' '')' das würde ein leerzeichen ein Hochkomma und einleerzeichen in eintextfeld einfügen???? |
Re: Wie fluchtet man Hochkomma im SQL?
Wie wäre es mit dem ASCII Zeichen:
Delphi-Quellcode:
oder eben wie schon angedeutet QuotedStr:
'insert into blabla values ('#39'TEst'#39')';
Delphi-Quellcode:
oder auch ein Formatstring:
'insert into blabla values ('+QuotedStr('TEst')+')';
Delphi-Quellcode:
Format('Insert into blabla values(%s)','Test');
von der 3-fach Angabe von ' halte ich nichts, weil das irgend wann echt nicht mehr lesbar ist. Zudem meiner Meinung ziemlich fehleranfällig... Grüße Lemmy P.S.: Was meinst Du eigentlich mit dem Wort "gefluchtet"? |
Re: Wie fluchtet man Hochkomma im SQL?
Ich denke mit gefluchtet bezieht er sich auf die so geannten Escape-Sequenzen, wie man sie zB bei XML kennt. Ich nutze eigentlich auch immer #39, da ich damals ein Programm übernommen habe wo alles mit ''' etc gelöst war. Ich hab sowas von geflucht!
|
Re: Wie fluchtet man Hochkomma im SQL?
Bei PHP mit MySQL würde man jetzt escapen.
Delphi-Quellcode:
s = "SELECT irgendwas FROM irgendwo WHERE irgendwer=\"na der hier\"";
s = "SELECT irgendwas FROM irgendwo WHERE irgendwer='na der hier'"; s = 'SELECT irgendwas FROM irgendwo WHERE irgendwer=\'na der hier\''; s = 'SELECT irgendwas FROM irgendwo WHERE irgendwer="na der hier"'; Vielleicht hilft dir das weiter Oder du benutzt statt ' die " (falls es deine DB unterstützt) Dann hast du diese Probs nicht ;) |
Re: Wie fluchtet man Hochkomma im SQL?
Zitat:
Dann heisst es bald "Drücken Sie die Flucht-Taste, um das Programm aufzugeben" (Press the ESC-key to quit the program)... Herrlich! Allerdings ist es ein löblicher Versuch, der Veranglifizierung (bruuuhaaa!) der deutschen Sprache entgegenzuwirken! Deine Vorschläge sind ok, nur die Formatanweisung lautet eben
Delphi-Quellcode:
Aber das war ja nur ein Flüchtigkeitsfehler.
Result := Format('Das hier mit Hochkommata : >%s<',[QuotedStr(szFooBar)]);
N.B.: Ich verwende fast ausschliesslich die Format-Anweisung, um SQL-Befehle zusammenzubepseln. Dabei packe ich das SQL-Template in eine lokale (oder globale, je nachdem) Konstante, ungefähr so:
Delphi-Quellcode:
Übersichtlicher geht es kaum (Geschmackssache).
Function MyInsertStmt (Const aParam1, aParam2 : String) : String;
Const szInsertTemplate = 'Insert into MyTable (Col1, Col2) Values (%s,%s)'; Begin Result := Format (szInsertTemplate, [QuotedStr (aParam1), QuotedStr (aParam2)]); End; |
Re: Wie fluchtet man Hochkomma im SQL?
Soso... also gefluchtet kommt dann von flüchten oder eher von fluchen?
Vielleicht ist es aber einfach auch ein Fachbegriff aus der Vermessung der in dem Zusammenhang eigentlich nichts zu suchen hat (Flucht=Linie mehrerer Fluchtstäbe, gefluchtet= mehrere Fluchtstäbe in einer Linie; Fluchtstäbe sind die 2m hohen weiß-rot gefärbten Teile die die Jungs in Tarnkleidung in der Gegend stecken lassen und ziemlich wütend reagieren, wenn man die rauszieht oder umsteckt....). Zitat:
Lemmy |
Re: Wie fluchtet man Hochkomma im SQL?
Zitat:
Die Funktion heisst QuotedStr und nicht QuotedString. @Devilscamp: Die SQL-Syntax verlangt einfache Hochkomma's bei String-Literalen. Dabei sollte man auch bleiben. Auch wenn das DBMS Anführungszeichen erlaubt. Bitte nicht #39 verwenden, um einen String in Hochkommas zu setzen; dafür gibt es QuotedStr. |
Re: Wie fluchtet man Hochkomma im SQL?
Zitat:
"Wie verflucht man Quotes?" Eine Frage, an der schon die Kirche gescheitert ist ... :angel: |
Re: Wie fluchtet man Hochkomma im SQL?
Ähm Fluchten ist der in der Literatur allgemein verwendete Begriff
da es solche krücken wie escapen oder eskeipen oder esceipen im deutschen nicht gibt. Es heist halt fluchten. Hab das jetzt mit doppelten hochkommas gelöst da es innerhalb von einem SQL keine andere möglich keit gibt das zu fluchten . nochmal zur erklärung. folgender Quelltext liegt vor.
Delphi-Quellcode:
Ich habe die Translatestring Funktion hier eingefügt wie an Tausenden anderen stellen.
try
if s <> '' then cbox.Tag:=StrToInt(cbox.Text); except Result:=False; ShowMessage({$IFDEF TRANSLATION}TranslateString{$ENDIF}('Ungültiger Wert im Feld ''')+Lbl+''''); cbox.SetFocus; end; wenn der Text der übergeben ist nicht bekannt ist fügt Translatestring ihn in eine Übersetzungs Tabelle ein. Leider hat nun dieser String Hochkommata im text. es wäre dabei eigal wie diese innerhalb delphi dargestellt sind ob al QuotedStr() oder als #39 etc, denn im Sql tauchen sie ja wieder auf so das das insert nicht klappt weil sie innerhalb des SQLs nicht gefluchtet sind. aber wenn man sie noch einmal verdoppelt sind die innerren Hochkomma aich in SQL gefluchtet und des INSERT Statement funktioniert. und genau das geschieht innerhalb von Translatestring. '#39' bringst in einem SQL nicht da gibt es das einfach nicht nur '''' funktioniert im SQL. |
Re: Wie fluchtet man Hochkomma im SQL?
Kleine Anmerkung noch: Wenn man SQL-Befehle nicht selbst zusammenbastelt, sond z.B. ein ADOCommand nimmt, und die Werte mit Parametern definiert, übernimmt Delphi die ganze Arbeit mit dem fluchten....
SQL-Code:
UPDATE Table Set Name = :MyParam Where Foo = :Bar
|
Re: Wie fluchtet man Hochkomma im SQL?
Zitat:
|
Re: Wie fluchtet man Hochkomma im SQL?
Wenn Du in ein TADOQuery.SQL, TADOCommand.Text oder TADODataset.Text eine 'parametriesierte Query' in dieser Syntax reinschreibst, kannst Du sehr bequem über die Params Eigenschaft (oder Parameters? ist immer Anders ;-), die einzelnen Werte setzen. Das ist insofern bequem, als das man sich nicht über Float-Formate (Decimalpoint!), Datumskonventionen (DD-MM-YY, oder YY/MM/DD ?) und Strings Gedanken machen muss.
Probiers mal aus... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz