![]() |
SQL Statement speichern
Hallo,
bislang habe ich SQL Statements immer in der Registry gespeichert. Nun würde ich sie gerne in einer .ini ablegen. Allerdings funktioniert das einlesen sehr schlecht. Entweder es fehlen Teile des Statements oder die Formatierung ist komplett falsch. Wie speichert ihr SQL Statements? Es gibt sicherlich besserer Methoden. Danke |
AW: SQL Statement speichern
Moin...8-)
Mein Favorit ist: Speicherung der SQL in Ressourcen...:thumb: Tool dazu: ![]() |
AW: SQL Statement speichern
Nutze nun einfach Memo.Lines.LoadFromFile bzw. Memo.Lines.SaveToFile.
Ich denke damit klappt es gut. Trotzdem Vielen Dank. |
AW: SQL Statement speichern
Zitat:
![]() |
AW: SQL Statement speichern
SQL-Injection hat lediglich was mit dem Aufbau des SQL zu tun und weniger wie und wo es gespeichert wird. Ein schlampig geschriebenes SQL wird auch nicht dadurch sicherer dass man es als Ressource in der Exe speichert.
|
AW: SQL Statement speichern
Zitat:
Ich speichere SQL-Statements vollständig parametrisiert auch als Ressource. |
AW: SQL Statement speichern
Zitat:
Bei SQL-Injection geht es aber gar nicht um die Manipulierung der SQL-Anweisung an sich, sondern um die Verfälschung durch bösartige Eingaben, ob die nun vom User am lokalen Rechner, einer importierten Datei oder über die Eingabe auf einer Webseite kommen. Das Speichern der SQL-Anweisung in einer INI-Datei öffnet also mitnichten einer SQL-Injection Tür und Tor. Das ist nur von der SQL-Anweisung selbst abhängig - der Speicherort hat damit überhaupt nichts zu tun. |
AW: SQL Statement speichern
Unsere App benutzt zwar intensiv DBs, aber ich habe direkt recht selten mit SQL zu tun. Interessehalber die Frage: wieso sollte man SQL Statements in der Registry oder in einer Ini speichern? Ich kenne das halt so, dass diese in den DB-Komponenten direkt gespeichert ist oder der SQL-Code mittels Delphi-Code zuusammengebaut wird.
|
AW: SQL Statement speichern
Zitat:
|
AW: SQL Statement speichern
Zitat:
Dazu kommt, dass diese Statements im DFM stehen. Versuche mal nach Schlüsselbegriffen im Statement zu suchen. Innerhalb von Delphi geht das gar nicht (@Uwe: Ich kenne da zumindest nichts) und wenn man "von außen" sucht, findet man oft die Begriffe nicht, weil im DFM mittendrin umgebrochen wird. Manche Statements müssen tatsächlich im Source zusammengebaut werden, aber die meisten sind relativ statisch, wenn man weiß, wie man mit SQL umgeht und müssen nur gut parametrisiert werden. Es gibt auch genügend Möglichkeiten solche Sachen in der Datenbank abzulegen (Stored Procedures, User Defined Functions, Views, etc.). Eine Ablage in INI-, SQL-Dateien oder in der Registry halte ich (ist meine ganz persönlich Ansicht!) für unprofessionell. Wie weiter oben schon geschrieben, lege ich die Statements als Ressource oder in einer Datenbank ab. Den Vorteil des Live-Zugriffs zur Designzeit, wie Uwe Raabe geschrieben hat, kann man trotzdem erhalten und sogar noch optimieren. Man nimmt dafür einfach ein SQL-Statement für die DB-Komponente, welches zur Laufzeit nie aufgerufen wird. Mit einer passenden Where-Bedingung erhält man 0 Datensätze, dafür aber alle notwendigen Felder ohne große Laufzeit der SQL-Abfrage. Zur Laufzeit werden dann die "echten" Statements geladen. |
AW: SQL Statement speichern
Zitat:
Delphi-Quellcode:
und
const LineLength = 64;
Delphi-Quellcode:
:wall:
BytesPerLine = 32;
|
AW: SQL Statement speichern
Ich für meinen teil speicher die SQLs direkt in der Datenbank ab, weil ich auf dem Weg extrem gut customizen kann.
Wenn ein Kunden in der Auswahlmaske andere Felder sehen will, die auch noch extra aus anderen Tabellen per join geholt werden müssen, die beim anderen Kunden evtl gar nicht existieren, kann das grid da für die auswahl einfach den dafür passend benannten sql aus der sql tabelle holen und dann eben anzeigen was da gewünscht ist. Bei Verfügbarkeit (wie in firebird) könnten das dann auch gleich views oder SPs sein. Und aus der Exe heraus könnte der Default sql selbst in die Datenbank geschrieben werden, wenn da noch keine angepasste Version zu finden ist. Bei bedarf können dann die gleichen Grids sogar userbezogen andere sqls aus der datenbank holen so das ein Mitarbeiter in der Produktion bei der Auftragsübersicht ganz andere Daten sieht als einer in der Buchhaltung. |
AW: SQL Statement speichern
Noch ein Vorteil dieses Vorgehens:
Wird die Datenbank gewechselt oder müssen unterschiedliche Datenbanksysteme unterstützt werden, so kann, durch "einfachen" Austausch der SQLs in der Datenbank, die Software an die unterschiedlichen Besonderheiten der SQL-Syntax der diversen Datenbanksysteme angepasst werden, wie da z. B. wären: Top 100 <-> First 100 <-> Limit 100 <-> RowNum <= 100, ... Das Programm selbst muss dafür nicht modifiziert bzw. in jeweils angepassten Versionen vorgehalten und gepflegt werden. |
AW: SQL Statement speichern
Zitat:
Man muss halt immer das Gesamtsystem betrachten um die am besten geeignete Lösung zu finden. |
AW: SQL Statement speichern
Wenn man SQL eh schon in der DB speichert, dann vielleicht direkt Views, die per se in der DB liegen.
Felder (fields) pro Maske mit Sichtbarkeit, Editierbarkeit usw., natürlich auch aus der DB, mglw. lokal gecached. Und natürlich die From Clause (also Viewnamen), ggF. Filtervorgaben. Das vereinfacht Änderungen, zentral, oftmals ohne Anwendungsänderung und -Deployment. Es erhöht die Flexibilität und Manipulation geht nur über Datenbankzugriff. Wirklich nett ist das mit RDBMS, deren Views ohne weiteres Editierbar sind (Die View Logik muss das natürlich erlauben, tut sie aber meist und wenn nicht, ist es vermutlich ein Report Datensatz, der eh nicht editierbar ist). Apropos, Reports, Exports usw., die auf Views basieren, lassen sich natürlich ebenfalls bequem und zentral anpassen, korrigieren, erweitern. |
AW: SQL Statement speichern
Hallo,
ich als Entwickler der App bin der Chef über sämtliche SQL-Queries, nix wird zwischengespeichert! SQL-Fehler App V2 wird geladen, nutzt "optimierte" Query. Punkt! |
AW: SQL Statement speichern
Zitat:
|
AW: SQL Statement speichern
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 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