![Precisa da data de hoje como valor padrão em um campo de formulário no Libre Office](https://rvso.com/image/1520680/Precisa%20da%20data%20de%20hoje%20como%20valor%20padr%C3%A3o%20em%20um%20campo%20de%20formul%C3%A1rio%20no%20Libre%20Office.png)
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".
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
- discussões sobre este tópico no fórum do openoffice:https://forum.openoffice.org/en/forum/viewtopic.php?p=495533&sid=1543d4682d62ce59fc2850853366b38a#p495533):
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:
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.String
e 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