Новое в Libre Office Base.
Я нашел, как установить текущую дату в качестве значения по умолчанию в таблице. Теперь мне нужно, чтобы текущая дата отображалась в соответствующем поле формы.
Я пробовал вставлять в "значение по умолчанию" TODAY()
и CURRENT_DATE
. Они оба почему-то выдают мне 18 ноября 1899 года.
Есть ли у кого-нибудь идеи, как это сделать?
решение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