Datum TT.MM.JJJJ wird nicht gespeichert

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

egottfried
***
Beiträge: 55
Registriert: Do, 25.08.2005 17:42
Wohnort: Torgau
Kontaktdaten:

Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von egottfried »

hallo,
mit einem Problem kämpfe ich noch. In meiner Tabelle gibt es eine Spalte Vorgangsdatum (Format: Text). Dort soll das aktuelle Datum bei der Erstellung eines neuen Vorgangs rein. Auch das Kontrollfeld im zugehörigen Formular ist ein Textfeld. Über eine daneben angeordnete Schaltfläche füge ich das aktuelle Datum in das Textfeld ein:

Code: Alles auswählen

Sub Datum
 Dim a as String
 a = Date()	
 oDoc = ThisComponent
 oForm = oDoc.drawpage.forms(0)
 oFeld = oForm.getByName("datum")
 oFeld.text = cStr(a)
End Sub
Das Datum wird ins Formular eingesetzt, im Format TT:MM:JJJJ - so wie es die aktuellen locale Einstellungen vorgeben.
Beim Speichern des DS wird es nicht mit gespeichert. Ändere ich es auf das Format TT.MM.JJ dann wird es gespeichert.
Kopiere ich das Datum in ein anderes Feld und dann wieder zurück, dann wird auch das Langformat übernommen.
Das cStr(a) im Code müsste doch eigenlich einen String, also Text erzeugen?
mit freundl. Grüßen
egottfried
OpenOffice.org 3.1 / Debian Lenny
http://www.gokusa.de
egottfried
***
Beiträge: 55
Registriert: Do, 25.08.2005 17:42
Wohnort: Torgau
Kontaktdaten:

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von egottfried »

hallo,
ich habe es vorerst so gelöst, dass beim Fokuserhalt des Textfeldes (nach dem Einsetzen des Datums) folgendes (aufgezeichnete) Makro gestartet wird:

Code: Alles auswählen

sub copy
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
end sub
Auf diese Weise wird der Feldinhalt kopiert und gleichzeitig wieder eingesetzt mit dem Ergebnis, dass das Datum, in diesem Falle 03.07.2007 im Datensatz gespeichert wurde.
Wenn jemand weiß, wie dieser Umweg zu vermeiden ist - nehme entsprechende Tipps gerne entgegen.
mit freundlichen Grüßen
egottfried
OpenOffice.org 3.1 / Debian Lenny
http://www.gokusa.de
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von komma4 »

egottfried hat geschrieben:Das cStr(a) im Code müsste doch eigenlich einen String, also Text erzeugen?
das macht die Funktion auch - Du kannst das Ergebnis ja sehen.....


Wie überträgst Du die Eingabe in die Zielspalte des Datensatzes? Vom Textfeld her schon an den Datensatz gebunden?
Datensatz-Definition mit zweistelliger Jahreszahl - aber vierstelliger Darstellung?
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)
egottfried
***
Beiträge: 55
Registriert: Do, 25.08.2005 17:42
Wohnort: Torgau
Kontaktdaten:

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von egottfried »

hallo,
ich gebe einen Datensatz ein, komme zur Schaltfläche (Tab 9), Enter, Datum steht in Langform im Textfeld, es ist gebunden an das Datumsfeld des Datensatzes. Nach einigen weiteren Feldern springt der Focus aufs Unterformular. Der Vollständigkeit halber gebe ich hier auch einen Datensatz ein. Wechsele ich nun probehalber auf den nächsten DS und gehe dann wieder zurück, ist das Datumsfeld leer.
Gebe ich das Langformat manuell ein, wird es gespeichert.
Kopiere ich den eingefügten String im Feld (Strg+C) und füge ihn mit (Strg+V) sofort wieder ein, wird er gespeichert. Dieses Kopieren-Einfügen habe ich nun s.o. eingebaut.
Wieso dieses Verhalten auftritt weiß ich nicht, da der Rechner auf TTMMJJJJ eingestellt ist.
mit freundlichen Grüßen
egottfried
00o2.2.1 Kanotix/DebianEtch
OpenOffice.org 3.1 / Debian Lenny
http://www.gokusa.de
egottfried
***
Beiträge: 55
Registriert: Do, 25.08.2005 17:42
Wohnort: Torgau
Kontaktdaten:

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von egottfried »

