Neu bei Libre Office Base.
Ich habe herausgefunden, wie man den Standardwert in einer Tabelle auf das aktuelle Datum setzt. Jetzt muss das aktuelle Datum im entsprechenden Feld in einem Formular angezeigt werden.
Ich habe versucht, in „Standardwert“ TODAY()
und einzufügen CURRENT_DATE
. Aus irgendeinem Grund geben sie mir beide den 18. November 1899.
Hat jemand eine Idee, wie das geht?
Antwort1
Dieses Makro schreibt das heutige Datum in das Datumsfeld myDateField
:
Sub writeDate
Dim today As New com.sun.star.util.Date
today.Month = Month( Now )
today.Day = Day( Now )
today.Year = Year( Now )
form = ThisComponent.DrawPage.Forms(0) ' first form
form.myDateField.BoundField.UpdateDate( today )
End Sub
So weisen Sie die Aktion zu: Formularnavigator > myForm > Formulareigenschaften > Ereignisse > zB Beim Laden
Antwort2
Verwenden Sie den folgenden Makrocode. Hier heißt die Spalte der Tabelle (nicht der Steuerelementname) „MyDate“.
Sub DefaultDateInForm (oEvent As Object)
oForm = oEvent.Source
lDateCol = oForm.findColumn("MyDate")
If oForm.getString(lDateCol) = "" Then
dateStamp = Format(Now, "YYYY-MM-DD")
oForm.updateString(lDateCol, dateStamp)
End If
End Sub
Bearbeiten Sie das Formular und weisen Sie in den Formulareigenschaften das Makro dem Ereignis „Nach Datensatzänderung“ zu.
Wenn nun das Datum eines Datensatzes leer ist, z. B. wenn ein neuer Datensatz begonnen wird, sollte das Datumsfeld standardmäßig das aktuelle Datum anzeigen.
Es gibt mehrere Diskussionen zu diesem Thema im OpenOffice-Forum:
Antwort3
AusJim Ks Antwort:
- Diskussionen zu diesem Thema im OpenOffice-Forum:https://forum.openoffice.org/en/forum/viewtopic.php?p=495533&sid=1543d4682d62ce59fc2850853366b38a#p495533):
Ohne Makro kann das aktuelle Datum als Standardwert für die Tabelle definiert werden. Dieser wird dann beim Speichern eines neuen Datensatzes ohne Datum eingefügt.
- Menü: Extras -> SQL ...
ALTER TABLE "tbl" ALTER COLUMN "col" DATE DEFAULT CURRENT_DATE
Ersetzen Sie "tbl" und "col" durch die tatsächlichen Namen der Tabelle und Spalte. [Ausführen]
Überprüft und funktioniert einwandfrei:
Antwort4
Und siehe da, ich hatte mein Problem kurz nach der Bitte um Hilfe gelöst.
Hier ist meine Lösung zum Festlegen eines Standardwerts aus einer Datenbankdatumsspalte in einem ungebundenen Datumssteuerelement. Ich bin sicher, dass es eine bessere Möglichkeit als die Verwendung von gibt oCol.String
, und ich würde mich freuen, eine bessere Möglichkeit zu hören.
Sub Form_WhenLoading
' Default control dteDateFrom to SystemParam.DfltRptFrDate
' and control dteDateTo to SystemParam.DfltRptToDate
dim oForm as object
dim oControl as object
dim oResultSet as object
dim oContext as object
dim oDB as object
dim oStmt as object
dim sSQL as string
dim oCol as object ' Column of oResultSet
Dim aDate As New com.sun.star.util.Date
oForm = ThisComponent.DrawPage.Forms.getByIndex(0)
oController = ThisComponent.CurrentController
oContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDb = oContext.getByName("DatabaseName")
oConn = oDb.getConnection("","")
sSQL = "SELECT ""DfltRptFrDate"", ""DfltRptToDate"" from ""SystemParam"" WHERE ""SystemKey"" = '0';"
oStmt = oConn.createStatement()
oResultSet = oStmt.executeQuery(sSQL)
If Not IsNull(oResultSet) Then
oResultSet.next
End If
' dteDateFrom
oCol = oResultSet.Columns.getByName("DfltRptFrDate")
oControl = oForm.GetByName("dteDateFrom")
' OCol.String is YYYY-MM-DD
aDate.year = left(oCol.String, 4)
aDate.month = mid(oCol.String, 6,2)
aDate.day = right(oCol.String, 2)
If IsEmpty(oControl.Date) Then
oControl.Date = aDate
oControl.text = oCol.String
oControl.Commit()
End If
' dteDateTo
oCol = oResultSet.Columns.getByName("DfltRptToDate")
oControl = oForm.GetByName("dteDateTo")
aDate.year = left(oCol.String, 4)
aDate.month = mid(oCol.String, 6,2)
aDate.day = right(oCol.String, 2)
If IsEmpty(oControl.Date) Then
oControl.Date = aDate
oControl.text = oCol.String
oControl.Commit()
End If
End sub