Tagesdatum in Datenbankfeld speichern

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

Moderator: Moderatoren

althoffc
**
Beiträge: 32
Registriert: Do, 04.05.2006 17:20
Wohnort: Konstanz

Tagesdatum in Datenbankfeld speichern

Beitrag von althoffc »

Hallo zusammen,

ich habe auf einem Datenbankformular einen Button ergänzt, mit dem ich ein Makro aufrufe, welches den aktuellen Datenbanksatz mit dem Tagesdatum speichern soll, damit die jeweils letzte Änderung eines Datensatzes an dem Datum erkennbar ist.
Dazu habe ich folgendes Makro erstellt.

Problem ist, dass in das Formularfeld 'dataenderung', welches mit einem Datumsfeld der Datenbank verknüpft ist, das Tagesdatum nicht übernommen wird. (Das Datum wird auch nicht in dem Formular angezeigt.)
In dem Textfeld ('datum', nur Test) wird das Tagesdatum angezeigt.
Mit der Message-Box wird erstaunlicher Weise auch für das Datumsfeld ("dataenderung") das Tagesdatum angezeigt.

Wo liegt der Fehler, dass das Datum weder im Formularfeld "dataenderung" angezeigt noch in der Datenbank gespeichert wird?

Danke und Gruß,
Carsten


sub ca_save_record
rem aktuellen Datensatz mit Änderungsdatum (Tagesdatum) speichern
rem ----------------------------------------------------------------------
dim oDoc as Object
dim oForm as Object
dim oField as Object
dim oText as Object
rem ----------------------------------------------------------------------

rem get access to the document
oDoc = ThisComponent
oForm = oDoc.DrawPage.Forms.getByName("frm_blaettle_verwalten")

oDate= oForm.getByName("dataenderung") 'Datumsfeld mit DB-Feld
oText = oForm.getByName("text") ' Textfeld auf dem Formular, kein DB-Feld

oText.text = Date
oDate.text= Date

msgbox "Heute ist der " & oText.text & " -- " & oDate.text

rem Datensatz speichern
oForm.updateRow()

end sub
ehvbs
*
Beiträge: 10
Registriert: Do, 13.07.2006 09:02
Wohnort: Kiel

Beitrag von ehvbs »

Hallo althoffc,

als Neuling sollte ich mich vielleicht zurückhalten, aber ich vermute,
dass dem an die Datenbank gebundenen Feld "dataenderung" der
Wert nicht im (wahrscheinlich) deutschen, sondern in einem der
Datenbank genehmen Format übergeben werden muss. Möglicherweise
erhält man einen Hinweis auf dieses spezifische Format, wenn man
sich die Tabelle direkt ansieht.

Mit einer Bitte um Entschuldigung für den Fall, dass es nix nutzt

ehvbs
althoffc
**
Beiträge: 32
Registriert: Do, 04.05.2006 17:20
Wohnort: Konstanz

Beitrag von althoffc »

Hallo ehvbs,

ich denke inzwischen auch, dass es an einem "falschen" Format liegen könnte.
Ich habe zwischenzeitlich folgendes herausgefunden:

Datumsfelder haben u.a. folgende zwei Eigenschaften:
.text = Zeichenkette, welche nur für die Anzeige (z.B. in einem Formular)
zur Anwendung kommt.
.date = Feldinhalt eines Datumsfeldes (also, das eigentliche Datum), welches
(so habe ich es verstanden), dann auch in der Datenbank landen
sollte.

Ich habe in dem zuvor gezeigten Makro die Zuweisung des Datums ent-
sprechend geändert:

oDate.date = Date

Dadurch wird zwar ein Datum in das Formularfeld abgestellt, jedoch ist es
immer das in den Eigenschaften des Formularfeldes angegebene kleinste
gültige Datum (z.B. 01.01.1800).

Im Datensatz wird das Datum immer noch nicht gespeichert.

So suche ich immer noch nach einer entsprechenden Konvertierung des
Datumsformates, damit es von der DB gefressen wird.

Gruß, Carsten
althoffc
**
Beiträge: 32
Registriert: Do, 04.05.2006 17:20
Wohnort: Konstanz

Beitrag von althoffc »

Hallo,

ich bin einen Schritt weiter gekommen:

Mit folgender Anweisung wird mir das Tagesdatum wie erwartet in dem
Formularfeld (13.07.2006) angezeigt.
Die Ausgabe der Message-Box liefert für oDate.date '20060713'.

Jetzt fehlt nur noch das Speichern des Datums in der DB-Tabelle.


oDate.date = CDateToIso(now())

msgbox "Heute ist der " & oText.text & " -- " & oDate.date

Gruß, Carsten
ehvbs
*
Beiträge: 10
Registriert: Do, 13.07.2006 09:02
Wohnort: Kiel

Beitrag von ehvbs »

Hallo althoffc,

ich versuche jetzt aus

viewtopic.php?p=30495

schlau zu werden. Das muss doch zu schaffen sein!

Gruss

ehvbs

P.S.

Hier ist (bei mir) funktionierender Code:

Code: Alles auswählen

Sub onUpdate( oEv as Event )
  Dim oForm   as Object : oForm   = oEv.Source.getModel().getParent()
  dim oField  as Object : oField  = oForm.getByName( "datdtUpdate" )
  oField.BoundField.updateDate( getCSSU_Date( Date() ) )
  oForm.updateRow()
End Sub

' http://de.openoffice.info/viewtopic.php?p=30495
' toxitom

Function getCSSU_Date( dtDatum )
   dim cssuDate as new com.sun.star.util.Date
   with cssuDate
      .day   = Day(   dtDatum )
      .month = Month( dtDatum )
      .year  = Year(  dtDatum )
   end with
   getCSSU_Date = cssuDate
End Function
(Alles was klappt: Toxitom - Alle Fehler: ehvbs)
althoffc
**
Beiträge: 32
Registriert: Do, 04.05.2006 17:20
Wohnort: Konstanz

[gelöst] Tagesdatum in Datenbankfeld speichern

Beitrag von althoffc »

Hallo ehvbs,

damit klappt es auch bei mir.
Vielen Dank.

PS: Wie kann ich diesen Thread als [gelöst] markieren?

Nachfolgend mein gesamtes Makro:


' aktuellen Datensatz mit Änderungsdatum (Tagesdatum) speichern
sub ca_save_record

' define variables
dim document as Object : document = ThisComponent.CurrentController.Frame
dim dispatcher as Object : dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim oDoc as Object : oDoc = ThisComponent

dim oForm as Object : oForm = oDoc.DrawPage.Forms.getByName("frm_blaettle_verwalten")
dim oDate as Object : oDate= oForm.getByName("dataenderung")
dim oText as Object : oText = oForm.getByName("datum")

' aktuelles Tagesdatum in DB-gerechtes Format wandeln
oDate.BoundField.updateDate( getDB_Date( Date() ) )

' Datensatz speichern
oForm.updateRow()
dispatcher.executeDispatch(document, ".uno:RecSave", "", 0, Array())
end sub


' Datumsformat in DB-gerechtes Format wandeln
Function getDB_Date( Datum )
dim cssuDate as new com.sun.star.util.Date
with cssuDate
.day = Day( Datum )
.month = Month( Datum )
.year = Year( Datum )
end with
getDB_Date = cssuDate
End Function
Antworten