Seite 1 von 3
[gelöst]Makro Zeitstempel Firebird Text, CLOB, Timestamp
Verfasst: So 16. Jan 2022, 19:12
von malt14
Guten Tag,
für Writer und Calc fand ich im Internet ein Makro, mit welchem man über einen Tastaturbefehl an der jeweiligen Position einen Zeitstempel einfügen kann, Beispiel: 2022-01-16 19:11. Für Base bzw. Firebird konnte ich keines entdecken.
Ein solches über einen Tastaturbefehl ausführbares Makro für die Firebird Feldtypen würde das manuelle Eingeben eines Zeitstempels erübrigen.
Grüße
Malt
Version: 7.2.4.1 (x64) / LibreOffice Community
Build ID: 27d75539669ac387bb498e35313b970b7fe9c4f9
CPU threads: 6; OS: Windows 10.0 Build 19044; UI render: Skia/Raster; VCL: win
Locale: de-DE (de_DE); UI: de-DE
Calc: CL
Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp
Verfasst: So 16. Jan 2022, 21:07
von RobertG
Hallo Malt,
der übliche Weg ist es, so etwas nicht innerhalb eines Formulars oder Makros zu erledigen sondern mit den Tabellen. Geht in Firebird z.B. mit einem Trigger, aber natürlich nur bei einem Timestamp-Field:
Code: Alles auswählen
CREATE OR ALTER TRIGGER BEFORE_IN_UP_NAME FOR "Tabelle"
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN
NEW."Aenderungs_Stamp" = CURRENT_TIMESTAMP;
END;
Den Default-Zeitstempel beim Insert eines neuen Datensatzes kannst Du genau so erstellen wie im Handbuch für die Änderung von Tabellen beschrieben.
Im Makro erzeugst Du so einen Zeitstempel über so etwas wie
Code: Alles auswählen
stTimestamp = Year(Now()) & "-" & Right("0" & Month(Now()),2) & "-" & Right("0" & Day(Now()),2) & "_" & Right("0" & Hour(Now()),2) & ":" & Right("0" & Minute(Now()),2) & ":" & Right("0" & Second(Now()),2)
… nur ist das dann nicht der Zeitstempel des Abspeicherns. Nutze ich als Zeitstempel für Dokumente, die ich automatisch speichere.
Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp
Verfasst: Mo 17. Jan 2022, 19:09
von malt14
Hallo Robert,
Dank für die Informationen.
In manchen Tabellen habe ich eine Kommentarspalte [Typ CLOB]. Dort trage ich zu verschiedenen Zeitpunkten Text ein. Um zu wissen, wann die unterschiedlichen Einträge erfolgten, muss ich einen Zeitstempel tippen. Es wäre bequemer und schneller das mit einem Tastaturbefehl (Makro?) zu erledigen.
Grüße
Malt
Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp
Verfasst: Sa 22. Jan 2022, 13:11
von malt14
Guten Tag,
in einer Tabelle in einem CLOB Feld habe ich das Makro per Extras/Makro/Makro ausführen gestartet, ein Zeitstempel wird in das Feld nicht geschrieben.
Code: Alles auswählen
REM ***** BASIC *****
SUB Timestamp
stTimestamp = Year(Now()) & "-" & Right("0" & Month(Now()),2) & "-" & Right("0" & Day(Now()),2) & "_" & Right("0" & Hour(Now()),2) & ":" & Right("0" & Minute(Now()),2) & ":" & Right("0" & Second(Now()),2)
END SUB
Grüße
Malt
Version: 7.2.4.1 (x64) / LibreOffice Community
Build ID: 27d75539669ac387bb498e35313b970b7fe9c4f9
CPU threads: 6; OS: Windows 10.0 Build 19044; UI render: Skia/Raster; VCL: win
Locale: de-DE (de_DE); UI: de-DE
Calc: CL
Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp
Verfasst: Sa 22. Jan 2022, 15:49
von RobertG
Das Codestück erzeugt nur einen Zeitstempel, den Du Dir z.B. per
anschauen kannst. Das sagt nichts darüber aus, wie der Zeitstempel irgendwo in einen Text eingefügt werden kann.
Soll der Zeitstempel an das Ende eines Textes angefügt werden, der in eine Memo-Feld steht, dann könnte das mit einem Button im selben Formular wie das Memo-Feld so gehen:
Code: Alles auswählen
SUB Zeitstempel(oEvent AS OBJECT)
oForm = oEvent.Source.Model.Parent
oMemoFeld = oForm.getByName("Memo")
stMemo = oMemoFeld.Text
stTimestamp = Year(Now()) & "-" & Right("0" & Month(Now()),2) & "-" & Right("0" & Day(Now()),2) & "_" & Right("0" & Hour(Now()),2) & ":" & Right("0" & Minute(Now()),2) & ":" & Right("0" & Second(Now()),2)
oMemoFeld.Text = stMemo & stTimestamp
END SUB
Gruß
Robert
Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp
Verfasst: So 30. Jan 2022, 18:27
von malt14
Guten Tag,
Danke für Deine Hilfe und Mühe, Robert.
Beim Ausführen des Makros erhalte ich eine Fehlermeldung. Das liegt wohl an meinen nicht vorhandenen Makro Kenntnissen.
Ich werde künftig versuchen, mich mit dem Zeitstempel zu beschäftigen und hier schreiben, falls ich Erfolg habe.
Grüße
Malt
Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp
Verfasst: Mo 29. Mai 2023, 11:59
von malt14
Guten Tag,
Tabelle1 ,

