Wir sind auf Ihre Unterstützung angewiesen!
💚 BITTE helfen Sie uns HEUTE mit einer SPENDE 💚
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst]Makro Zeitstempel Firebird Text, CLOB, Timestamp

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
malt14
Beiträge: 121
Registriert: Fr 7. Nov 2014, 06:21

[gelöst]Makro Zeitstempel Firebird Text, CLOB, Timestamp

Beitrag von malt14 » So 16. Jan 2022, 19:12

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
Zuletzt geändert von malt14 am Fr 12. Apr 2024, 17:35, insgesamt 3-mal geändert.

RobertG
Beiträge: 2735
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp

Beitrag von RobertG » So 16. Jan 2022, 21:07

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.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

malt14
Beiträge: 121
Registriert: Fr 7. Nov 2014, 06:21

Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp

Beitrag von malt14 » Mo 17. Jan 2022, 19:09

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

malt14
Beiträge: 121
Registriert: Fr 7. Nov 2014, 06:21

Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp

Beitrag von malt14 » Sa 22. Jan 2022, 13:11

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

RobertG
Beiträge: 2735
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp

Beitrag von RobertG » Sa 22. Jan 2022, 15:49

Das Codestück erzeugt nur einen Zeitstempel, den Du Dir z.B. per

Code: Alles auswählen

msgbox stTimestamp
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
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

malt14
Beiträge: 121
Registriert: Fr 7. Nov 2014, 06:21

Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp

Beitrag von malt14 » So 30. Jan 2022, 18:27

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

malt14
Beiträge: 121
Registriert: Fr 7. Nov 2014, 06:21

Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp

Beitrag von malt14 » Mo 29. Mai 2023, 11:59

Guten Tag,

Tabelle1 ,
timestampInText2023-05-29 111727.png
timestampInText2023-05-29 111727.png (59.54 KiB) 1835 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:

Code: Alles auswählen

SUB Zeitstempel(oEvent AS OBJECT)
Zeitstempel-2023-05-29 113126.png
Zeitstempel-2023-05-29 113126.png (41.13 KiB) 1835 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:

Code: Alles auswählen

BASIC-Laufzeitfehler.
Objektvariable nicht belegt.
Zeile markiert:

Code: Alles auswählen

oTable = ThisDatabaseDocument.CurrentController.ActiveConnection.getMetaData().getTables(Nothing, Nothing, "Tabelle1", False)
WriteTimestampToClobField-2023-05-29 113315.png
WriteTimestampToClobField-2023-05-29 113315.png (82.51 KiB) 1835 mal betrachtet

falls man:

Code: Alles auswählen

ThisDatabaseDocument.
durch:

Code: Alles auswählen

ThisComponent.DatabaseDocument.
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

RobertG
Beiträge: 2735
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp

Beitrag von RobertG » Mo 29. Mai 2023, 15:58

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
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

malt14
Beiträge: 121
Registriert: Fr 7. Nov 2014, 06:21

Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp

Beitrag von malt14 » Mo 29. Mai 2023, 19:17

Hallo Robert,

die Makros liegen in der odb Datei.
Makros-2023-05-29 190411.png
Makros-2023-05-29 190411.png (65.54 KiB) 1813 mal betrachtet
Grüße
Malt

RobertG
Beiträge: 2735
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro Zeitstempel Firebird Text, CLOB, Timestamp

Beitrag von RobertG » Di 30. Mai 2023, 07:53

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
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten