Necesita la fecha de hoy como valor predeterminado en un campo de formulario en Libre Office

Necesita la fecha de hoy como valor predeterminado en un campo de formulario en Libre Office

Nuevo en Libre Office Base.

Descubrí cómo establecer el valor predeterminado en una tabla en la fecha actual. Ahora necesito que la fecha actual aparezca en el campo correspondiente de un formulario.

Intenté insertar en "valor predeterminado" TODAY()y CURRENT_DATE. Ambos me dan el 18 de noviembre de 1899 por alguna razón.

¿Alguien tiene alguna idea sobre como hacer esto?

Respuesta1

Esta macro escribe la fecha de hoy en el campo Fecha 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 asignar la acción: Navegador de formulario > myForm > Propiedades del formulario > Eventos > por ejemplo, al cargar

Respuesta2

Utilice el siguiente código de macro. Aquí, la columna de la tabla (no el nombre del control) se llama "MiFecha".

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 el formulario y, en las propiedades del formulario, asigne la macro al evento "después del cambio de registro".

propiedades del formulario

Ahora, siempre que la fecha de un registro esté vacía, como cuando se inicia un nuevo registro, el campo de fecha debería ser la fecha actual de forma predeterminada.

Hay varias discusiones sobre este tema en el foro de OpenOffice:

Respuesta3

DeLa respuesta de Jim K.:

Sin ninguna macro, puede definir la fecha actual como valor predeterminado para la tabla. Se inserta cuando guarda un nuevo registro al que le falta la fecha.

  • menú: Herramientas -> SQL...
ALTER TABLE "tbl" ALTER COLUMN "col" DATE DEFAULT CURRENT_DATE

reemplace "tbl" y "col" con los nombres reales de la tabla y la columna. [Ejecutar]

Comprobado y funciona perfectamente:

ingrese la descripción de la imagen aquí

Respuesta4

¿No lo sabes? Resolví mi problema poco después de pedir ayuda.

Aquí está mi solución para establecer un valor predeterminado de una columna de fecha de la base de datos en un control de fecha independiente. Estoy seguro de que hay una forma mejor que usar oCol.String, y me encantaría conocer una forma mejor.

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

información relacionada