![]() |
Datenbank: Sqlite • Version: 3 • Zugriff über: ZQuery
Änderungen in einer Datenbank erfassen
Hallo,
ich ersetze in einer Sqlite-Datenbank Einträge in einem Feld durch den SQL-Befehle
SQL-Code:
Wie kann ich feststellen welche Datensätze geändert wurden, und diese mit ihrer ID in einer Listbox anzeigen?
UPDATE Meine_TABLE SET Feld1 = REPLACE(Feld1,".",",")
Ich habe gehört das so etwas mit Triggern zu machen ist, aber davon habe ich keine Ahnung. - wie muss so ein Trigger aussehen? - wie und wo wird ein Trigger gestartet? Für jeden Hinweis bin ich dankbar! :wall: |
Re: Änderungen in einer Datenbank erfassen
![]() Trigger hör ich zum ersten Mal. Ich gehe davon aus dass "REPLACE" eine von dir eigens geschrieben Prozedur ist. Du gehst bestimmt auf alle Datensätze von oben bis unten durch... Wieso prüft du vorher nicht einfach, ob ein '.' vorhanden ist und schreibst es in deine Listbox. Beispiel:
Delphi-Quellcode:
...oder anders:
Meine_Table.First;
while not(Meine_Table.eof) then begin if Pos('.',Meine_TableFeld1.AsString) > 0 then ListBox1.Items.Add(Meine_TableID.Asstring); //Aufruf der SQL-Anweisung "Update"... Meine_Table.Next; end;
Delphi-Quellcode:
Maybe....
procedure TForm1.Button1Click(Sender: TObject);
var s:string; i:integer; change:boolean; begin Meine_Table.First; while not(Meine_Table.eof) do begin change := false; s := Meine_TableFeld1.AsString; for i := 0 to length(s) do begin if s[i] = '.' then begin s[i] := ','; change := true; end; end; if change then ListBox.Items.Add(Meine_TableID.AsString) Meine_Table.Edit; Meine_TableFeld1.AsString := s; Meine_Table.Post; Meine_Table.Next; end; end; |
Re: Änderungen in einer Datenbank erfassen
Die Sache mit dem Replace ist mir schon klar und funktioniert auch, ich will nur danach wissen
wie viele Datensätze geändert wurden. Ich Habe vor der Aktion schon jede Menge Datensätze mit '.', dein Code würde mir alle anzeigen. |
Re: Änderungen in einer Datenbank erfassen
Hm... entweder steh ich auf dem Schlauch... einfach eine Variable dann einbauen die hochzählt, wenn Pos('.', Meine_TableFeld1.AsString) > 0 ist... :?
oder:
Delphi-Quellcode:
Edit: Nicht über die Anzahl meiner Edits aufregen. Es ist schon viertel Fünf ^^
procedure TForm1.Button1Click(Sender: TObject);
var s:string; i:integer; change:boolean; anzahl:integer; begin anzahl := 0; Meine_Table.First; while not(Meine_Table.eof) do begin change := false; s := Meine_TableFeld1.AsString; for i := 0 to length(s) do begin if s[i] = '.' then begin s[i] := ','; change := true; end; end; if change then begin ListBox.Items.Add(Meine_TableID.AsString) inc(anzahl); end; Meine_Table.Edit; Meine_TableFeld1.AsString := s; Meine_Table.Post; Meine_Table.Next; end; showmessage('Anzahl der geänderten Datensätze: '+inttostr(anzahl)); end; |
Re: Änderungen in einer Datenbank erfassen
Wobei du letztendlich dann auch
ListBox.Items.Count abfragen könntest... Wiss halt net wie du deine Datenbank ansprichst... ZEOSLib, etc.... |
Re: Änderungen in einer Datenbank erfassen
Deine Vorschläge sind ok, aber es geht mir vorrangig darum
zu begreifen wie Trigger eingebunden und gestartet werden. |
Re: Änderungen in einer Datenbank erfassen
Trigger werden automatisch vom DBMS bei Auftreten von Ereignissen ausgeführt
|
Re: Änderungen in einer Datenbank erfassen
OK,
den Trigger schreibe ich mit einer Software (SQLMaestro) direkt in die Datenbank. Wie rufe ich den Trigger aus der Anwendung heraus auf (er soll ja nicht immer laufen), und kann ich damit auch eine meiner Proceduren starten? Wie sollte der Trigger in meinem speziellen Fall aussehen? Grüsse |
Re: Änderungen in einer Datenbank erfassen
Zitat:
|
Re: Änderungen in einer Datenbank erfassen
Trigger dienen dazu auf Ereignisse in der Datenbank (wie z.b. Inserts, Updates usw) wiederum eine beliebige Aktion in der Datenbank auszuführen (SP usw.).
Was Du (vielleicht) möchtest sind z.b. bei MS SQLSERVER die Notification Services. Keine Ahnung ab welcher Version diese verfügbar sind. Wir arbeiten mit MS SQL Server 2005. Mit diesen kannst Du in Deiner Anwendung über Änderungen in der Datenbank informiert werden. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 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