hallo,
seht euch doch bitte meinen Code im ersten und zweiten Beitrag nochmal an. Das aufgezeichnete Makro mit den Copy und Paste Befehlen ist keine Lösung. Kann man diese Befehle auch außerhalb des Dispatcher Modells verwenden?
mit freundlichem Gruß
egottfried
OpenOffice.org 3.1 / Debian Lenny
http://www.gokusa.de
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von komma4 »

had a closer look:

Du setzt den TEXT eines Datums-controls. Das funktioniert erstmal, da auch dieses control (praktisch) ein "Eingabefeld" ist.

Du möchtest aber das Datum eines DATUM-controls setzen.
Das bedeutet: die Eigenschaft .DATE des controls, welches einen LONG-Wert erwartet. Copy/Paste funktioniert dann, da das clipboard die Zeichenkette nimmt, aber den Wert einfügt (Multi-clipboard und autom. Formaterkennung).
Soviel zur Theorie.
Praxis:

Code: Alles auswählen

oFeld.Date = CDateToISO( Date ) 
Erklärung:
DATE gibt den nummerischen Wert zurück 39269
Daraus wird durch CDateToISO 20070706 - ein LONG-Wert, der akzeptiert wird.

Have fun - bin mal im verlängertem WE
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)
egottfried
***
Beiträge: 55
Registriert: Do, 25.08.2005 17:42
Wohnort: Torgau
Kontaktdaten:

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von egottfried »

hallo,
der Longwert wurde eingesetzt ins Feld, aber auch nicht gespeichert, es hatte anscheinend nichts mit dem Format zu tun. Sobald ich (nach dem Einsetzen des Datums per Code) etwas in diesem Feld veränderte, egal bei welchem Format, z. B. einfach eine Leerstelle dahinter gesetzt habe, dann übernahm es den Feldinhalt. Ansonsten verschwandt der Inhalt beim Speichern und Neu laden.
Ich hatte die Idee, es könnte sich wie bei meinem Problem im Beitrag Cursor ins Formular setzen - beim Start
viewtopic.php?f=8&t=12889
um den Unterschied zwischen Feld und View des Feldes handeln. Deshalb habe ich folgenden Code ausprobiert:

Code: Alles auswählen

Sub Datum
Dim a as String
 a = Date() 
 oDoc = ThisComponent
 oDocView = oDoc.getCurrentController()
 oForm = oDoc.drawpage.forms(0)
 oFeld = oForm.getByName("datum")
 oDocView.getControl(oFeld).setFocus()
 oDocView.getControl(oFeld).text = cDate( a )
End Sub
Und siehe da, jetzt klappt auch das. Auf das "set.Focus" kann man vielleicht auch verzichten, probier ich noch.
mit freundlichen Grüßen
egottfried
OpenOffice.org 3.1 / Debian Lenny
http://www.gokusa.de
Gino
*
Beiträge: 12
Registriert: Sa, 04.10.2008 12:43

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von Gino »

Hallo Zusammen,

ich habe mit meiner Datenbank genau das gleiche Problem.
Dort werden vier verschiedene Revisionstermine in 4 Datefields im Formular via Makro eingetragen. Beim speichern des Datensatzes wird kein Datum in die Datenbank übernommen.
Der Trick mit

Code: Alles auswählen

