![]() |
Datenbank: SQLITE • Version: 3.32.2 • Zugriff über: Firedac
Fehlermeldung bei Eintrag in DB
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich möchte Daten aus Exceltabellen auslesen und in eine DB schreiben. Das Auslesen klappt, nur beim Einfügen in die DB kommt es immer wieder zu Fehlermeldungen. Es sieht so aus, als wenn die Inhalte aus manchen Feldern Zeichen enthalten, die Firedac "falsch" interpretiert. Ich möchte die Daten aus den Excelfeldern genauso in eine DB schreiben, dass ich gegebenenfalls wieder eine Exceltabell mit selbem Inhalt erzeugen kann. Außerdem möchte ich aber auch in den Daten in der DB suchen.
Delphi-Quellcode:
Ich habe letztens gelesen, dass man QuotedStr nicht nutzen soll. Aber wie kann ich die Daten so in die DB schreiben, dass es keine Fehlermeldung gibt?
SqlState := Format('INSERT INTO %s (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) VALUES(%d, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);',
[TableNameKANummer, feldKANummer, ............... QuotedStr(KAdata.McTyp), ............... |
AW: Fehlermeldung bei Eintrag in DB
Moin...:P
Zitat:
Delphi-Quellcode:
Qry.SQL.Text := 'insert into Blubb (Bla) values(:Bla)';
Qry.ParamByName('Bla').AsString := Feldwert; |
AW: Fehlermeldung bei Eintrag in DB
Zitat:
|
AW: Fehlermeldung bei Eintrag in DB
Und QuoteStr solltest du unbedingt vergessen.
Irgendwo hat jede DB-Komponente eine Quote/Escape-Funktion, welche man unbedingt nutzen sollte. (wenn es nicht anders geht und man auf Biegen und Brechen SQLs manuell bauen will) QuoteStr ist ausschließlich für PascalStrings da, nach der Syntax von Pascal/Delphi-Quellcode, aber diese SQL-Syntax ist etwas komplett Anderes. Tipp: Komm mal auf soeine "doofe" Idee, wie einer unserer Kunden, welche in alphanumerischen Artikelnummern nun auch noch ein ' verwenden wollten. Die SQL-Params waren nicht das Problem, da wir (meistens) kein QuoteStr mehr für DB-Aufgaben nutzen, aber bei Übergabe ans Python, da rauchte QuoteStr wunderschön ab. |
AW: Fehlermeldung bei Eintrag in DB
Zitat:
|
AW: Fehlermeldung bei Eintrag in DB
Alle DBs haben APIs für Array-Parameter.
OK, in vielen DB-Komponenten ist das leider nicht eingebaut. Na gut, in dem Fall bauen wir auch den String zusammen, geben ihn mit ParamByName als ein String rein und zerlegen ihn dann db-seitig in ein Array/Rows oder er geht via MakroByName rein, aber da sind es meistens bloß Integer-Arrays und wenn nicht, dann wird wenigstens die "richtige" API verwendet. z.B. pg_escape_string/pg_escape_literal oder TPgTextConverter.EscapeString |
AW: Fehlermeldung bei Eintrag in DB
Zitat:
Man baut SQLs NIEMALS als String zusammen und schon gar nicht, fügt man die Daten dort ein! Das ist ein NOGO! Du erzeugt damit die Möglichkeit SQL-Injections zu machen. Das solltest du ganz dringend mal erforschen und nachlesen! SQL-Injections werden übrigens viel eingebaut, weil viele das nicht richtig über Parameter lösen. Dadurch ist SQL-Injection eine der größten Sicherheitsprobleme, welche eingebaut werden: siehe ![]() |
AW: Fehlermeldung bei Eintrag in DB
Zitat:
Da ich nicht so viel mit DB'S arbeite, habe ich mir den String zusammengebaut, damit ich sehe, was an die DB übergeben wird. An SQL Injection hatte ich dabei nicht gedacht. Die Programme, wo ich DB's benutze, helfen mir bei meiner Arbeit. Jemand anderes wüsste garnicht, was man damit machen kann. Aber man kann ja trotzdem von euch Profis lernen. |
AW: Fehlermeldung bei Eintrag in DB
Nicht nur absichtliche SQL-Injections.
Schon alleine eine "falsche" Kodierung/Escaping können das SQL zerstören und das Programm wunderschön abrauchen lassen. Siehe mein Beispiel mit ' in Texten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:31 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