wie lautet der Befehl zum Daten schreiben? (gelöst)

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Noebian
****
Beiträge: 158
Registriert: Sa, 03.10.2009 18:00

wie lautet der Befehl zum Daten schreiben? (gelöst)

Beitrag von Noebian »

Hi, ich habe ein Formular mit einem Hauptformular in Tabellenform und einem Unterformular in Blöcken, das ich mit dem Assistenten erstellt habe. Beide Formulare sind über die ID verknüpft. Funktioniert soweit ganz gut, die Tabelle bietet die Übersicht und das Unterformular die Details. Wenn ich nun aber die Daten im Unterformular verändere, werden die Veränderungen erst dann in die Tabelle übernommen, wenn ich das Gesamtformular schließe und wieder öffne. Ich habe mit oForm.reload experimentiert, aber das funzt nicht.
Sicherlich gibt es einen Befehl, der die Tabelle aktualisiert, aber wie lautet der?
Zuletzt geändert von Noebian am Do, 24.11.2011 18:03, insgesamt 1-mal geändert.
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40

herzliche Grüße aus Deutschlands Norden
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von F3K Total »

Hi,
der Befehl lautet .reload
Wenn er nicht funzt, scheint es an was anderem zu liegen, z.B. das die Daten noch nicht in die DB geschrieben wurden.
Vielleicht hilft Dir dieser Link:viewtopic.php?f=8&t=47265&start=15#p172750
Viel Erfolg Gruß R
Edit: mehr Infos oder eine Beispieldatei könnten helfen ...
Noebian
****
Beiträge: 158
Registriert: Sa, 03.10.2009 18:00

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von Noebian »

Hallo R.
ja, genau das ist das Problem: die Daten werden (noch) nicht in die Datenbank geschrieben. Auch dann nicht, wenn ich die Datensätze wechsle. Das passiert erst dann, wenn ich das Formular schließe und wieder öffne. Und genau das möchte ich per Makro erreichen: dass die Daten, die ich ins Unterformular eingetippselt habe in die DB geschrieben und so im Hauptformular sichtbar werden . updateRow funzt auch nicht....
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40

herzliche Grüße aus Deutschlands Norden
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von komma4 »

Beispieldatei... sonst sind alle Hilfeversuche "stochern im Nebel"
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Noebian
****
Beiträge: 158
Registriert: Sa, 03.10.2009 18:00

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von Noebian »

Nun denn: etwa so....
Dateianhänge
Beispiel.odb
schlichtes Beispiel
(12.66 KiB) 57-mal heruntergeladen
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40

herzliche Grüße aus Deutschlands Norden
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von komma4 »

Noebian hat geschrieben:die Daten werden (noch) nicht in die Datenbank geschrieben. Auch dann nicht, wenn ich die Datensätze wechsle.
Das ist nicht korrekt:

die Daten im Sub-Formular werden in die (DB-)Tabelle geschrieben - beim Wechsel des Datensatzes (wie erwartet).
[LO 3.4.3]

Die Tabellenansicht Deiner Daten wird (natürlich) ohne Befehl nicht aktualisiert.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von komma4 »

Achja... Makros waren keine dabei?

Warum schreibst Du hier im Makro-Unterforum?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Noebian
****
Beiträge: 158
Registriert: Sa, 03.10.2009 18:00

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von Noebian »

Warum schreibst Du hier im Makro-Unterforum?
weil ich nach einem Makro suche!
Nochmal zum Verständnis - funktioniert es bei dir anders als bei mir?
Ich ändere im rechten Feld "Hans" zu "Hansen". Tabellenfeld bleibt unverändert.
Ich wechsle den Datensatz und lasse mir Peter Petersen anzeigen.
Dann gehe ich zurück: Im Tabellenfeld steht immer noch "Hans", im rechten Feld "Hansen"
Erst wenn ich das Formular komplett schließe und wieder öffne, ist die Änderung im Tabellenfeld angekommen.
Ich möchte nun, dass das Tabellenfeld automatisch aktualisiert wird, wenn das rechte Feld verändert wurde.
Wie kann ich das erreichen?
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40

herzliche Grüße aus Deutschlands Norden
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von komma4 »

Der Befehl heisst: .reload()

Das wurde Dir oben schon gesagt, wenn Du damit experimentiert hast, dann zeige uns Deine Versuche...

