需要今天的日期作為 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

吉姆·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

相關內容