Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fragerunde. Wie macht ihr das? Speichern von Objekten (https://www.delphipraxis.net/193480-fragerunde-wie-macht-ihr-das-speichern-von-objekten.html)

Mokus 4. Aug 2017 14:28

Delphi-Version: 10 Berlin

Fragerunde. Wie macht ihr das? Speichern von Objekten
 
Hallo zusammen,

ich versuche gerade in meiner Firma das OOP denken weiter nach vorne bringen.
und komme jetzt an einen Punkt wo ich die Inspiration von anderen Entwicklern brauche.
Die Frage ist , wie speichert ihr Objekte in die Datenbank?
Hier gilt das Motto, so wenig SQL in Quellcode, dafür haben wir Datenbankobjekte. ( bspw. SP's ).
Diese Meinung kann ich verstehen, so kamen auch Protest als ich meine Klassen mit einen zusammengebauten SQL speichere wie
Delphi-Quellcode:
var
sSQL : string
begin

ssql := ' insert into TAB ( COL_1, COL_2) values ( %d , %d ) ';

ssql := format(ssql , [ OBJ.PROP_1 , OBJ.PROP_2]);

{ nun würde ich das SQL ausführen }
nun aber eine SP zu schreiben die so viele Parameter hat wie die Klasse properties und dann auch nur ein insert macht, find ich halt zu viel Overhead...
Daher wie macht ihr das ?
Allgemeingültige SP die das Objekt serialisiert bekommt und sich das SQL selbst zusammbaut ?
baut ihr das SQL wie oben im Beispiel zusammen und schießt es aus Delphi einfach ab ?
Ist meine Meinung vielleicht falsch und es ist wirklich besser eine Stored Procedure mit X Parameter zu erstellen?

oder habt ihr komlett andere Varianten ... ?
Wie fremde Frameworks etc. ?
bin über alles Dankbar !!

Gruß

Neutral General 4. Aug 2017 14:35

AW: Fragerunde. Wie macht ihr das? Speichern von Objekten
 
Du kannst auch in so einem SQL Parameter verwenden anstelle von Format.
Das ist übersichtlicher, weniger fehleranfällig und auf jeden Fall sicherer.

Dann hast du 1 SQL was du sogar Prepare();en kannst und dann änderst du für jedes Objekt was du speichern willst nur die Werte der Parameter.
Delphi-Quellcode:
query.SQL.Text := 'insert into TAB ( COL_1, COL_2) values ( :col1 , :col2 )';
query.Prepare;

for i:= 1 to 1000 do
begin
  query.ParamByName('COL1').AsString := obj[i].Prop1;
  query.ParamByName('COL2').AsInteger := obj[i].Prop2;
  query.ExecSQL;
end;

Wosi 4. Aug 2017 15:15

AW: Fragerunde. Wie macht ihr das? Speichern von Objekten
 
Hast du dir schon mal mORMot angeschaut? https://synopse.info/fossil/wiki/Synopse+OpenSource

Hier gibt es ein paar Infos zu ORM mit mORMot: https://www.slideshare.net/ArnaudBou...rom-sql-to-orm

freimatz 4. Aug 2017 15:33

AW: Fragerunde. Wie macht ihr das? Speichern von Objekten
 
Was ist SP?

BTW: OOP ist kalter Kaffee ;-) schau dir mal DDD an. (https://de.wikipedia.org/wiki/Domain-driven_Design) ok, inzwischen auch schon alt :oops:

Edit: ach vermutlich SP = Stored Procedure.

Ja ORM ist das Richtige (https://de.wikipedia.org/wiki/Objekt...nale_Abbildung)

Wir haben da etwas selbstgemachtes. Das ist tief unten drin. Mit der DB kommt man so gut wie nie in Berührung.

Mokus 4. Aug 2017 15:45

AW: Fragerunde. Wie macht ihr das? Speichern von Objekten
 
Erklärung SP

DDD müsste man aber von anfang an strikt durchführen,
eine Vorhandene Sortware nun mit ~ 3,5 mio. Zeilen strikst du mal nich so eben um. ;)

@Wosi
das wäre ein Framework wovon ich nachts Träume wenn wir das benutzen würden, :D
mir war nicht bekannt dass es sowas auch für Delphi gibt.
Ich werde mir das aufjedenfall mal anschauen, vielleicht kann man das mal vorstellen ... ! :)

( trotzdem freue ich mich auf weitere Post :D )

Stevie 4. Aug 2017 16:15

AW: Fragerunde. Wie macht ihr das? Speichern von Objekten
 
Egal was, aber bitte zumindest die SQL Statements parametrisieren - Stichwort: SQL Injection

Mokus 4. Aug 2017 16:47

AW: Fragerunde. Wie macht ihr das? Speichern von Objekten
 
Ach Stevie, das ist ein bekanntest Problem was ignoriert wird ;)
Das ist schon bei unserem ersten Suchfeld möglich :D

Luckie 4. Aug 2017 19:36

AW: Fragerunde. Wie macht ihr das? Speichern von Objekten
 
Eventuell db4o https://de.wikipedia.org/wiki/Db4o ?

Ghostwalker 5. Aug 2017 07:49

AW: Fragerunde. Wie macht ihr das? Speichern von Objekten
 
Zitat:

Zitat von Stevie (Beitrag 1378102)
Egal was, aber bitte zumindest die SQL Statements parametrisieren - Stichwort: SQL Injection

Zitat:

Zitat von Mokus (Beitrag 1378105)
Ach Stevie, das ist ein bekanntest Problem was ignoriert wird ;)
Das ist schon bei unserem ersten Suchfeld möglich :D

Bei welcher Firma arbeitest du ? :twisted::twisted::twisted::twisted::twisted:


Mal Spaß beiseite, wer die Gefahr von SQL-Injections ignoriert, sollte sich ernsthaft überlegen ob
er den Beruf noch weiter ausüben sollte (will jetzt nicht von "standrechtlich Erschießen" und ähnlichem
reden.:) ).

haentschman 5. Aug 2017 08:02

AW: Fragerunde. Wie macht ihr das? Speichern von Objekten
 
Moin...:P
Zitat:

Die Frage ist , wie speichert ihr Objekte in die Datenbank?
Wie schon erwähnt, gibt es einige externe Frameworks. Die haben alle einen Einarbeitungsaufwand. Es gibt abere auch eine Möglichkeit über den klassischen Weg mit einfachen Interfaces. :thumb: Dafür habe ich ein Tutorial geschrieben. http://www.delphipraxis.net/193418-%...datenbank.html
Zitat:

Hier gilt das Motto, so wenig SQL in Quellcode,
Das ist nicht das Wichtigste. Vielmehr sollten die SQL nicht über den gesamten Quelltext verteilt sein. :warn:
Wenn du auch das gesamte SQL (Query, SP usw.) aus dem Quelltext auslagern willst, dann kann ich dir das Tutorial von MaBuSE empfehlen. http://www.delphipraxis.net/49505-sq...einbinden.html
Zitat:

Egal was, aber bitte zumindest die SQL Statements parametrisieren
Da kommst nicht drumherum. 8-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz