需要将今天的日期作为 Libre Office 中表单字段的默认值

需要将今天的日期作为 Libre Office 中表单字段的默认值

Libre Office Base 的新手。

我找到了如何将表格中的默认值设置为当前日期的方法。现在我需要让当前日期显示在表单中的相应字段中。

我尝试插入“默认值”TODAY()CURRENT_DATE。不知为何,它们都给出了 1899 年 11 月 18 日。

有人知道如何做到这一点吗?

答案1

此宏将今天的日期写入日期字段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

要分配操作:表单导航器 > myForm > 表单属性 > 事件 > 例如加载时

答案2

使用以下宏代码。这里,表的列(不是控件名称)称为“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

编辑表单,并在表单属性中将宏分配给“记录改变后”事件。

表单属性

现在,每当记录的日期为空时(例如开始新记录时),日期字段应默认为当前日期。

openoffice 论坛上有几个关于此主题的讨论:

答案3

Jim K 的回答

无需任何宏,您便可以将当前日期定义为表的默认值。当您保存缺少日期的新记录时,会插入该日期。

  • 菜单:工具 -> SQL...
ALTER TABLE "tbl" ALTER COLUMN "col" DATE DEFAULT CURRENT_DATE

将“tbl”和“col”替换为表和列的实际名称。[执行]

已检查并运行正常:

在此处输入图片描述

答案4

您知道吗,我在寻求帮助后不久就解决了我的问题。

以下是我将数据库日期列中的默认值设置为未绑定日期控件的解决方案。我确信有比使用更好的方法oCol.String,我很高兴听到更好的方法。

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

相关内容