Precisa da data de hoje como valor padrão em um campo de formulário no Libre Office

Precisa da data de hoje como valor padrão em um campo de formulário no Libre Office

Novo no Libre Office Base.

Descobri como definir o valor padrão em uma tabela para a data atual. Agora preciso que a data atual apareça no campo correspondente de um formulário.

Eu tentei inserir em "valor padrão" TODAY()e CURRENT_DATE. Ambos me dão 18 de novembro de 1899 por algum motivo.

Alguém tem alguma idéia de como fazer isso?

Responder1

Esta macro grava a data de hoje no campo Data 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

Para atribuir a ação: Form Navigator > myForm > Form Properties > Events > por exemplo, Ao carregar

Responder2

Use o código de macro a seguir. Aqui, a coluna da tabela (não o nome do controle) é chamada de “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

Edite o formulário e, nas propriedades do formulário, atribua a macro ao evento "após alteração do registro".

propriedades do formulário

Agora, sempre que a data de um registro estiver vazia, como quando um novo registro é iniciado, o campo de data deverá assumir como padrão a data atual.

Existem várias discussões sobre este tópico no fórum do openoffice:

Responder3

DeA resposta de Jim K:

Sem nenhuma macro você pode definir a data atual como valor padrão da tabela. É inserido quando você salva um novo registro sem a data.

  • menu:Ferramentas -> SQL...
ALTER TABLE "tbl" ALTER COLUMN "col" DATE DEFAULT CURRENT_DATE

substitua "tbl" e "col" pelos nomes reais da tabela e coluna. [Executar]

Verificado e funciona perfeitamente:

insira a descrição da imagem aqui

Responder4

Você não sabe, resolvi meu problema logo depois de pedir ajuda.

Aqui está minha solução para definir um valor padrão de uma coluna de data do banco de dados em um controle de data não vinculado. Tenho certeza de que existe uma maneira melhor do que usar oCol.Stringe ficaria feliz em ouvir uma maneira melhor.

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

informação relacionada