Warum ExecSQL?
Du hast aber Glück, dass es hier keinen Fehler gibt ... wird nur sinnlos doppelt ausgeführt, das SELECT.
Dann noch das für
SQL komplett völlig falsche QuoteStr.
Warum nicht als Parameter? Denn mit diesem QuoteStr kann man keine
SQL-Injection verhindern, da es die Pascal-String-Syntax benutzt, anstatt der Syntax für
SQL-Strings.
Ich gebe zu der Code ist alt (Projekt begonnen 2008. Zuvor hatte ich nur wenig Erfahrung mit Delphi 6.
zu dem EXECSQL:
Heisst das, Open führt den Select auch schon aus? bzw. Active := true dann ebenfalls?
Dann noch das für
SQL komplett völlig falsche QuoteStr.
Warum nicht als Parameter?
Ich nutze die Devart Uniconnector komponenten. Ich weiss ehrlich gesagt nicht, wie ich da Parameter einsetzen könnte.
Ich habe mir das SO selber beigebracht; heisst natürlich nicht, dass es so auch richtig ist.
Edit: Ok, hab per Google Beispiele gefunden wie das mit den UniDac Komponenten geht.
Scheint mir aber ein grosser Aufwand den ich hier betreiben muss um alle Abfragen derartig umzubauen
Eine
SQL-Injection will ich nicht verhindern (Ok, falsch ausgedrückt. Ich denke nicht, das hier eine Injektion geschieht. Das macht keiner unserer Mitarbeiter. Ich schätze ich bin auch der einzige dem der Begriff etwas sagt).
Die Werte die hier in einem
Query eingesetzt werden setze bzw. ermittle ich selber. Der Benutzer gibt hier keine Falschen Daten ein.
Und von aussen kann niemand an das Programm ran. Das ist eine Software die ausschliesslich bei uns in der Firma verwendet wird.
PS: Bisher hat das alles so funktioniert. Mit XE3.
Das QuotedStr habe ich dann irgendwann eingeführt als ich mit qry.SQL.Add(...) auf probleme trat wenn ich die Werte mittels fieldname="wert" eingesetzt hatte. durch das QuotedStr wurde dann in der
SQL-Abfrage
feldname='Wert'; so konnte ich die Abfrage dann auch absetzen.
Sicherlich aufwengiger als Parameter zu nutzen; jetzt im nachhinein gesehen sehe ich das auch ein nachdem ich den Thread erstellt habe und Deine Hinweise gelesen habe.
Bei unserer "Dicken" App (200 forms) klappt es auch aktuell. Sicher noch Stellen anzupassen aber Sie läuft zumindest schonmal wieder.
Ich schätze ich hätte in der Vergangenheit öfter mal einen Thread hier erstellen sollen bei Problemen