Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   DB-Memofeld wer hats wann geändert (https://www.delphipraxis.net/188285-db-memofeld-wer-hats-wann-geaendert.html)

p80286 16. Feb 2016 15:42

AW: DB-Memofeld wer hats wann geändert
 
Halte ich für nicht so optimal.
Wenn Du DB-Inhalte als Datei irgendwo ablegst, kommt irgendwer bestimmt auf die Idee mal aufzuräumen oder der gegenteilige Fall, die irgendwo-Dateien überleben Deine DB um Jahre, weil man da nicht dran darf.
da schon lieber eine Tabelle AltMemos oder in der Memotabelle ein Feld mit der zugehörigen SatzID und eine Tabelle AktuelleSatzMemoVerknüpfung.

Gruß
K-H

rapante 16. Feb 2016 16:02

AW: DB-Memofeld wer hats wann geändert
 
Ich habe das bei mir für eine MultiUser Kalender-Anwendung ebenfalls über einen DB-Trigger gelöst der bei Änderung den kompletten Datensatz in eine History-Tabelle kopiert.

table_x
Felder: id, .., createuser, createdate, changeuser, changedate;
table_x_history:
Felder: id,id_table_x .., createuser, createdate, changeuser, changedate;

So kann ich jede Änderung einem User zuordnen und keiner kann sich rausreden ;)

stahli 16. Feb 2016 17:04

AW: DB-Memofeld wer hats wann geändert
 
Würde es ähnlich wie rapante angehen.

Mehrere Memos als Detailtabelle mit Zeitstempel und UserNamen.
Der Admin darf alte Einträge löschen.

jobo 16. Feb 2016 17:08

AW: DB-Memofeld wer hats wann geändert
 
@Memo stempeln
Das wäre m.E. die billigste Lösung:
über Trigger am allerbilligsten, hier kann auch dafür gesorgt werden, dass nur Erweiterungen erlaubt sind.
über Delphi Code per ReadOnly DB Memo und einem nicht gebundenen Memo für die Ergänzung.

baumina 17. Feb 2016 06:17

AW: DB-Memofeld wer hats wann geändert
 
Danke für die Ideen, "perfekt" ist das alles nicht, aber es ist halt wie bei so vielen Dingen, die eierlegende Wollmilchsau, die zudem auch keine Arbeit machen darf, gibt's halt nicht.

harfes 17. Feb 2016 06:31

AW: DB-Memofeld wer hats wann geändert
 
Die Lösung von rapante setze ich seit Jahren in verschiedenen Projekten ein - sehr schnell umgesetzt und es ist über die Jahre alles nachvollziehbar. Der Admin (und nur der!) hat Vollzugriff auf die Historie-Tabelle auch vom Programm aus (ok, das ist ein klein wenig Mehraufwand für das zusätzlich Fenster).

Das ist zwar nicht super elegant aber erfüllt seinen Zweck und bei den heutigen DB's und billigem Plattenplatz kein Problem. Quick aber - wie ich finde - nicht dirty!

Hartmut

madas 17. Feb 2016 11:36

AW: DB-Memofeld wer hats wann geändert
 
Zitat:

Zitat von harfes (Beitrag 1330599)
Die Lösung von rapante setze ich seit Jahren in verschiedenen Projekten ein - sehr schnell umgesetzt und es ist über die Jahre alles nachvollziehbar. Der Admin (und nur der!) hat Vollzugriff auf die Historie-Tabelle auch vom Programm aus (ok, das ist ein klein wenig Mehraufwand für das zusätzlich Fenster).

Das ist zwar nicht super elegant aber erfüllt seinen Zweck und bei den heutigen DB's und billigem Plattenplatz kein Problem. Quick aber - wie ich finde - nicht dirty!

Hartmut

Wie elegant willst Du es denn noch haben? :D

Genauso machen wir das auch. Über History-Tabellen die via Trigger beim Löschen des Datensatzes oder Update eines oder mehrer Felder
(Update = Feldinhaltänderung bzw. neuer Feldinhalt ist leer, alter nicht bzw. alter Feldinhalt ist leer, neuer nicht) befüllt werden.
Die aktuelle Benutzer-ID ist dem Programm bekannt und wird daher in einer PrepareSave Methode dem Datensatz vor dem Abspeichern in die
DB hinzugefügt. Der SQL-Quelltext für den (die) Trigger wird von der DB-Klasse (sie kennt ja alle Felder) generiert und beim Überprüfen
des DB-Schemas bei Programmstart hinzugefügt bzw. geändert, falls Felder hinzugekommen sind.

Das Löschen- bzw. Ändern-Dürfen wird per Benutzer- bzw. Rechteverwaltung gelöst.

Ist meiner Meinung elegant genug. :P

baumina 17. Feb 2016 12:36

AW: DB-Memofeld wer hats wann geändert
 
Ein Inhalt meines Memofeldes sollte z.B. so aussehen:

Code:
Absplitterung vorne rechts. 10.01.2016 ABCFirma HMüller

Metallisierungsvorgang fehlerhaft. 12.01.2016 DEFFirma AScholz

Achtung: Baugruppe nur für Löttests verwenden 15.01.2016 MasterFirma RGutachter

Nach Rücksprache mit Herrn Walter soll diese Baugruppe für weitere Versuchszwecke eingesetzt werden. 20.01.2016 MasterFirma RGutachter
Irgendwann interessiert die Absplitterung vorne rechts nicht mehr, weil die Baugruppe für Löttests zersägt wurde, dann wird der Kommentar der Absplitterung und des fehlerhaften Metallisierungsvorgangs rausgelöscht.

Diese Arbeitsweise funktionierte nur so lange gut, als die Anzahl der Firmen und Benutzer überschaubar war. Nun vergessen viele Datum und Name zur Bemerkung zu schreiben.

jobo 17. Feb 2016 12:56

AW: DB-Memofeld wer hats wann geändert
 
Zitat:

Zitat von baumina (Beitrag 1330641)
Ein Inhalt meines Memofeldes sollte z.B. so aussehen:
..
Diese Arbeitsweise funktionierte nur so lange gut, als die Anzahl der Firmen und Benutzer überschaubar war. Nun vergessen viele Datum und Name zur Bemerkung zu schreiben.

In einem solchen Fall müssen ja auch alte Informationen gepflegt bzw. überarbeitet werden. Ein schnöder "Schreibschutz" für den alten Inhalt ist ja dann eher kontraproduktiv. Es ist eine bequeme Maßnahme, die aber den Nutzen des gesamten Mechnismus aushebelt und ihn damit wahrscheinlich noch mehr zum Streiobjekt macht.
Was also mit einem Zeit/Nutzerstempel erreicht werden sollte, wird mit der Form der Umsetzung wieder verhindert.

Ich würde eher versuchen, mir ein Ok für eine aufwändigere Lösung zu holen. Z.B. eine Lösung mit mehreren Datensätzen, wovon dann einzelne gelöscht werden können, wenn sie nicht mehr relevant sind. Änderungen oder Korrekturen könnte man durch Delete (alt)/Insert(geänderten Text) abbilden.

rapante 17. Feb 2016 13:23

AW: DB-Memofeld wer hats wann geändert
 
Zitat:

Zitat von baumina (Beitrag 1330641)
Ein Inhalt meines Memofeldes sollte z.B. so aussehen:

Code:
Absplitterung vorne rechts. 10.01.2016 ABCFirma HMüller

Metallisierungsvorgang fehlerhaft. 12.01.2016 DEFFirma AScholz

Achtung: Baugruppe nur für Löttests verwenden 15.01.2016 MasterFirma RGutachter

Nach Rücksprache mit Herrn Walter soll diese Baugruppe für weitere Versuchszwecke eingesetzt werden. 20.01.2016 MasterFirma RGutachter

Dafür scheint das Memo nicht die richtige Lösung zu sein...

Dann lieber einzelne DS, wobei du dann Zeitstempel und Benutzer selbst pro Eintrag setzen kannst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 Uhr.
Seite 2 von 3     12 3      

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