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".
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
- discusiones sobre este tema en el foro de openoffice:https://forum.openoffice.org/en/forum/viewtopic.php?p=495533&sid=1543d4682d62ce59fc2850853366b38a#p495533):
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:
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