Нужна сегодняшняя дата в качестве значения по умолчанию в поле формы в Libre Office

Нужна сегодняшняя дата в качестве значения по умолчанию в поле формы в Libre Office

Новое в 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

ОтОтвет Джима К.:

Без макроса можно определить текущую дату как значение по умолчанию для таблицы. Она вставляется при сохранении новой записи с отсутствующей датой.

  • меню:Инструменты -> 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

Связанный контент