🍀 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🍀
🙏 Ihre Unterstützung für das Jahr 2025 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.


❤️ 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. 🤗

[gelöst] Kommaproblem in Base

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Acco
Beiträge: 92
Registriert: Fr 31. Jan 2014, 16:41

[gelöst] Kommaproblem in Base

Beitrag von Acco » Fr 29. Nov 2024, 12:21

Guten Tag,

in meiner Datenbank ist ein Zahlenproblem aufgetreten:
Rechnungsformular gebe ich einen Einzelpreis mit 2 Kommastellen ein um dann eine Rechnung ausdrucken zu lassen.
Wenn die Nachkommastellen 0 sind - Beispiel 84,00 - funktioniert das. Ist eine der Nachkommastellen anders - Beispiel 84,03 kommt folgende Fehlermeldung:

Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Unexpected token: 0336134453782 in statement [UPDATE "RechPosten" SET "EPreis" = 84,0336134453782].

Es werden demnach die Nachkommastellen reklamiert im richtig angezeigten "EPreis"
Die Variable im Berechnungsmakro hab ich definiert als Currency, dann als Single, dann als Double und schließlich noch als String. Immer das selbe Ergebnis.

Bisher ist mir das nicht aufgefallen, da ich immer "glatte" EPreise hatte.

In der Tabelle ist die Preisspalte als Dezimal mit 2 Nachkommastellen definiert.

Im XRay Tool wird der Wert der Variable mit Punkt statt Komma angegeben, außer bei String - aber es funktioniert auch nicht.

In den Optionen ist als Gebietsschema "Deutsch" eingestellt und als Dezimalzeichen das Komma.

Vielleicht bin ich nur "blind" und sehe nicht das Offensichtliche, woran es liegt....

Meine Arbeitsumgebung steht in der Signatur.

Ich bin für jede Hilfe dankbar.

Acco
Zuletzt geändert von Acco am Sa 30. Nov 2024, 21:32, insgesamt 1-mal geändert.
openSUSE Tumbleweed - LibreOffice 24.8.2.1

F3K Total
* LO-Experte *
Beiträge: 2433
Registriert: So 10. Apr 2011, 10:10

Re: Kommaproblem in Base

Beitrag von F3K Total » Fr 29. Nov 2024, 21:21

Moin,
vermutlich liegt es am Makro, an die DB muss als Dezimaltrenner ein Punkt übergeben werden.
Da du weder Datenbanktyp noch Makro teilst, ist das rein geraten.
Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO

Acco
Beiträge: 92
Registriert: Fr 31. Jan 2014, 16:41

Re: Kommaproblem in Base

Beitrag von Acco » Sa 30. Nov 2024, 17:02

Danke F3K Total ,

hier die fehlenden Infos: es ist eine eingebettete HSQLDB, das zugehörige Makro:

Code: Alles auswählen

SUB NettoEintragen
	DIM oController AS OBJECT
        DIM oFormNetto AS OBJECT    ' Form "Netto_errechnen"
        DIM sNetto AS CURRENCY		
        DIM oFormDok2 AS OBJECT
	DIM oFormRech AS OBJECT
	DIM stRechNr AS STRING	
	DIM oSubForm2 AS OBJECT	
	DIM oSubGrid2 as  Object 	' Unterformular, Tabellenkontrollfeld
	DIM iID AS INTEGER
	DIM oDatenquelle AS OBJECT	
	DIM oVerbindung AS OBJECT
	DIM oSQL_Anweisung AS OBJECT
	DIM stSql AS STRING	
	    
         oController = ThisDatabaseDocument.CurrentController
         If not oController.isconnected then oController.connect
        oFormNetto = ThisComponent.drawpage.forms.getByName ("Netto_Form")
        sNetto = oFormNetto.getbyname("Netto").Value

        oFormDok2 = ThisDatabaseDocument.FormDocuments.getByName("Rechnung").open 
	oFormRech = oFormdok2.drawpage.forms.MainForm
	stRechNr = oFormRech.getByName("strRechNr").TEXT
   	oSubForm2 = oFormRech.getByName("RechPosten")
	oSubGrid2 = oSubForm2.getByName("RechPosten_Grid")
	iID = oSubGrid2.getByName("ID").VALUE 
   
	oDatenquelle = ThisComponent.Parent.CurrentController
		If NOT (oDatenquelle.isConnected()) THEN
			oDatenquelle.connect()
		END IF
	oVerbindung = oDatenquelle.ActiveConnection()
	oSQL_Anweisung = oVerbindung.createStatement()

	'eingtragen wird in die Formularzeile, in der der Cursor steht
	stSql = "UPDATE ""RechPosten"" SET ""EPreis"" = " + sNetto + " WHERE ""RechNr"" = '" + stRechNr + "' and ""ID"" = " + iID 

	oSQL_Anweisung.executeUpdate(stSql)
	oSubForm2.reload
END SUB
Ich habe die DB versuchsweise unter Windows11 installiert, da funktioniert sie einwandfrei.
openSUSE Tumbleweed - LibreOffice 24.8.2.1

RobertG
* LO-Experte *
Beiträge: 2831
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Kommaproblem in Base

Beitrag von RobertG » Sa 30. Nov 2024, 20:49

Ich löse das inzwischen so, dass ich grundsätzlich in einen String umwandele:

Code: Alles auswählen

FUNCTION DecimalPoint(doVar AS DOUBLE) AS STRING
	DIM stVar AS STRING
	stVar = Join(Split(doVar,","),".")
	stVar = "'"+stVar+"'"	'String maskieren
	DecimalPoint = stVar
END FUNCTION
Wenn ein Komma drin ist wird ein Punkt gesetzt. Dann wird das Ganze noch maskiert und kann in den SQL-code als String übernommen werden.

Ich hatte bei der XRechnung einige Variablen, die merkwürdigerweise beim Auslesen nicht mehr den Punkt, sondern das Komma hatten. Da war ich das Nachforschen irgendwann leid.
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

Acco
Beiträge: 92
Registriert: Fr 31. Jan 2014, 16:41

Re: Kommaproblem in Base

Beitrag von Acco » Sa 30. Nov 2024, 21:31

Danke Robert und F3K Total,
ihr habt mir gut geholfen, die grundsätzliche Umwandlung von Komma in Punkt bei Preis-Variablen hat mein Problem gelöst.
Gruß Acco
openSUSE Tumbleweed - LibreOffice 24.8.2.1


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