- timestampInText2023-05-29 111727.png (59.54 KiB) 5010 mal betrachtet
das Makro Zeitstempel:
Code: Alles auswählen
REM ***** BASIC *****
SUB Zeitstempel(oEvent AS OBJECT)
oForm = oEvent.Source.Model.Parent
oMemoFeld = oForm.getByName("btext")
stMemo = oMemoFeld.Text
stTimestamp = Year(Now()) & "-" & Right("0" & Month(Now()),2) & "-" & Right("0" & Day(Now()),2) & "_" & Right("0" & Hour(Now()),2) & ":" & Right("0" & Minute(Now()),2) & ":" & Right("0" & Second(Now()),2)
oMemoFeld.Text = stMemo & stTimestamp
END SUB
startete ich im CLOBfeld "btext" mit dem Button Zeitstempel.
Code: Alles auswählen
Meldung:
BASIC-Laufzeitfehler.
Objektvariable nicht belegt.
Zeile markiert:

- Zeitstempel-2023-05-29 113126.png (41.13 KiB) 5010 mal betrachtet
Ich versuchte auch das Makro WriteTimestampToClobField, geschrieben von Bing chat:
Code: Alles auswählen
REM ***** BASIC *****
Sub WriteTimestampToClobField
Dim oForm As Object
Dim oField As Object
Dim oTable As Object
Dim oColumn As Object
Dim oRowSet As Object
Dim oRow As Object
Dim sTimestamp As String
' Get the form and its controls.
oForm = ThisComponent.Drawpage.Forms.getByName("btextFormT")
oField = oForm.getByName("btext")
' Get the table and its column.
oTable = ThisDatabaseDocument.CurrentController.ActiveConnection.getMetaData().getTables(Nothing, Nothing, "Tabelle1", False)
oColumn = oTable.getColumns().getByName("btext")
' Get the row set and its row.
oRowSet = ThisComponent.DatabaseDocument.DataSource.query("SELECT * FROM Tabelle1")
oRowSet.last()
oRow = oRowSet.getRow()
' Write the timestamp to the CLOB field.
sTimestamp = Format(Now(), "ddd-yyyy-mm-dd_hh-nn")
oRow.updateClob(oColumn.Name, sTimestamp)
End Sub
gestartet im CLOBfeld "btext" mit dem Button Zeitstempel.
Meldung:
Zeile markiert:
Code: Alles auswählen
oTable = ThisDatabaseDocument.CurrentController.ActiveConnection.getMetaData().getTables(Nothing, Nothing, "Tabelle1", False)

- WriteTimestampToClobField-2023-05-29 113315.png (82.51 KiB) 5010 mal betrachtet
falls man:
durch:
ersetzt.
Meldung:
Code: Alles auswählen
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: DatabaseDocument.
Was verursacht die Laufzeitfehler?
Grüße
Malt
Version: 7.5.2.2 (X86_64) /
OS: Windows 10.0 Build 22621
Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp
Verfasst: Mo 29. Mai 2023, 15:58
von RobertG
Hallo Malt,
wo liegen denn die Makros, die Du ausführst? Meist liegt es daran, dass die Makros nicht in der Datenbankdatei sondern in "Meine Makros" abgelegt werden. Und da ist ThisComponent nicht die Datenbankdatei sondern wohl das Eingangsfenster von LibreOffice, von dem aus die verschiedenen Komponenten gestartet werden.
Gruß
Robert
Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp
Verfasst: Mo 29. Mai 2023, 19:17
von malt14
Hallo Robert,
die Makros liegen in der odb Datei.

- Makros-2023-05-29 190411.png (65.54 KiB) 4988 mal betrachtet
Grüße
Malt
Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp
Verfasst: Di 30. Mai 2023, 07:53
von RobertG
Hallo Malt,
vielleicht wäre es angebracht, die Datenbankdatei hier hoch zu laden. In der angezeigten Zeile sind allein schon die Einträge "Nothing", "Nothing" eher ein Hinweis darauf, dass da nichts stehen sollte. Denn so, wie das da in der Zeile steht, sollte "Nothing" eine Variable sein - mit der Basic nichts anfangen kann.
Ich sehe in Deinen Screenshots auch kein Formular, von dem aus Du die Makros startest. Zumindest das zum Zeitstempel sollte doch aus einem Formular heraus gestartet werden. Sonst ist doch das Formularfeld nicht auf zu finden.
Gruß
Robert