Und Deine OOo-Version, Dein Betriebssystem, bitte!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Noebian
****
Beiträge: 158
Registriert: Sa, 03.10.2009 18:00

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von Noebian »

Hi,
ich habe folgendes versucht:

Code: Alles auswählen

sub reload
oForm=ThisComponent.drawpage.forms.getbyIndex(0)
oForm.reload
end sub
bei der Beispieldatenbank funtioniert das auch - bei meiner anderen, die ich in Arbeit habe, dummerweise nicht. Sie hat die gleiche Struktur, aber dort bewirkt der gleiche Befehl, dass die veränderte Zeile (SubForm) durch die unveränderte Tabellenzeile (Mainform) überschrieben wird. WEnn ich jedoch das veränderte Formular schließe und wieder öffne, dann hat die DB die veränderte Fassung übernommen.
Leider sind dort zuviele personenbezogene Daten als dass ich sie veröffentlichen könnte...

Nachtrag: ändere ich den Datensatz,gehe einmal zum nächsten und wieder zurück und führe dann das Makro aus, wird die Mainform geändert, so wie es sein soll. Merkwürdig, oder?

Nachtrag2: Jetzt wird es ganz verrückt. Öffne ich die Beispieldatenbank, funktioniert das Makro wie gewünscht. Öffne ich dann die andere DB und gehe danach zurück zur BeispielDB verhält sie sich plötzlich anders als vorher. Nun wird auch dort die veränderte SubForm von der unveränderten MainForm überschrieben...
Zuletzt geändert von Noebian am Mo, 31.10.2011 18:14, insgesamt 1-mal geändert.
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40

herzliche Grüße aus Deutschlands Norden
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von komma4 »

Tja, und die "Original"-Datei ist gleich Deinem Beispiel... nur: da geht's nicht?!

Das kann nicht sein.


Tipp:

Arbeite mit dem EVENT-Objekt, bei dem Ereignis: Nach dem Datensatzwechsel (des Sub-Formulars)

Und verwende XRAY und/oder MRI zur Untersuchung Deiner Objekte
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Noebian
****
Beiträge: 158
Registriert: Sa, 03.10.2009 18:00

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von Noebian »

Ich glaub', ich hab's jetzt. Das hier scheint zu funktionieren:

Code: Alles auswählen

sub reload
oForm=ThisComponent.drawpage.forms.getbyIndex(0)
oSubForm = oForm.getByName("SubForm")
oSubForm.updateRow
oForm.reload
end sub
ein Problem taucht dabei allerdings auf: die Anzeige springt automatisch zum ersten Datensatz. Wie komme ich denn da wieder zum aktuellen zurück? *seufz*
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40

herzliche Grüße aus Deutschlands Norden
Noebian
****
Beiträge: 158
Registriert: Sa, 03.10.2009 18:00

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von Noebian »

Auch gelöst. Ich will ja nicht nerven, aber vielleicht interessiert das auch andere:

Code: Alles auswählen

sub reload
dim oForm, oSubForm as object
dim intDatensatz as integer
oForm=ThisComponent.drawpage.forms.getbyIndex(0)
oSubForm = oForm.getByName("SubForm")
oSubForm.updateRow
intDatensatz = oForm.getRow()
oForm.reload
oForm.absolute(intDatensatz)
end sub
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40

herzliche Grüße aus Deutschlands Norden
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von F3K Total »

Also, ich verstehe die ganze Aufregung nicht.
Du hast eine einzige Tabelle, in der Du alle Daten verwalten willst. Du benötigst kein Unterformular. Packe die einzelnen Felder auf das gleiche Formular, und die Sache läuft.
Mein Rat: Setze Dich mit dem Aufbau von Formularen auseinander und nutze den Formular Navigator im Bearbeitungsmodus.
Dann siehst Du den Unterschied zwischen Deiner Datei und der angehängten.

Gruß R
Dateianhänge
Beispiel_Subform_Noebian.odb
(12.57 KiB) 53-mal heruntergeladen
Noebian
****
Beiträge: 158
Registriert: Sa, 03.10.2009 18:00

Re: wie lautet der Befehl zum Daten schreiben?

Beitrag von Noebian »

Super F3K!
Das kommt davon, wenn man sich auf die Assistenten verlässt. Deine Lösung ist natürlich viel simpler.
Danke schön. Ich habe viel zu kompliziert gedacht.
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40

herzliche Grüße aus Deutschlands Norden
Antworten