AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi db änderungen protokollieren. aus delphi heraus. (IB)
Thema durchsuchen
Ansicht
Themen-Optionen

db änderungen protokollieren. aus delphi heraus. (IB)

Ein Thema von mojo777 · begonnen am 2. Jun 2006 · letzter Beitrag vom 4. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#1

db änderungen protokollieren. aus delphi heraus. (IB)

  Alt 2. Jun 2006, 20:55
Datenbank: interbase • Version: 6 • Zugriff über: sql
Hallo,

ich hab mich heute daran gesetzt ein db-protokoll zu schreiben. und leider ist es mir aufgefallen, dass das gar nicht so einfach ist. also die insert und update stellen, die direkt in die sql.text bereiche der TIBQuery reingeschrieben wurden können auch problemlos abgefangen werden.
aber mit den Datasets habe ich so meine probleme. sprich mit allem wo parameter an die query übergeben werden.
wie geht das? habe mit schon überlegt sqlMonitor zu benutzen aber blicke die bedienung nicht.

würde mich sehr freuen, wenn mir da jemand einen tipp geben könnte.


vg

ps:falls jemand fragen sollte warum ich diese aufgabe nicht auf eine udf etc verlagere..
der grund ist, dass ich benutzer in tabellen angelegt habe. und alle loggen sich mit dem selben benutzernamen in IB ein. es wäre also plausibler diese aufgabe unter delphi zu realisieren. (IMHO)
Muh macht die kUh
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: db änderungen protokollieren. aus delphi heraus. (IB)

  Alt 2. Jun 2006, 23:34
Zitat:
habe mit schon überlegt sqlMonitor zu benutzen aber blicke die bedienung nicht.
Gute Überlegung. Ein Beispiel dafür findest du in den Demos von Delphi.
Hast du dir schon mal überlegt, clientseitig verschiedene Benutzer su verwenden? Dann könntest du u.U. das Problem per Trigger lösen oder auf FB2 upgraden, dann kannst du das anstatt benutzerbezogen, Clientbezogen machen.

BTW. Was willst du damit bezwecken?
Markus Kinzler
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#3

Re: db änderungen protokollieren. aus delphi heraus. (IB)

  Alt 3. Jun 2006, 04:26
hi. nun das war das "ps"...
ist habe mittlerweile eine lösung gefunden, aber sie klappt nur "zum sehen". also ich könnte mit den parametern die db nicht evtl per sql_spript wiederherstellen.
mfg
Muh macht die kUh
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#4

Re: db änderungen protokollieren. aus delphi heraus. (IB)

  Alt 3. Jun 2006, 14:36
hallo. wie extrahiere ich denn die metadata?
ich weiss zwar, dass das mit IBExtract geht aber irgendwie finde ich keine einleuchtende methode um die prozedur auszuführen.


vg
Muh macht die kUh
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#5

Re: db änderungen protokollieren. aus delphi heraus. (IB)

  Alt 3. Jun 2006, 15:08
oder gibt es in IB einen befehl, der mit im trigger z.b. den gerade ausgeführten sql code anzeigen kann?
Muh macht die kUh
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: db änderungen protokollieren. aus delphi heraus. (IB)

  Alt 3. Jun 2006, 21:47
Zitat:
oder gibt es in IB einen befehl, der mit im trigger z.b. den gerade ausgeführten sql code anzeigen kann?
Nein, aber du kannst die Änderungen an den Daten protokollieren. Hilft dir natürlich nur, wenn du erkenne willst was geändert wurde. Willst du aber protokollieren, we was abgefragt hat, wird es schwerer, dann mußt du das über SPs lösen.
Markus Kinzler
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#7

Re: db änderungen protokollieren. aus delphi heraus. (IB)

  Alt 4. Jun 2006, 02:24
hi mkinzler.
ja. ich will nur die änderungen protokollieren.

ich habe zwar bereits eine (halb)lösung gefunden aber sag mir bitte was du meinst.

hier meine lösung:
in delphi den IBSQLMonitor benutzen und dann bei event auf die Prozedur WriteUserLosg(text) weisen.
Die prozedur sieht dann so aus:
Delphi-Quellcode:
procedure TfmMain.writeUserLOG(msg:String);
var s , datei: String;
      tf,f : TextFile;
      pos:Integer;
      erg:String;
