🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

CStr in Version 7.03

Alles zur Programmierung im LibreOffice.
Antworten
Didi-2018
Beiträge: 7
Registriert: So 14. Jan 2018, 23:38

CStr in Version 7.03

Beitrag von Didi-2018 » Sa 12. Dez 2020, 10:34

Hallo zusammen,

DB = MariaDB v5.5.57
LO 7.03
WIN 10

Hole aus einem als Float (4,2) definierten DB Feld eine Zahl eg. 5.00 in eine als GLOBAL deklarierte Variable.
Dann wandel ich das per Makro in eine lokale Variable im Makro zum String mit CStr um - ergibt im String den Wert 50

Das ist erst ab 7.03 so. In der vorherigen Version 6.4.7.2 ist das nicht der Fall. #
Da wurde brav der Wert 5 angezeigt.
Gebe ich in das Datenbankfeld 0.50 ein steht in der Variablen 5
Gebe ich in das Datenbankfeld 5.20 ein steht in der Variablen 52

Bevor ich jetzt einen Fehlerbericht sende - Kann das bitte mal einer von Euch kontrollieren? Oder habe ich irgendwo
einen selbst gebastelten Knoten....

Danke schon mal

Gruß DIDI

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: CStr in Version 7.03

Beitrag von gogo » Sa 12. Dez 2020, 14:02

Didi-2018 hat geschrieben:
Sa 12. Dez 2020, 10:34
Hole aus einem als Float (4,2) definierten DB Feld eine Zahl ...
Dann wandel ich das per Makro in eine lokale Variable im Makro zum String mit CStr um...
Wie?
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

craig
* LO-Experte *
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: CStr in Version 7.03

Beitrag von craig » Sa 12. Dez 2020, 14:42

Hallo,

ein Hinweis:
In Starbasic, sowohl unter AOO, als auch LibreOffice gibt es keinen Datentyp "Float"
Datentypen...
  • Single = Fließkomma → einfache Genauigkeit
  • Double = Fließkomma → doppelte Genauigkeit

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main
Dim fSingle as single
Dim fDbl as Double

fSingle =12.555
fDbl= 16.354
x=cStr(fSingle)
y=cStr(fDbl)
Msgbox  "Single To String → " & x & CHR(10) & _
			"Double To String → " & y 

End Sub
Ob dies die Lösung ist weiß ich nicht.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

Wanderer
* LO-Experte *
Beiträge: 909
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: CStr in Version 7.03

Beitrag von Wanderer » Sa 12. Dez 2020, 23:43

Didi-2018 hat geschrieben:
Sa 12. Dez 2020, 10:34
Kann das bitte mal einer von Euch kontrollieren? Oder habe ich irgendwo
einen selbst gebastelten Knoten....
Kannst Du mal Deinen Macro-Code posten.
Wenn der Knoten da liegt sieht es ja evtl jemand.

Was hast Du denn kontrolliert?
  • Taucht der Fehler schon in der globalen Variable auf, oder beim umsetzen in die lokale Variable.
  • Wie liest Du die Variable ein.
  • Welche Datenbankverbindung? Direkter Konnekt, jdbc, odbc,... und hat sich beim Umstieg auf die Version 7 da etwas geändert.
Mfg, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

Didi-2018
Beiträge: 7
Registriert: So 14. Jan 2018, 23:38

Re: CStr in Version 7.03

Beitrag von Didi-2018 » So 13. Dez 2020, 10:45

Moin Wanderer,

Bei der Vorbereitung der Antworten wurde ich von euch gezwungen alles nachzulesen und vorzubereiten.
Dabei habe ich dann den (meinen) Fehler :oops: schon gefunden.
Ich war so blöd und habe den Double Wert mit getString aus der DB geholt. Das geht zwar - ist aber falsch.
Richtigerweise muss es heißen getDouble und dann klappt auch alles.
Unten noch in der falschen Darstellung

Und natürlich auch die Makros zur Info.


Danke Euch und schönes Wochenende.

DIDI


Deine Fragen:
Die MariaDB ist auf einem remote Server und Connect läuft über jdbc. JRE Version 1.8.0_261

1. Makro - auslesen aus der Tabelle.
2. Makro - erzeugen einer tmpTabelle und Aufruf Report.

Die Variable fMahngeb ist in LO bei Programmstart definiert als GLOBAL und natürlich Double.
Der Fehler taucht schon bei der globalen VAR auf.
Zwischen den einzelnen Versionen 6 und 7 gibt es keine Veränderungen bzgl. Connectivity oder DBMS.