oDocView.getControl(DF_2).setFocus()
funktioniert zwar, aber leider kann ich ja nicht gleichzeitig den Focus auf alle vier DateFields setzen. :(

Auch bei TextFields mit via Makro eingetragenen Texten funktioniert das nicht, wenn das Field keinen Focus hat.

Zwischenschritte mit

Code: Alles auswählen

	oForm.upDateRow ()  'speichern
	oForm.reload()
bringen keinen Erfolg.

Ja, die Feldtypen sind vorher entsprechend zugeordnet worden !

Schade, ein Traum ist zerplatzt.

Oder gibt es zwischenzeitlich schon eine andere Lösung?

Zur Info:
BS > WinXP
OOo > 3.0


Enttäuschte Grüsse von

Gino
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von eBayer »

Hallo,
ich hatte ein ähnliches Problem wenn ich ein Eingabefeld per Macro gefüllt habe.
Habe dann eine Lösung im internationalen Forum gefunden und für mich angepasst.
Der Hintergrund ist, daß die Eingabemaske nichts davon mitbekommt, wenn die Änderung per Macro erfolgt. Es wird intern offensichtlich ein Modifyed-Flag erwartet damit Base die Daten automatisch speichert.
Unter dem beigefügten Link findest Du, wie ich es gelöst habe.
viewtopic.php?f=8&t=15659#p97121

Grüße und viel Erfolg
eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Gino
*
Beiträge: 12
Registriert: Sa, 04.10.2008 12:43

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von Gino »

Hallo eBayer,

vielen Dank für die schnelle Antwort.

Ich habe Deinen Code ausprobiert und dabei festgestellt, dass das Datum jetzt wie eingefroren in den Datefields bleibt.
Wenn ich in einen anderen Datensatz wechsele bleibt das Datum immer noch in den Feldern mit gleichem Wert.

Es wird auch nichts in die Datenbank geschrieben, egal ob ich über die Navigationsleiste oder die Form speichere. :(

Es scheint so, als wenn der Text oder das Datum wie ein Layer über dem Feld liegt.

Das Gleiche passiert auch mit Memoboxen. Allerdings ist es noch immer so, dass wenn ich z.B. die Memoboxen oder DateFields via Hand fülle, auch mehrere gleichzeitig, die Texte oder Daten in die Datenbank geschrieben werden.
Der Datentyp scheint also zu stimmen.

Wenn ich einen solch "eingfrorenen" Wert manuelle lösche, dann wird das Speichernsymbol > Navigationsleiste zwar aktiv geschaltet aber ein kick darauf löst kein speichern aus. Da Symbol bleibt weiter aktiv. Anders ist es, wenn ich auf das Speichernsymbol in der oberen Symbolleiste klicke. Dann wird gespeichert und das Symbol in der Navigationsleiste ist inaktiv.
??????????

Trotzdem Danke für Deine Unterstützung.

Mit ratlosen Grüssen.

Gino
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von eBayer »

Hallo Gino,
bei mir klappt das einwandfrei, wie ich es beschrieben habe.
Bist Du sicher, daß Du keinen Fehler im Code hast?
Ich würde im Zweifelsfall einfach mal ein simples Textfeld mit Bindung an ein Datenbankfeld in der Maske anlegen.
Dann mit einem PushButton per Macro das Feld mit irgendeinem Text füllen "Otto" oder irgendwas.
Der Text muß dann sofort in dem Textfeld sichtbar werden und wenn Du zu einem anderen Datensatz blätterst, müßte oOffice Dich fragen ob die Daten gespeichert werden sollen. Mit einem Datumsfeld habe ich es noch nicht probiert, es sollte aber genauso gehen.
Ich setze allerdings oOffice 3.01 ein..... hast Du vielleicht eine ältere Version?
Also probiers mal weiter und gib nicht auf.
Gruß
eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Gino
*
Beiträge: 12
Registriert: Sa, 04.10.2008 12:43

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von Gino »

Hallo eBayer,

erstmal vielen Dank für Deine Infos.
eBayer hat geschrieben:bei mir klappt das einwandfrei, wie ich es beschrieben habe.
Bei Textfields ist das bei mir auch kein Problem, wogegen sich die DateFields immer noch störrisch verhalten.
eBayer hat geschrieben:Bist Du sicher, daß Du keinen Fehler im Code hast?
Da bin ich mir sehr sicher. Ich habe auch diverse Codevarianten durchprobiert. Bin da seit zwei Tagen dran. :(

Die Eigenschaften der DateFields habe ich auch verglichen, diese sind vollkommen indentisch.
Auch die Feldtypen in der Tabelle stimmen überein.

Ich hänge die Datei mal an, vielleicht hat jemand mal Zeit und schaut sich das Ganze mal an.

Dank im voraus.

Gino
Dateianhänge
Makro_DB.odb
(14.4 KiB) 115-mal heruntergeladen
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von eBayer »

Hallo Gino,
es war etwas problematisch, die richtige Lösung zu finden.... aber nun funktioniert es gut.
War halt etwas Forschungsarbeit. Ich hoffe, nun kommst Du ein Stück weiter.
Falls Du noch Fragen hast.... ich helfe gerne - kann ja dabei auch nur lernen.
Ich hänge das nun laufende Programm hier an.
Viel Spaß - es lohnt sich.
Gruß eBayer
Makro_DB.odb
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Gino
*
Beiträge: 12
Registriert: Sa, 04.10.2008 12:43

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von Gino »

Guten Abend eBayer,

vielen Dank für die wirklich kompetente Unterstützung.
Du hast mir sehr geholfen.

Ich habe noch etwas rumprobiert und komme zu folgendem Fazit:

Die Daten der DateFields werden nur übernommen wenn nachfolgend in einem anderen Feld ein noch Eintrag erfolgt


Und wenn zum Eintragen der Werte folgender Code von Dir verwendet wird:

Code: Alles auswählen

	oDocView = oDoc.getCurrentController()
	oDAT = oForm.getByName("datZielDat1")  'Name anpassen!
	oDatCtr = oDoc.CurrentController.GetControl(oDAT)
	oDatCtr.date = startdte
	oDocView.getControl(oDAT).setDate(startdte)
	oDocView.getControl(oDAT).setFocus()
Der Eintrag bei den DateFields kann auch als .Date erfolgen.

Code: Alles auswählen

oDatCtr.date = startdte
Du hattest es als Text übergeben.

Code: Alles auswählen

oDatCtr.text = startdte
Es funktionieren also beide Varianten.

Da die Memoboxen, die ja derzeit via Code beschrieben werden, händisch befüllt werden sollen werde ich ein "(pseudo)TextField" einrichten welches ich in der Maske verstecke und dort blind beschreibe. :wink:
eBayer hat geschrieben:Falls Du noch Fragen hast.... ich helfe gerne - kann ja dabei auch nur lernen.
Nochmals Danke, auch für das Angebot auf ich bestimmt noch mal zugreife.

Schöne Grüsse.

Gino
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Datum TT.MM.JJJJ wird nicht gespeichert

Beitrag von eBayer »

Hallo Gino,
Du schreibst: "Die Daten der DateFields werden nur übernommen wenn nachfolgend in einem anderen Feld ein noch Eintrag erfolgt"
Das hat mich veranlasst, noch etwas zu forschen. Die Dir gestern überlassene Programmversion funktioniert zwar, aber ist unsauber, besonders hinsichtlich der Focusschieberei. Es gibt einen erheblich besseren, kürzeren und vor allen Dingen bombensicheren Lösungsweg, den ich in der beiliegenden Version Deines Testprogramms realisiert habe. Die darin enthaltenen Funktionen sind so allgemein gehalten, daß sie überall benutzt werden können. Besonders hilfreich wird Dir die Funktion "DisplayMethods" sein (habe ich aus dem internationalen Forum übernommen), mit der Du beliebige Objecte untersuchen kannst. So bin ich im übrigen auch zu meiner Lösung gekommen. Aber ich denke, es lohnt sich, dein Programm noch einmal gegen die beiliegende Version auszutauschen.
Ich packe übrigens allgemeingültige Sub´s und Funktionen in eine Library, die in in oO unter "Meine Macros" angelegt habe. Damit stehen sie mir in jedem anderen Programm zur Verfügung und ich brauche sie nur einmal korrigieren, falls es was zu ändern gibt.

Viel Spaß weiterhin und beste Grüße
eBayer
Makro_DB.odb
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Antworten