begin

  if ((StrPos(PChar(UpperCase(msg)), PChar('INSERT'))<>nil) or (StrPos(PChar(UpperCase(msg)), PChar('UPDATE'))<>nil)) then
    begin
    AssignFile(tf, 'user_log.txt');
    Append(tf);
    msg:=StringReplace(msg, '[Execute]', '[Execute] */'+#13, [rfReplaceAll]);
    end else exit;
  Write(tf, '/*: '+DateToStr(date())+' '+FormatDateTime('hh:mm:ss', Now)+' '+
            trim(AktUser.name)+' '+trim(AktUser.vorname)+' UserID:'+
            IntToStr(AktUser.userid)+':'+#13#10+msg+';'+#13+#13);
  CloseFile(tf);
end;
das klappt soweit ganz gut solange ich keine parameter benutze.
bei benutzung von parametern sehe ich zwar die zustandsänderungen aber ich kann diese dann nicht mehr in einen skrip kopieren und dann einfach ausführen lassen. (würde ich gerne als eine weitere schutzmaßname vor dem worstCase).

so sieht der output der procedur aus:
Zitat:
/*: 04.06.2006 01:31:13 Name Vorname UserID:1:

[Application: zzzzz]
sql_exec: [Execute] */
INSERT INTO RECHNUNGEN (R_DATUM, VP, ZAHLART, KND_ID) VALUES('04.06.2006', '1', 'Bar-Zahlung', NULL)
;
und mit parametern:
Zitat:
/*: 03.06.2006 18:56:54 Name Vorname UserID:1:

[Application: zzzzz]
dts_kunden: [Execute] */
UPDATE KUNDEN
SET KND_NAME=:KND_NAME,
KND_VORNAME=:KND_VORNAME,
KND_STRASSE=:KND_STRASSE,
KND_PLZ=:KND_PLZ,
KND_ORT=:KND_ORT,
KND_TEL=:KND_TEL,
KND_FAX=:KND_FAX,
KND_MOBIL=:KND_MOBIL,
KND_SUPER=:KND_SUPER,
KND_GEW_VON=:KND_GEW_VON,
KND_KOMMENTAR=:KND_KOMMENTAR
WHERE KND_ID=:KND_ID

KND_NAME = 234234
KND_VORNAME = 234234
KND_STRASSE = 234
KND_PLZ = 342
KND_ORT = 423
KND_TEL = 23
KND_FAX = 23
KND_MOBIL = 23
KND_SUPER = 1
KND_GEW_VON = 1
KND_KOMMENTAR = <BLOB>
KND_ID = 1;

mfg
Muh macht die kUh
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: db änderungen protokollieren. aus delphi heraus. (IB)

  Alt 4. Jun 2006, 04:10
Zitat von mojo777:
oder gibt es in IB einen befehl, der mit im trigger z.b. den gerade ausgeführten sql code anzeigen kann?
Wieso brauchst Du den kompletten SQL-Befehl ? Änderungen betreffen üblicherweise Tabellen und Felder. Was spricht also dagegen, dafür Trigger zu benutzen bzw. vorhandene zu erweitern ? Die sind nicht nur dazu da, IDs hochzuzählen ! SQLMonitor mit Textdatei hält doch eher nur auf. Z.B.: "welcher Datensatz mit Nr. 100 wurde am 1.6.2006 wann geändert ?" Erzähle mir mal einer wie das mit einer Textdatei und vertretbarem Audfwand gehen soll. 8) 1 Min. in IBExpert.
Gruß
Hansa
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#9

Re: db änderungen protokollieren. aus delphi heraus. (IB)

  Alt 4. Jun 2006, 10:29
hi hansa.
es muss in meinem falle eine txt datei am ende herauskommen. ob mit triggern oder ohne.
mit triggern habe ich das auch schon versucht. das ist kein geringerer aufwand.
ich wollte das mit einer udf lösen. die udf hat dann letzendlich gut fuinktioniert, aber die fehlerbehandlung mit den triggern hat sich als zu kompliziert herausgestellt.
dabei kann man nicht einfach TEMTPVAR=UDFNAME('UPDATE TABLENAME SET FELD1='||NEW.FELD1||', ... denn die updates belaufe sich meistens nur ein einige wenige felder und es kommt zum fehler wenn es kein NEW.FELDn gibt.
und was mache ich mit blobs??

soviel dazu.

oder habe ich da was mißverstanden?

gruß
Muh macht die kUh
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#10

Re: db änderungen protokollieren. aus delphi heraus. (IB)

  Alt 4. Jun 2006, 11:00
hmm. überleg. vll. lag es daran, dass ich vergessen habe zu casten

Muh macht die kUh
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:59 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