AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank
Tutorial durchsuchen
Ansicht
Themen-Optionen

[Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

Ein Tutorial von haentschman · begonnen am 27. Jul 2017 · letzter Beitrag vom 24. Mai 2018
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.166 Beiträge
 
Delphi 12 Athens
 
#1

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 27. Jul 2017, 18:15
Wenn ich das richtig sehe hast du keine Interaktion drin, die Controls werden gefüllt.
Der Spass fängt aber dann an wenn du ein Grid oder Listview scrollen und editieren möchtest,
wenn Master-Detail sich synchronisieren müssen, korrekt die Daten in die DB zurückschreiben, etc..
Das müsste ja meiner Meinung nach auch gekapselt werden, das will man nicht immer wieder neu schreiben müssen.
Ich sehe das so das es eine Art "Bindings" in irgendeiner Form geben müsste, zum einen für die Daten (so wie du es hast z.B.), zum anderen eben diese Events (abhängig vom jeweiligen Control
und "Style" der Bedienung).

Wie würdest du denn so etwas bei deinem Vorschlag lösen ?

Rollo
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 27. Jul 2017, 18:29
Danke für das Tutorial.
Da es nicht nur ORM sondern auch Interfaces behandelt, oder besser gesagt auch zeigt wie die Benutzung aussehen kann, finde ich es wirklich gut.
Klar gibt es da viele verschiedene Ansätze, aber um aufzuzeigen wie man etwas auch anders machen kann finde ich es toll.
Was mit immer wieder auffällt in unserer "Delphi" Welt, ist das neue Ansätze es hier wirklich schwer haben.
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 27. Jul 2017, 19:08
Erst einmal vielen Dank!

Für den Datenbank-Teil hätte ich noch die eine oder andere Idee, aber das wären nur Detailänderungen, die mir pers. besser in den Kram passen würden. Den Interface-Teil habe ich zwar verstanden, glaube ich, aber der Vorteil erschließt sich mir nicht so recht. Mit einem TDataModule kommt man (ich) genauso weit, einziges Problem(?) für jede DB brauch ich ein eigenes Modul aber ein MyDM.GetPersonList(pl:tPersonlist) sollte immer die (formal) gleiche Liste liefern.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#4

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 28. Jul 2017, 06:10
Moin...
Zitat:
Danke für das Tutorial.
Zitat:
Erst einmal vielen Dank!
...Dankeschön.

Zitat:
Der Spass fängt aber dann an wenn du ein Grid oder Listview scrollen und editieren möchtest,
Zitat:
Wie würdest du denn so etwas bei deinem Vorschlag lösen ?
Persönlich habe ich mich entschieden, daß niemals in der Listview editiert wird. Das hatte den Grund, daß mehr Informationen zu editieren waren als Spalten optisch zur Verfügung standen. Zum Editieren blende ich einfach eine modale Form über die Listview ein. Ich nenne sie InlineEditor. (siehe Bild 1) Damit kann ich beliebige Informationen editieren und die Controls im InlineEditor selbst, auch wegen der Optik, festlegen. Dem InlineEditor wird das Objekt, welches am Listvieweintrag hängt, übergeben...usw. (siehe Bild 2) Am Objekt kann man sehen, daß das mit dem Dataset nicht übersichtlich möglich ist. Das Objekt würde eigentlich aus mindestens 3 Datasets bestehen.
Zitat:
Das müsste ja meiner Meinung nach auch gekapselt werden, das will man nicht immer wieder neu schreiben müssen.
Der Kreativität sind keine Grenzen gesetzt. In meinen Produktivprojekten ist einiges als gemeinsamer Code ausgelagert um nicht alles neu schreiben zu müssen. Beispiel. Der InlineEditor. Den leite ich von der Basis, mit aller Logik für die Anzeige etc., ab.
...aber das würde zu weit führen und hat nichts mit dem Thema zu tun.
Zitat:
aber das wären nur Detailänderungen, die mir pers. besser in den Kram passen würden.
Der Kreativität sind keine Grenzen gesetzt. Du kannst das Prinzip für deine Bedürfnisse anpassen.
Zitat:
sollte immer die (formal) gleiche Liste liefern.
...das ist korrekt.
Zitat:
Mit einem TDataModule kommt man (ich) genauso weit, einziges Problem(?) für jede DB brauch ich ein eigenes Modul
1. Wenn eh keine Querykomponenten auf dem DataModule liegen kannst du dir das auch sparen. Prinzipiell kommst du auch mit einem DataModule für eine Datenbank zurecht. Wenn du ein neues DBMS dazunimmst, kommst du um eine Abstraktion nicht herum.
Delphi-Quellcode:
// Klassendefinition oder so ähnlich
TDataBaseAbstract = class
public
  procedure Blubb; abstract;
end;
...
TDataBase1 = class(TDataBaseAbstract)
public
  procedure Blubb; override; // die spezielle Implementierung für Blubb
end;
...
TDataBase2 = class(TDataBaseAbstract)
public
  procedure Blubb; override; // die spezielle Implementierung für Blubb
end;

// Instanz
FDatabase: TDataBaseAbstract;
...
FDatabase := TDataBase2.Create; // oder so...
...die Vorteile von Interfaces wurde schon an anderer Stelle diskutiert. http://www.delphipraxis.net/192364-t...nterfaces.html
Miniaturansicht angehängter Grafiken
inlineeditor.png   objekt.png  

Geändert von haentschman (28. Jul 2017 um 15:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 28. Jul 2017, 12:06
Prinzipiell kommst du auch mit einem DataModule für eine Datenbank zurecht. Wenn du ein neues DBMS dazunimmst, kommst du um eine Abstraktion nicht herum.
Danke, das hätte man mir ja auch gleich so erklären können, die ODenke hab ich eben immer noch nicht ganz verinnerlicht.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#6

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 28. Jul 2017, 12:49
Hallöle...
Zitat:
Danke, das hätte man mir ja auch gleich so erklären können
Das wichtige ist nicht das Interface. Ein Datenmodul tut es auch. Sondern die Verlagerung aller SQL Statements in eine Unit ist Voraussetzung. Dann kann man "schnell" wechseln...
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 23. Mai 2018, 23:41
Hallo, Vorweg: Das Tutorial ist gut gelungen auch wenn da mehr Code gezeigt wird als das Code erklärt wird.
Neugierig wie ich bin plus DB Neuling habe ich mir das Projekt geladen und beim Start der .exe erscheint das (gekürzt aufs wesentliche):
Zitat:
executable : Tutorial.exe
exec. date/time : 2017-07-27 14:01
version : 1.0.0.0
compiled with : Delphi 10.1 Berlin
madExcept version : 4.0.16
callstack crc : $0c5e2cf1, $23db6709, $23db6709
exception number : 1
exception class : EAccessViolation
exception message : Zugriffsverletzung bei Adresse 007FF967 in Modul 'Tutorial.exe'. Lesen von Adresse 00000008.

main thread ($11f8):
007ff967 +00b Tutorial.exe Logic.Base 143 +2 TLogic.GetCustomerList
00800a6e +026 Tutorial.exe FormMain 210 +2 TfoMain.FormShow
0065a34d +015 Tutorial.exe Vcl.Forms TCustomForm.DoShow
0065ebb9 +0a9 Tutorial.exe Vcl.Forms TCustomForm.CMShowingChanged
005a700e +2be Tutorial.exe Vcl.Controls TControl.WndProc
005abb59 +5e9 Tutorial.exe Vcl.Controls TWinControl.WndProc
0065ae0d +64d Tutorial.exe Vcl.Forms TCustomForm.WndProc
005a6c48 +024 Tutorial.exe Vcl.Controls TControl.Perform
005aaf21 +10d Tutorial.exe Vcl.Controls TWinControl.UpdateShowing
005ab030 +0bc Tutorial.exe Vcl.Controls TWinControl.UpdateControlState
005adc2a +026 Tutorial.exe Vcl.Controls TWinControl.CMVisibleChanged
005a700e +2be Tutorial.exe Vcl.Controls TControl.WndProc
005abb59 +5e9 Tutorial.exe Vcl.Controls TWinControl.WndProc
0065ae0d +64d Tutorial.exe Vcl.Forms TCustomForm.WndProc
005a6c48 +024 Tutorial.exe Vcl.Controls TControl.Perform
005a55fa +026 Tutorial.exe Vcl.Controls TControl.SetVisible
0065a629 +03d Tutorial.exe Vcl.Forms TCustomForm.SetVisible
00664897 +0b3 Tutorial.exe Vcl.Forms TApplication.Run
0080e9d9 +061 Tutorial.exe Tutorial 25 +5 initialization
77533675 +010 kernel32.dll BaseThreadInitThunk

thread $12f4:
77cd00f6 +0e ntdll.dll NtWaitForMultipleObjects
77533675 +10 kernel32.dll BaseThreadInitThunk

thread $1128:
77cd1edf +0b ntdll.dll NtWaitForWorkViaWorkerFactory
77533675 +10 kernel32.dll BaseThreadInitThunk

thread $104c:
77cd1edf +0b ntdll.dll NtWaitForWorkViaWorkerFactory
77533675 +10 kernel32.dll BaseThreadInitThunk

thread $afc:
77cd1edf +0b ntdll.dll NtWaitForWorkViaWorkerFactory
77533675 +10 kernel32.dll BaseThreadInitThunk

modules:
00400000 Tutorial.exe 1.0.0.0 \Win32
10000000 fbclient.dll 2.5.1.26351 \Win32
4a800000 icuuc30.dll 3.0.0.0 \Win32
4ad00000 icudt30.dll 3.0.0.0 \Win32

disassembling:
[...]
007ff95d mov ebp, esp
007ff95f push ecx
007ff960 push ebx
007ff961 mov [ebp-4], eax
007ff964 143 mov eax, [ebp-4]
007ff967 > mov edx, [eax+8]
007ff96a mov eax, [ebp-4]
007ff96d mov eax, [eax+4]
007ff970 mov ecx, [eax]
007ff972 call dword ptr [ecx+$3c]
007ff972
[...]
Müssen Voraussetzungen erfüllt werden um die .exe zu Starten?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 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