Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DB-Felder automatisch aus Delphi befüllen (https://www.delphipraxis.net/125197-db-felder-automatisch-aus-delphi-befuellen.html)

fragile 2. Dez 2008 09:26

Datenbank: MS SQL • Version: 2005 • Zugriff über: ADO

DB-Felder automatisch aus Delphi befüllen
 
Hi,

wo wäre denn der zentralste Ansatzpunkt, wenn ich Felder wie "geändert am"/"geändert von" und "angelegt am"/"angelegt von"
automatisch bei jedem neuen Datensatz bzw. bei jeder Änderung befüllen/aktualisieren würde ?

Ich stehe ein bisschen auf Kriegsfuß mit dem Triggern von MS SQL, wäre dies dennoch die beste Lösung oder gibt es auch ein Delphi-Ereignis (z.b. in der DBConnection), was dafür geeignet wäre. Ich benutze in meiner Anwendung einen Type TUser (selbstdefinierter Record), um Infos über den Anwender zu speichern...

Gäbe es auch die Möglichkeit, über den DB-User in Ms SQL diese Änderungen automatisch in die jeweils dafür angelegten Felder einzutragen ?

Danke schonmal für Tipps&Tricks....

mikhal 2. Dez 2008 09:47

Re: DB-Felder automatisch aus Delphi befüllen
 
Ich nutze für diese Zwecke Delphi-seitig das Ereignis BeforePost, um die entsprechenden Felder zu füllen.

Grüße
Mikhal

fragile 2. Dez 2008 12:20

Re: DB-Felder automatisch aus Delphi befüllen
 
Böte sich nicht auch ein Ereignis einer TADOConnection an, dann muss man das ganze nicht an zig Stellen bzw. Datenquellen (habe im Moment 12 Stück)implementieren...

mjustin 2. Dez 2008 13:03

Re: DB-Felder automatisch aus Delphi befüllen
 
Zitat:

Zitat von fragile
Böte sich nicht auch ein Ereignis einer TADOConnection an, dann muss man das ganze nicht an zig Stellen bzw. Datenquellen (habe im Moment 12 Stück)implementieren...

Man kann (im einfachsten Fall) allen 12 Datasets die gleiche Ereignisbehandlungsroutine für BeforePost zuweisen.
Wenn die Feldnamen identisch sind, genügt

DataSet.FieldByName('CHANGED').AsDateTime := MyChangedTime;

damit ist es unabhängig von der konkreten Dataset-Instanz

joachimd 2. Dez 2008 13:15

Re: DB-Felder automatisch aus Delphi befüllen
 
Zitat:

Zitat von mjustin
Man kann (im einfachsten Fall) allen 12 Datasets die gleiche Ereignisbehandlungsroutine für BeforePost zuweisen.
Wenn die Feldnamen identisch sind, genügt

DataSet.FieldByName('CHANGED').AsDateTime := MyChangedTime;

damit ist es unabhängig von der konkreten Dataset-Instanz

Da würde ich lieber eine eigene Komponente davon ableiten und dieser Ableitung das 'AutoFeld' per Property zuweisen;) Vielleicht sogar gleich eine Liste mit Autofeldern und einem Flag, was in das Feld rein soll.

fragile 4. Dez 2008 08:28

Re: DB-Felder automatisch aus Delphi befüllen
 
Du meinst, eine neue Instanz von TADOCustomDataSet und diese dann bei jedweden Änderungen/Inserts aufrufen ?

joachimd 4. Dez 2008 08:57

Re: DB-Felder automatisch aus Delphi befüllen
 
Zitat:

Zitat von fragile
Du meinst, eine neue Instanz von TADOCustomDataSet und diese dann bei jedweden Änderungen/Inserts aufrufen ?

TAdoTable und TAdoQuery ableiten und dort das Post überschreiben (ich weiß jetzt nicht, wie die internen Methoden dort lauten. Bei ADS wäre es InternalPost).
Delphi-Quellcode:
procedure TAdsTable.InternalPost
...
  FieldByName('zeit').asDateTime:=now();
  inherited;
...

MichaelP 4. Dez 2008 09:05

Re: DB-Felder automatisch aus Delphi befüllen
 
Man kann diese Funktionalität auch in die Datenbank legen, und auf der Tabelle einen TRIGGER anlegen, dieser kann dann bei jeder Datensatrzänderung den neuen Zeitstempel und den DB-Benutzer eintragen.

Gruß
Michael

joachimd 4. Dez 2008 09:17

Re: DB-Felder automatisch aus Delphi befüllen
 
Zitat:

Zitat von MichaelP
Man kann diese Funktionalität auch in die Datenbank legen, und auf der Tabelle einen TRIGGER anlegen, dieser kann dann bei jeder Datensatrzänderung den neuen Zeitstempel und den DB-Benutzer eintragen.

Das wäre die bevorzugte Methode, aber nachdem der OP folgendes gleich in die Eröffnung schrieb:
Zitat:

Ich stehe ein bisschen auf Kriegsfuß mit dem Triggern von MS SQL, wäre dies dennoch die beste Lösung oder gibt es auch ein Delphi-Ereignis (z.b. in der DBConnection), was dafür geeignet wäre. Ich benutze in meiner Anwendung einen Type TUser (selbstdefinierter Record), um Infos über den Anwender zu speichern...
habe ich ihm auch nicht mehr dazu geraten ;)

fragile 4. Dez 2008 10:35

Re: DB-Felder automatisch aus Delphi befüllen
 
hi,

mit Triggern kann es bei uns Probleme geben, da der in die Anwendung eingeloggte User nicht unbedingt dem DB-User entspricht....

Ich werde mal das Post überschreiben, so daß er mir Zeit/Benutzer immer miteinträgt...danke !


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 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