Seite 1 von 1

[erledigt] Base-Formular: Was wurde geändert?

Verfasst: Mo, 22.04.2013 16:58
von wolli-j
Hallo die Damen und die Herren,

ich würde mich über Anregungen zu folgender Problemstellung freuen: Ich programmiere eine Base-Anwendung, die auf eine mySQL-Datenbank zugreift. In einem umfangreichen Formular kann der Benutzer nun einen einzelnen Datensatz aufrufen und Änderungen eintippen. Am Ende kann er den Datensatz speichern (oder die Änderungen noch vor dem Speichern verwerfen).

Nun will ich eine Funktionalität hinzufügen, die - je nachdem, was geändert wurde - weitere Aktionen auslöst. Über oForm.isModified erfahre ich, ob es ÜBERHAUPT Änderungen gegeben hat. Aber wenn ja: Was wurde geändert?

Ansatz 1: Beim Aufruf des Datensatzes alle Datenfelder (Urzustand) in Variablen speichern, vor dem Update abgleichen. Möglich, aber unelegant.
Ansatz 2: Das aktuelle ResultSet oder RowSet (Urzustand) in eine Objektvariable speichern und vor dem Update abgleichen. Klingt schon eleganter, aber ich weiß leider nicht, wie ich das ResultSet "abspalten" kann. Es gibt ja keine Eigenschaft oForm.ResultSet oder so ...
Ansatz 3: Vor dem Update noch einmal mySQL abfragen, um den Urzustand zu erhalten und dann abgleichen.

Danke für Eingebungen und weitere Ansätze!

Wolli

Re: Base-Formular: Was wurde geändert?

Verfasst: Mo, 22.04.2013 19:57
von F3K Total
Moin
wolli-j hat geschrieben:Es gibt ja keine Eigenschaft oForm.ResultSet oder so ...
Nö, aber es gibt z.B.

Code: Alles auswählen

oresult = oform.createresultset
Gruß R

Re: Base-Formular: Was wurde geändert?

Verfasst: Mo, 22.04.2013 21:58
von wolli-j
F3K Total hat geschrieben:

Code: Alles auswählen

oresult = oform.createresultset
Hallo F3K, supertoll, vielen Dank. Leider habe ich aber Probleme mit der Anwendung: "oresult" ist kein "com.sun.star.sdb.OResultSet", sondern ein "com.sun.star.sdb.ORowSetClone" (Dokumentation??). Das würde mich ja nicht stören und wenn ich sofort nach der Zuweisung mit xray reinschaue, kann ich auch mit dem Klon alles machen und nachsehen. Wenn ich aber oresult später nochmal aufrufe, erhalte ich immer noch den Klon (bin ja ein Fuchs und habe eine globale Variable benutzt), aber es sind keine Daten mehr herauszuziehen und es gibt Fehlermeldungen.
Error1.PNG
Error1.PNG (35.71 KiB) 1451 mal betrachtet
Error2.PNG
Error2.PNG (6.62 KiB) 1451 mal betrachtet
http://wiki.openoffice.org/wiki/Documen ... et_Service hat mir auch keine Erleuchtung gebracht. Ist es vielleicht so, dass der Klon eng vom Original abhängt? Kann ich irgendwie eine unabhängige Zuweisung machen?

Ideen?

Dank + Gruß, Wolli

Re: Base-Formular: Was wurde geändert?

Verfasst: Mo, 22.04.2013 22:30
von F3K Total
Tja,
da hast Du wohl Recht. Wenn ich das Resultset mit dem ersten Makro in eine globale Variable einlese, dann xray, im Formular einen Datensatz zufüge, dann wieder xray, erhöht sich rowcount um eins, also ist das Set wohl abhängig von Formularinhalt.
Was genau willst du denn "merken"?
Gruß R

Re: Base-Formular: Was wurde geändert?

Verfasst: Di, 23.04.2013 09:48
von wolli-j
Habe nochmal drüber geschlafen und Deine Antwort bestärkt mich ... - ich werde wohl an jedes (relevante) Formularfeld ein Ereignismakro hängen, so dass ich die Änderungen "mitlogge". Es geht darum, dass Adressänderungen automatisch auf andere Datensätze übertragen werden, wenn der Benutzer es wünscht. Änderungen im Feld "Bemerkung" sind irrelevant, denn sie werden nie auf andere Sätze übertragen.

Meine Hoffnung zum ursprünglichen Ansatz war, statt

Code: Alles auswählen

oresult = oform.createresultset
so etwas wie

Code: Alles auswählen

oresult = byval(oform.createresultset)
zu machen, um beide unabhängig zu machen. Gääät nicht, laider.

Vielen Dank also nochmal, machen wir das Thema zu.

Wolli