Libre Office Base の新機能。
テーブルのデフォルト値を現在の日付に設定する方法を見つけました。次に、フォームの対応するフィールドに現在の日付を表示する必要があります。
TODAY()
「デフォルト値」とに挿入してみましたCURRENT_DATE
。 どちらも何らかの理由で 1899 年 11 月 18 日を返します。
これを実行する方法について何かアイデアはありますか?
答え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
からジム・Kの回答:
- OpenOffice フォーラムでのこのトピックに関するディスカッション:https://forum.openoffice.org/en/forum/viewtopic.php?p=495533&sid=1543d4682d62ce59fc2850853366b38a#p495533):
マクロを使わずに、現在の日付をテーブルのデフォルト値として定義できます。日付が欠落している新しいレコードを保存すると、日付が挿入されます。
- メニュー:ツール -> 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