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
- openoffice 论坛上关于此主题的讨论:https://forum.openoffice.org/en/forum/viewtopic.php?p=495533&sid=1543d4682d62ce59fc2850853366b38a#p495533):
无需任何宏,您便可以将当前日期定义为表的默认值。当您保存缺少日期的新记录时,会插入该日期。
- 菜单:工具 -> 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