Double

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Double

Beitrag von keksi1970 »

hi, ich mal wieder, mit einer wahrscheinlich einfachen Frage :

ich möchte gerne aus einem Calc-Sheet Daten in meine Datenbank einlesen. Das Feld der Datenbank ist als Double mit 2 Nachkommastellen Formatiert, die Ausgelesene Zelle als Zahl mit 2 Nachkommastellen.

Das Problem : Als "ganze" Zahl (2,00 / 3,00) funktioniert, also "kommazahl" funktionierts nicht (Coulumn does not match oder so)

Nu hab ich mal gelesen, daß ich als Dezimaltrenner einen Punkt benutzen muß. Nur wie krieg ich den beim Auslesen einer Zelle, die als Zahl formatiert ist, hin ?

lg
Andreas
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Double

Beitrag von komma4 »

Calc nach Datenbank ... gibst Du uns noch weitere Informationen?

OOo Version? Welche Datenbank? Wie "einlesen"?

Bei HSQLDB müssen meine nummerischen Zellen "englisch" formatiert sein (Darstellung mit Punkt als Dezimaltrenner), damit ein drag&drop Einfügen in den F4 Browser gelingt.

Meintest Du diese Bearbeitungsstelle?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Double

Beitrag von keksi1970 »

Hi,

genau das mein ich.

Ich lese eine Zelle per Makro aus (VAR1 = oSheet.getcellrangebyname("A1").value) und füge diese Variable per SQL Befehl im selben Makro in meine HSQLDB ein (Insert Into ""Tabelle"" (""AusgelesenerWert"") Values = (" & VAR1 & ") )

Nur wie kriege ich diesen blöden punkt in Calc hin, bzw in meine Variable, weil in Calc soll ja das Komma als Dezimal-trenner erscheinen.

LG
Andreas

btw : soll in Version 2.4, als auch in 3.01 funktionieren
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Double

Beitrag von komma4 »

...verstehe dass Problem nicht ...

mit der ersten BASIC-Anweisung holst Du einen DOUBLE-Wert aus dem Blatt ...

mit
" Insert Into ""Tabelle"" Set ""AusgelesenerWert"" = (" & VAR1 & ")"
schreibst Du in die Tabelle

Wo klappt was nicht?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Double

Beitrag von keksi1970 »

Fehlermeldung beim Einfügen des Datensatzes


wenn VAR 1 eine Ganzzahl ist ist es kein Problem
ansonsten wenn VAR1 = 1,12
unexpected Token 12 in statement [update "Tabelle" set "AusgelesenerWert" = 1,12].

oder wenn ich es über INSERT mache um einen neuen Datensatz zu erstellen kommt ;

Column does not match in statement [insert into "Tabelle" ("AusgelesenerWert") Values (1,12].

da muss halt nur n Punkt in meine Variable, dann würde es laufen, nur wie sage ich meiner variable, daß sie nu ein englisches Zahlenformat haben soll ? und somit den Punkt als Dezimaltrenner benutzen muß ?

LG
Andreas
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Double

Beitrag von komma4 »

Bei mir IST die Variable VAR1 ein double mit dem Inhalt 3,21 (xray-Darstellung: 3.21).

Du hast VAR1 als string deklariert? Sonst würde es klappen ...
keksi1970 hat geschrieben:wie sage ich meiner variable, daß sie nu ein englisches Zahlenformat haben soll
Eine Variable ist entweder eine Zeichenkette - oder ein LONG Wert. Ein Format hat sie nicht.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Double

Beitrag von keksi1970 »

VAR1 ist als Double deklariert.

xray zeigt auch bei mir 1.12, aber eingefügt wird immer 1,12 ?
als text würde es zwar gehn, ist aber wegen anstehender berechnungen nichtwirklich eine Lösung.
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Double

Beitrag von keksi1970 »

hier mal die beiden Testdateien :
Dateianhänge
test.ods
(8.76 KiB) 33-mal heruntergeladen
test.odb
(14.47 KiB) 35-mal heruntergeladen
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Double

Beitrag von komma4 »

Deine Fehlermeldung besagt, dass die Spaltenanzahl ungleich der Anzahl der Tabellenspalten ist (Spalte ID vergessen, he?)
Hat nichts mit einem Komma zu tun ...
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Double

Beitrag von keksi1970 »

Spalte ID ist autowert, wird automatisch eingefügt, die Fehlermeldung besagt einfach nur, daß (durch das Komma) eine weitere nicht existente Spalte angesprochen wird, weil das Komma das Trennzeichen für die einzelnen Werte in den einzelnen SPalten ist.
Wenn ich den Wert der testtabelle auf 1,00 ändere funktioniert es ja ohne Probleme (es wird der Wert 1 eingefügt in die SPalte AusgeleseerWert )

Es wird also bedingt durch dieses blöde System mit den Dezimaltennzeichen eine weitere Spalte erwartet.
folglich muß(!) meine variable einen Punkt als trenner besitzen, was ich aber nicht hinkriege (weil sie ihn schon hat, es aber als komma interpretiert wird.)

LG
Andreas
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Double

Beitrag von komma4 »

... ja, habe ich inzwischen auch gesehen (SQL erwartet die engl. Notation, ein deutsches Basic hat das Komma als Dezimaltrenner).

Hatte da auch schon mal eine Lösung (Wechseln des Kommas in Punkt) ... muss die aber erst raussuchen.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Double

Beitrag von keksi1970 »

das wäre perfekt :)

ich weiß nämlich nicht mehr, wo ich suchen soll :D

auch so schon einmal lieben Dank für die Mühe :)

LG
Andreas
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Double

Beitrag von keksi1970 »

leider nein, immer noch der gleiche Fehler.

gibt es denn wirklich keine Möglichkeit, einen dezimalwert wie 1,12 auszulesen und in dBase einzubinden (per Makro und als Zahl, da weitere Berechnungen anstehen)

Die Werte mit 100 zu Multiplizieren und beim Anzeigen durch 100 zu Teilen ist wirklich nicht DIE Lösung

LG
Andreas
Christiana
***
Beiträge: 62
Registriert: Di, 20.03.2007 11:41

Re: Double

Beitrag von Christiana »

Hi Andreas,

habe eben erst diesen Thread gelesen.
Ist das Problem nicht ganz einfach zu lösen, indem Du Deine Spalte in der Calc-Datei folgendermaßen formatierst:

Format > Zellen...
Register: Zahlen
Sprache: Englisch (Großbritannien)

Oder habe ich da was falsch verstanden?

Viele Grüße
Christiana
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Double

Beitrag von keksi1970 »

Damit aenderst du nur die Anzeige der Calc-Zellen, intern wird aber mit einem Punkt gerechnet, der aber bei jedem Auslesen der Variablen als Komma dargestellt wird.
A1 = 1,12 /VAR1 = 1.12, Ausgelesen = 1,12
A1 = 1.12 /VAR1 = 1.12, Ausgelesen = 1,12

Es ist also egal, wie die Zellen Formatiert sind, daß einzige was helfen würde, wäre das Betriebssystem auf englisch umzustellen, auf dieses möchte ich aber aus gewissen Gründen verzichten.

LG
Andreas


EDITH sagt : ich könnte beim einfügen des Wertes natürlich vorher mit 100 multiplizieren und anschliessen mit ((0.00+" & VAR1 & ")/100), (0.00+ muß sein, weil 112/100 in Base als 1 dargestellt wird). ist aber nicht wirklich komfortabel :/
Antworten