Autor Beitrag
Mariejane
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 08.12.03 11:18 
Hallo,
ich möchte in meiner kleinen Anwendung erkennen welcher Datensatz geändert wurde, leider kann ich die TTable Komponente nicht einsetzen. Mir stehen also nur 1 TQuery, 1 DBGrid und 1 DataSource zur Verfügung.
Nun möchte ich immer erkennen wenn ein Datensatz geändert wurde, ursprünglich habe ich gedachte die Events (Tquery und TDataSource) AfterEdit, AfterPost... sollten dafür sorgen, doch diese Ereignisse werden garnicht aufgerufen.
Kann mir wer helfen und kennt eine Möglichkeit dies zu erkennen ohne TTable zu nutzen?
Danke im vorraus!
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 08.12.03 11:30 
Hallo!

Die Ereignisse AfterEdit etc. werden nur dann aufgerufen, wenn durch das Programm selbst eine Aktion ausgeführt wird. Zugriffe durch andere Programme/User kannst du so nicht abfangen.

Um welche DB geht es denn? Interbase? Bei Interbase kannst du durch einen Trigger Änderungen an Datensätzen protokollieren, ansonsten musst du schon irgendwie die Daten an sich heranziehen (z.B. Änderungsdatum der Datensätze prüfen).

Cu,
Udontknow
Mariejane Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 09.12.03 11:31 
Danke für die Hilfestellung, doch es muß doch eine andere Möglichkeit geben auf Änderungen in der DB zu reagieren ( Mein Problem ist ich kann nicht mal auf AfterInsert etc reagieren, weil ich keine TTable benutzen kann) Wie gesagt habe ich nur 1 TQuery, 1 Datasource und 1 DBGrid.
Es sollte unter Paradox und Oracle laufen.
Vielen Dank im Vorraus
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 09.12.03 11:53 
Du solltest dich ein wenig genauer ausdrücken. Meinst du nun eine Aktion von dieser Query, oder Aktionen von anderen Queries bzw. Komponenten, evtl. andere Programme?

Zitat:
Mein Problem ist ich kann nicht mal auf AfterInsert etc reagieren, weil ich keine TTable benutzen kann


TQuery liefert doch genau ebenfalls diese Ereignisse (z.B. AfterInsert).

Cu,
Udontknow
Mariejane Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 09.12.03 11:58 
Ich kann nicht auf AfterInsert reagieren, zum dritten :P
Ich möchte ganz einfach wissen wann (und vorallem welcher Datensatz wurde übers DBGrid geändert ) Es ist nicht möglich so wie es jetzt aufgebaut ist, evtl verknüpfe ich auch nur was falsch? Jedenfalls darf ich keine TTable nutzen..

Edit: Er reagiert schon drauf, nur ist das Field das er mir über die After Events zurück gibt nil und für mein Verwendungszweck unbrauchbar :/
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 09.12.03 12:03 
Tsss Tsss.... :?

Zitat:
Mein Problem ist ich kann nicht mal auf AfterInsert etc reagieren, weil ich keine TTable benutzen kann


Ich wiederhole mich nur ungern:
Es gibt das Ereignis AfterInsert auch bei TQuery! Ergo kannst du, obwohl du kein TTable-Objekt hast, auf ein Insert reagieren.

Zitat:
Ich möchte ganz einfach wissen wann (und vorallem welcher Datensatz wurde übers DBGrid geändert


Jaja, ich weiss. Und ich habe bereits gefragt, ob die Operation das TQuery-Objekt selbst ausführt, oder ob es andere Kompos sind, evtl. andere Programme, die Datensätze einfügen. Aber das beantwortest du leider nicht!

Cu,
Udontknow

Edit Answer: Was für ein "Field"? Die Ereignisse geben ein TDataset-Objekt zurück, in dem Falle eine Referenz auf die per Datasource verbundene Query.
Mariejane Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 09.12.03 12:35 
Grml...........
Nein es geht nicht, es wird nur auf After/BeforeOpen (Close) reagiert... umsonst würd ich hier nicht fragen :lol:
Und wie bereits gesagt will ich nur wissen was im DBGrid geändert wurde (hört sich vielleicht zu simpel an aber probiers doch einfach mal unter meinen Bedingungen aus ._. )
Ja hast natürlich recht es wird ein TDataset übergeben, hab vorher nicht nachgeguckt.
Und bevor du sagst das TQuery hat ein AfterInsert Ereignis:
Danke für deine Bemühungen ist sonst noch wer hier? :D
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 09.12.03 12:47 
Du musst dich genauer ausdrücken!

Halten wir einfach mal fest:

Sobald du einen Datensatz über dieses DBGrid einfügst, wird ein AfterInsert-Ereignis der über die Datasource verbundenen Dataset-Komponente ausgelöst. Im Änderungsfall ist das AfterEdit. Sobald dieser Datensatz gespeichert wird, wird ein Before-/AfterPost-Ereignis ausgelöst.

Du schreibst irgendwas von einem Field, obwohl die Ereignisse AfterEdit etc. eine Dataset-Referenz übergeben. Woher hast du dieses "Field"?

Zitat:
Hallo,
ich möchte in meiner kleinen Anwendung erkennen welcher Datensatz geändert wurde

Was genau ist denn nun das Problem? Du merkst, aha, da ist ein AfterEdit-Ereignis! Was kannst du denn dort dann nicht machen, nicht feststellen?
Daß dieser DS sich nun geändert hat (bzw. ändern wird, da ja noch nicht gepostet wurde), hast du ja genau in diesem Ereignis dementsprechend festgestellt!

Edit: Möchtest du vielleicht erfahren, welches Feld sich genau nun verändert hat? Verwechselst du die Begriffe Feld und Datensatz?

Cu
Mariejane Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 09.12.03 13:25 
ok zum 4ten mal:
Das Ereignis wird nicht ausgelöst, lediglich After/Before Open/Close.
Sie werden einfach nicht aufgerufen...das die Ereignis da sind ist klar..
Wenn ich dieses Ereignis nutzen könnte, hätte ich niemals diese Frage hier gestellt ...
Las gut sein Udontknow :oops:
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 09.12.03 13:34 
Ich merk schon, du bist ein harter Brocken... :wink:

Wir sind einen kleinen Schritt weiter.

Die Ereignisse werden nicht aufgerufen. Und sie werden eigentlich nur dann nicht aufgerufen, wenn die Komponente selber nicht einfügt/ändert, sondern andere Komponenten oder andere Programme (ja, ich wiederhole mich, du hast es leider immer noch nicht erwähnt), oder das DBGrid gar nicht die Datasource referenziert, die zu der Query führt (was du aber sofort bemerken solltest, da du dann keine oder falsche Daten im Grid siehst).

mach mal folgendes:
Setze einen Button auf dein Formular und schreib im Onclick folgendes hinein:
ausblenden Quelltext
1:
2:
  Query.Edit;
  Query.Post;

Werden denn dann die Ereignisse Before/after - Edit/Post aufgerufen?

Cu