![]() |
Re: Hochkomma entfernen -> INSERT INTO-Problem
Danke für die Tips,
werde ich gleich umsetzen. Bei Xong-Code kommt aber der Fehler bei:
Delphi-Quellcode:
-> Inkompatible Typen 'Char' und 'string'
Spalten.QuoteChar := '';
|
Re: Hochkomma entfernen -> INSERT INTO-Problem
Zitat:
Delphi-Quellcode:
LG,
Spalten.QuoteChar := ' ';
Xong |
Re: Hochkomma entfernen -> INSERT INTO-Problem
Alles klar,
eine Frage habe ich noch. Kann man TStrings nur mit Add füllen oder kann man die auch in etwa so übergeben: [Variable1,Variable2,...] ? Müsste sonst nämlich alle Aufrufe der Procedure Datensatz_insert komplett ändern. Gruss Holger |
Re: Hochkomma entfernen -> INSERT INTO-Problem
Versuch es mal mit Array of String (ohne Gewähr).
|
Re: Hochkomma entfernen -> INSERT INTO-Problem
Zitat:
Folgende Prozedur hat den gleichen Kopf, wie du ihn vorgegeben hattest:
Delphi-Quellcode:
LG,
procedure Datensatz_insert (Werte:String; Spalten:String; Tabelle:String);
var i: Integer; sValues,sWerte,sSpalten: TStrings; begin sValues := TStrings.Create; sWerte := TStrings.Create; sSpalten := TStrings.Create; sSpalten.Delimiter := ','; sSpalten.QuoteChar := ' '; sValues.Delimiter := ','; sValues.QuoteChar := ' '; sSpalten.CommaText := Spalten; sWerte.CommaText := Werte; for i:=0 to sSpalten.Count-1 do sValues.Add(':' + sSpalten[i]); with DM_Query_XYZ do begin QueryInsert.Close; QueryInsert.Add('INSERT INTO ' + Tabelle); QueryInsert.Add('(' + sSpalten.DelimitedText + ')'); QueryInsert.Add('VALUES(' + sValues.DelimitedText + ')'); QueryInsert.Prepare; for i:=0 to sSpalten.Count-1 do QueryInsert.ParamByName(sSpalten[i]).Asstring := sWerte[i]; QueryInsert.Execute; end; Xong |
Re: Hochkomma entfernen -> INSERT INTO-Problem
Wenn der Debugger diese zeile erreicht:
Delphi-Quellcode:
kommt die Fehlermeldung: Abstrakter Fehler ???
sSpalten.CommaText := Spalten;
So sieht mein Spaltenstring aus: 'STOER_ART_ID,ANWENDER_ID, DATUM, MELDER, ORT_ID, ... ' |
Re: Hochkomma entfernen -> INSERT INTO-Problem
versuchs mal mit DelimitedText statt CommaText.
|
Re: Hochkomma entfernen -> INSERT INTO-Problem
Zitat:
Vielleicht klappt sowas mit Datenbankclients die es nicht interessiert, daß alle Befehle fehlerfrei ausgeführt werden sollten, bevor sie den nächsten ausführen. Aber bei Oracle sehe ich diese Gefahr nicht. Angenommen es soll folgendes passieren:
SQL-Code:
Wenn jetzt der Tabellenname durch eine Variable gefüllt wird, die das hier beinhaltet
update customer set name = 'Willi';
SQL-Code:
dann würde man ja dieses hier bekommen:
; DROP TABLE nameeinerwichtigentabelle; --
SQL-Code:
Und das gibt dann eine Exception mit einem Oraclefehler (Nummer weiss ich nicht, aber sinngemäß kommt da: Befehl nicht korrekt beendet, und der Rest wird gar nicht mehr ausgeführt. Ich weiss nicht wie das MySQL und Konsorten handhaben, aber wenn die soo leicht hinters Licht zu führen sind...hats vielleicht doch einen Grund Geld für ein DBMS zu zahlen.
update ; DROP TABLE nameeinerwichtigentabelle; -- set name = 'Willi';
Selbstverständlich sollte man lieber mit Parametern arbeiten, wegen Übersichtlichkeit und auch aus Performancegründen (Querys, bei denen sich nur die Inhalte der Paramter ändern werden schneller ausgeführt, als wenn man die gleiche Query mit unterschiedlichen Inhalten absendet. Sherlock |
Re: Hochkomma entfernen -> INSERT INTO-Problem
Und wenn man statt des Tabellennamens den Wert hernimmt? Bei fehlender Prüfung und genügend krimineller Energie bekommt man dann so etwas hin:
SQL-Code:
update customer set name = 'Willi';DROP TABLE WichtigeTabelle;update customer set name = 'Wuppdi';
|
Re: Hochkomma entfernen -> INSERT INTO-Problem
Aaaah, Rückzug!
Aber ne Abmahnung oder Kündigung gibts dafür trotzdem nicht, denn der Chef hat noch weniger Ahnung davon als ich :D Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:54 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-2025 by Thomas Breitkreuz