Ausprobiert habe ich auf der DB Seite die Definition Double und Float.
Und im Makro auch die Version als VAL () an Stelle von CStr.




' Holen der Variablen aus dem Stammsatz
oSql = oCon.CreateStatement()
oSqlstring = "SELECT IstBank,AnzQuartAbschl,KurzName,Mahngebuehr from Grunddaten WHERE left(now(),4) = Jahr "
SQL_Result = oSql.executequery(oSqlstring)
While SQL_Result.next()
sBANKDEF = (SQL_Result.getString(1)) 'Hinterlegte Bank
iQUARTALEDEF = (SQL_Result.getString(2)) 'Anzahl definierter Quartale
sKURZNAME = (SQL_Result.getString(3)) 'Verbandsbezeichnung oder auch Kurzname
fMAHNGEB = (SQL_Result.getString(4)) 'Mahngebühr holen - Hier muss es getDouble heissen
Wend



Zur Verwendung in diesem Makro :

Sub Mahnung On Error GoTo Fehlermahnung
'********* Schreiben einer tmp für den Bericht auf **************
'* In der alten Version bis 5.xxx lief das über einen View *******
'* Ab der Version 6.xxx über eine Tabelle weil das aus irgendeinem Grund nicht mehr ging.
'*******************************************************************
Dim oForm As Object
Dim oCon As Object
Dim SQL_Result As Object
Dim oSqlstring As String ' Abfragestring mit SQL Statement
Dim inputVal As String ' Antwort von Inputbox
Dim sMahngeb ' Umgerechnet von der globalen Variablen fMAHNGEB
Dim berichtName As String ' Name des Berichts
DIm fTest as Double ' Jetzt zum Testen drin
odoc = thiscomponent
odrawpage=odoc.drawpage
oform=odrawpage.forms.getbyName("frmMitgliedundRechnungsadresse")
oCon = oForm.ActiveConnection
oSqlstring = "DROP Table IF EXISTS tmpMahnung;"
oSql = oCon.CreateStatement()
oSql.ExecuteUpdate(oSqlstring)

sMahngeb = CStr(fMAHNGEB)
sMahngeb = Replace(sMahngeb,",",".") ' Hier wir aus dem String das Komma gegen einen Punkt getauscht sonst klappt das SQL Statement natürlich nicht
msgbox sMahngeb ' zur Anzeige
oSqlstring = "Create table tmpMahnung as SELECT MitNeu,RechBriefanrede,RechVorname,RechNachname,RechStrasse,RechPLZ,RechOrt, "
oSqlstring = oSqlstring + " Q1 + " + sMahngeb + " as BetraginklMahn, Strasse, " + sMahngeb + " As Mahngeb from "
oSqlstring = oSqlstring + " `AAMitglieder` WHERE MitNeu= "
oSqlstring = oSqlstring + "'" & oform.fmtMit_Neu.Text & "'" + " ;"
msgBox oSqlString ' zur Kontrolle
oSql = oCon.CreateStatement()
oSql.ExecuteUpdate(oSqlstring)

Do Until inputVal = "X" Or inputVal = "x" Or inputVal = "E" Or inputVal = "e" Or inputVal = "M" Or inputVal = "m"
inputVal = Inputbox("Erinnerung oder Mahnung drucken? E oder M eingeben oder X für verlassen")
Loop

Select Case inputVal
Case "e" : berichtName = "BriefErinnerung"
Case "E" : berichtName = "BriefErinnerung"
Case "M" : berichtName = "BriefMahnung"
Case "m" : berichtName = "BriefMahnung"
End Select

If inputVal = x Then Exit Sub

Fehlermahnung:
'If Err = 1 Then
' MsgBox "Hier ist was schiefgelaufen - Kein Ausdruck für das Mitglied möglich"
' Exit Sub
' End If
If Err = 0 Then
ThisDatabaseDocument.ReportDocuments.getByName(berichtName).Open
End If
End Sub

Wanderer
* LO-Experte *
Beiträge: 909
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: CStr in Version 7.03

Beitrag von Wanderer » So 13. Dez 2020, 17:57

Moin Moin und Danke für die Rückmeldung.

Hauptsache ist, dass Dein Problem gelöst ist, aber so kann auch jemand anderes den Fehler vermeiden.

Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten