Änderungstatus mitloggen
08.08.2006 13:29
|
|
Jan Lorenz
Antworten
|
Hallo zusammen, ich bräuchte mal einen Ansatzpunkt für folgendes: In einer Stammdatenverwaltung (Kundenstamm mit vielen Feldern) können verschiedene Benutzer Änderungen vornehmen und abspeichern. Ich möchte nun einen Mechanismus einbauen, der all diese Änderungen mitloggt in der Datenbank. Ich möchte folgende Infos mitsschreiben: Tabellenname, in der die Änderung greift; Feldname; Benutzername; PC-Name; alter Wert; neuer Wert; Datum. Nun wollte ich fragen, ob jemand einen schönen Ansatzpunkt hat, um das Problem möglichst "sauber" zu lösen. Viele Grüße Jan
|
| |
Re: Änderungstatus mitloggen
08.08.2006 13:56
|
|
Karsten Heimer
Antworten
|
"Jan Lorenz" schrieb im Newsbeitrag news:25a4a254-abb1-4596-84c9-c5e2332c4ef5@news.dotnetpro.de... > Hallo zusammen, > > ich bräuchte mal einen Ansatzpunkt für folgendes: In einer > Stammdatenverwaltung (Kundenstamm mit vielen Feldern) können > verschiedene > Benutzer Änderungen vornehmen und abspeichern. Ich möchte nun einen > Mechanismus einbauen, der all diese Änderungen mitloggt in der > Datenbank. > Ich möchte folgende Infos mitsschreiben: Tabellenname, in der die > Änderung > greift; Feldname; Benutzername; PC-Name; alter Wert; neuer Wert; > Datum. > > Nun wollte ich fragen, ob jemand einen schönen Ansatzpunkt hat, um das > Problem möglichst "sauber" zu lösen. > > > Viele Grüße > Jan Nun, ich würde da schon mal 2 Möglichkeiten sehen: - auf "Objektebene", also in der Schicht, in welcher Deine Daten gespeichert sind - auf "Datenbankebene", wahrscheinlich mit Triggern o.ä. Die "Objektebene" ist natürlich sehr flexibel und vor allem DB-unabhängig. Du benötigst aber eine "Speicher-Routine", welche für alle Objekte die gleiche ist, sonst hast Du haufenweise redundanten Code. Die Datenbankebene läßt sich dafür nicht austricksen, wenn man Änderungen direkt in der Datenbank vornimmt. Das wäre also sicherer, ist aber von der DB abhängig. Gruß, Karsten.
|
| |
Re: Änderungstatus mitloggen
09.08.2006 08:32
|
|
Jan Lorenz
Antworten
|
Danke für die Infos. Scheint also eine Grundsatzfrage zu sein, ob auf DB-Ebene oder Programmebene. Programmebene wäre mir eigentlich lieber, aber die Programmierung auf DB-Ebene scheint mir im Moment einfacher. Ich werde mich mal informieren, was der SQL-Server 2000 so mit bringt. Jan "Karsten Heimer" schrieb im Newsbeitrag news:ccb2ecd3-00df-42fb-af57-11859586be38@news.dotnetpro.de... > "Jan Lorenz" schrieb im Newsbeitrag > news:25a4a254-abb1-4596-84c9-c5e2332c4ef5@news.dotnetpro.de... >> Hallo zusammen, >> >> ich bräuchte mal einen Ansatzpunkt für folgendes: In einer >> Stammdatenverwaltung (Kundenstamm mit vielen Feldern) können verschiedene >> Benutzer Änderungen vornehmen und abspeichern. Ich möchte nun einen >> Mechanismus einbauen, der all diese Änderungen mitloggt in der Datenbank. >> Ich möchte folgende Infos mitsschreiben: Tabellenname, in der die >> Änderung >> greift; Feldname; Benutzername; PC-Name; alter Wert; neuer Wert; Datum. >> >> Nun wollte ich fragen, ob jemand einen schönen Ansatzpunkt hat, um das >> Problem möglichst "sauber" zu lösen. >> >> >> Viele Grüße >> Jan > Nun, ich würde da schon mal 2 Möglichkeiten sehen: > - auf "Objektebene", also in der Schicht, in welcher Deine Daten > gespeichert sind > - auf "Datenbankebene", wahrscheinlich mit Triggern o.ä. > Die "Objektebene" ist natürlich sehr flexibel und vor allem DB-unabhängig. > Du benötigst aber eine "Speicher-Routine", welche für alle Objekte die > gleiche ist, sonst hast Du haufenweise redundanten Code. Die > Datenbankebene läßt sich dafür nicht austricksen, wenn man Änderungen > direkt in der Datenbank vornimmt. Das wäre also sicherer, ist aber von der > DB abhängig. > Gruß, Karsten.
|
| |
Re: Änderungstatus mitloggen
11.08.2006 01:32
|
|
Jan-Cornelius Molnar
Antworten
|
Keywords: "Jan Lorenz" schrieb im Newsbeitrag news:3068be81-d32b-402a-912f-4c6b7fd4780e@news.dotnetpro.de... Hi Jan, > Danke für die Infos. Scheint also eine Grundsatzfrage zu sein, ob auf > DB-Ebene oder Programmebene. Programmebene wäre mir eigentlich lieber, > aber die Programmierung auf DB-Ebene scheint mir im Moment einfacher. Ich > werde mich mal informieren, was der SQL-Server 2000 so mit bringt. wenn du schon am Suchen bist, kannst du dich auch über das Transaktionsprotokoll des Sql Servers informieren. Wenn du Transaktionen zum Updaten der DB benutzt (was beim SqlDataAdapter immer der Fall ist), dann können sämtliche geloggt werden. Viel Erfolg Jan-Cornelius Molnar MS CLIP http://www.vb-magazin.de/
|
| |
Re: Änderungstatus mitloggen
09.08.2006 08:43
|
|
Roland Peissert
Antworten
|
Ich habe so etwas schon gemacht, die beste Lösung ist mit einem trigger in der datenbank. Du kannst die eingeloggten Benutzer über DB-Systemvariablen abfragen. Die Logs kannst du entweder in die gleiche Tabelle oder in eine andere Tabelle schreiben. Jan Lorenz schrieb am 08.08.2006 um 13:29 in "Änderungstatus mitloggen": > Hallo zusammen, > > ich bräuchte mal einen Ansatzpunkt für folgendes: In einer > Stammdatenverwaltung (Kundenstamm mit vielen Feldern) können verschiedene > Benutzer Änderungen vornehmen und abspeichern. Ich möchte nun einen > Mechanismus einbauen, der all diese Änderungen mitloggt in der Datenbank. > Ich möchte folgende Infos mitsschreiben: Tabellenname, in der die Änderung > greift; Feldname; Benutzername; PC-Name; alter Wert; neuer Wert; Datum. > > Nun wollte ich fragen, ob jemand einen schönen Ansatzpunkt hat, um das > Problem möglichst "sauber" zu lösen. > > > Viele Grüße > Jan
|
| |
Re: Änderungstatus mitloggen
09.08.2006 14:37
|
|
Jan Lorenz
Antworten
|
Ok. Danke. Nur ein Problem hätte ich dabei noch: Ich möchte beim Loggen gerne einen Beschreibungstext mitloggen, der die Änderung näher beschreibt, wie z.B. "Straße geändert", damit ich diese später beim Anwender anzeigen lassen kann. Aber wie? Ich müsste eine Zuordnungstabelle schaffen, die jedem Datenbankfeld einen solchen Beschreibungstext zuordnen lässt. Im Client müsste ich dann das auswerten. Gibt es noch bessere Ansätze. Gruß Jan "Roland Peissert" schrieb im Newsbeitrag news:0be77b12-5350-4a32-878b-e439f32e6f32@news.dotnetpro.de... > Ich habe so etwas schon gemacht, die beste Lösung ist mit einem trigger in > der datenbank. Du kannst die eingeloggten Benutzer über DB-Systemvariablen > abfragen. Die Logs kannst du entweder in die gleiche Tabelle oder in eine > andere Tabelle schreiben. > > > Jan Lorenz schrieb am 08.08.2006 um 13:29 in "Änderungstatus mitloggen": >> Hallo zusammen, >> >> ich bräuchte mal einen Ansatzpunkt für folgendes: In einer >> Stammdatenverwaltung (Kundenstamm mit vielen Feldern) können verschiedene >> Benutzer Änderungen vornehmen und abspeichern. Ich möchte nun einen >> Mechanismus einbauen, der all diese Änderungen mitloggt in der Datenbank. >> Ich möchte folgende Infos mitsschreiben: Tabellenname, in der die >> Änderung >> greift; Feldname; Benutzername; PC-Name; alter Wert; neuer Wert; Datum. >> >> Nun wollte ich fragen, ob jemand einen schönen Ansatzpunkt hat, um das >> Problem möglichst "sauber" zu lösen. >> >> >> Viele Grüße >> Jan
|
| |
Re: Änderungstatus mitloggen
10.08.2006 21:44
|
|
Bernhard Renner
Antworten
|
Hallo Jan, wir haben dies mit Hilfe von ADO.NET und DataSets (zusammen einer XML-Schema-Steuerdatei) realisiert. Eine Datenzugriffsschicht wertet alle Änderungen and deren DataSets kurz vor dem Abgleich mit den Dantenbanken aus und schreibt die Änderungen in Log Tabellen (über Methode DataSet.GetChanges). Über eine XML-Schema-Steuerdatei können Datenfelder oder Relationen noch gefiltert werden, die z. B. die nicht in die Log Tabellen mitaufgenommen werden. Eine Log Tabelle hat folgendes Schema: [IDObject] [IDTable] [IDUser] [TimeStamp] [Modification] (insert,update,delete) [XMLText] (kann über XML-Schema-Steuerdatei auch z. T. automatisch erzeugt werden) Das schreiben in die Log Tabellen ist immer in Transaktionen eingebunden. Für jedes Objekt mit der IDObject kann die Historie dann in einer Liste angezeigt werden. Grüße Bernie Jan Lorenz schrieb am 08.08.2006 um 13:29 in "Änderungstatus mitloggen": > Hallo zusammen, > > ich bräuchte mal einen Ansatzpunkt für folgendes: In einer > Stammdatenverwaltung (Kundenstamm mit vielen Feldern) können verschiedene > Benutzer Änderungen vornehmen und abspeichern. Ich möchte nun einen > Mechanismus einbauen, der all diese Änderungen mitloggt in der Datenbank. > Ich möchte folgende Infos mitsschreiben: Tabellenname, in der die Änderung > greift; Feldname; Benutzername; PC-Name; alter Wert; neuer Wert; Datum. > > Nun wollte ich fragen, ob jemand einen schönen Ansatzpunkt hat, um das > Problem möglichst "sauber" zu lösen. > > > Viele Grüße > Jan
|