Seite 1 von 2

Double

Verfasst: So, 17.05.2009 19:17
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

Re: Double

Verfasst: Mo, 18.05.2009 09:45
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?

Re: Double

Verfasst: Mo, 18.05.2009 11:42
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

Re: Double

Verfasst: Mo, 18.05.2009 12:07
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?

Re: Double

Verfasst: Mo, 18.05.2009 12:20
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

Re: Double

Verfasst: Mo, 18.05.2009 13:28
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.

Re: Double

Verfasst: Mo, 18.05.2009 14:35
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.

Re: Double

Verfasst: Mo, 18.05.2009 14:46
von keksi1970
hier mal die beiden Testdateien :

Re: Double

Verfasst: Mo, 18.05.2009 15:01
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 ...

Re: Double

Verfasst: Mo, 18.05.2009 15:16
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

Re: Double

Verfasst: Mo, 18.05.2009 15:30
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.

Re: Double

Verfasst: Mo, 18.05.2009 15:33
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

Re: Double

Verfasst: Di, 19.05.2009 14:14
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

Re: Double

Verfasst: Di, 19.05.2009 14:44
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

Re: Double

Verfasst: Di, 19.05.2009 14:57
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 :/