Autor Thema: ODBC AS400 falsches Zahlenformat  (Gelesen 8885 mal)

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
ODBC AS400 falsches Zahlenformat
« am: 08.03.06 - 11:27:23 »
Hallo,
Ich hab ein Problem mit einem Zahlenformat. Wenn ich mich mit ODBC auf unsere AS400 verbinde dann bekomme ich immer bei:
Result.GetValue("AGSTZT") das falsche Format.
Eigentlich sollte ich zb. 0,45 zurückbekommen ich bekomme aber immer nur ,45 oder ,6 zurück und dann will ich das in ein Feld schreiben und dann passt das Format eben auch nicht?
Kann mir jemand mal helfen damit ich die richtige Zahl bekomme?

danke robert
« Letzte Änderung: 09.03.06 - 09:50:57 von robertpp »
------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

Offline Wirsing

  • Senior Mitglied
  • ****
  • Beiträge: 283
  • Geschlecht: Männlich
    • METZ CONNECT
Re: ODBC AS400 falsches Zahlenformat
« Antwort #1 am: 08.03.06 - 14:19:47 »
Ich hab das jetzt nicht getestet, aber versuch mal mit Hilfe eines

CINT(Result.GetValue("AGSTZT"))

den Wert an das Feld zu übergeben.


Grüsse

Holger
6 Lotus Domino Server 9.0.1(FP5-7) auf Windows 2008R2 Server
ca. 450 Clients mit 8.5.x/9.0.1

Offline HH

  • Senior Mitglied
  • ****
  • Beiträge: 339
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #2 am: 08.03.06 - 14:49:43 »
cint liefert einen Integer

cdbl(Result.GetValue("AGSTZT")) konvertiert in eine Dezimalzahl

Hubert

Offline Wirsing

  • Senior Mitglied
  • ****
  • Beiträge: 283
  • Geschlecht: Männlich
    • METZ CONNECT
Re: ODBC AS400 falsches Zahlenformat
« Antwort #3 am: 08.03.06 - 15:32:47 »
Ups, stimmt...   :-[
6 Lotus Domino Server 9.0.1(FP5-7) auf Windows 2008R2 Server
ca. 450 Clients mit 8.5.x/9.0.1

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #4 am: 08.03.06 - 15:43:00 »
Das mit Cdbl hab ich auch schon probiert da steht in der Variabel beim debugger trotzdem nur ,45

robert
------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: ODBC AS400 falsches Zahlenformat
« Antwort #5 am: 08.03.06 - 15:54:56 »
Machst du jetzt ODBC am Client oder läuft der Agent am Server?

Welchen Typ hat die Variable wenn du es in einen Variant schreibst, bzw. Welche Fehlermeldung bekommst du?

Handelt es sich um ein gezontes oder ein gepacktes Feld auf der AS/400?

Fragen über Fragen.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #6 am: 08.03.06 - 16:16:50 »
Das mit Cdbl hab ich auch schon probiert da steht in der Variabel beim debugger trotzdem nur ,45

Das ist ja auch vollkommen korrekt. Im FrontEnd (Deinem Feld im Dokument also) steht dann trotzdem 0,45, wenn dies ein Zahlenfeld ist.

Bernhard

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: ODBC AS400 falsches Zahlenformat
« Antwort #7 am: 08.03.06 - 16:20:18 »
Hallo Bernhard!

Ja wie gesagt, mich würde auch interessieren was für ein Problem der Frager überhaupt hat. Wie eben noch ein paar Fragen.

Btw. Am Server gibt es leider ein Bugs im AS/400 Domino und da ist dann ODBC nicht so wirklich gut. Bin schon öfters auf die Nase geflogen, dass was im Client wunderbar funktioniert am Server dann nicht so wirklich klappt. Verwende deshalb nur noch Java für solche Dinge, denn das läuft auf der AS/400 wirklich spitze und man kann da dann auch noch alles viel performanter machen. Kommt aber ein wenig auf den Anwendungszweck an.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Driri

  • Gast
Re: ODBC AS400 falsches Zahlenformat
« Antwort #8 am: 08.03.06 - 16:35:13 »
Wir hatten auch mal ähnliche Probleme mit ODBC-Zugriffen auf die AS/400. Wenn ich mich richtig erinnere, hatten wir den Zugriff über einen Standard-ODBC-Treiber konfiguriert. Dabei sind z.B. deutsche Sonderzeichen nicht sauber mit rübergekommen.
Wir haben dann letztendlich Client Access auf dem Server installiert und den dann mitinstallierten Client Access ODBC-Treiber benutzt. Damit wurden die Daten dann sauber übertragen bzw. ausgelesen.

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #9 am: 08.03.06 - 16:48:46 »
Also es ist so das ich das ganze auf dem Server mache wo Client Access installiert ist. Per agent mit runonserver tut das ganze soweit das ich die Daten bekomme nur eben ist das Feld noch falsch gefüllt.
@Bernhard: dem Thema mit Zahlenfeld muss ich morgen nochmals genauer nachgehen. Derzeit ist es keines aber es steht auch im Feld nicht ,45 drinnen sondern nur 45

robert
------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #10 am: 08.03.06 - 16:53:21 »
...aber es steht auch im Feld nicht ,45 drinnen sondern nur 45 ...

Das ist jetzt aber eine gänzlich neue Situation ...

Bernhard

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: ODBC AS400 falsches Zahlenformat
« Antwort #11 am: 08.03.06 - 17:25:02 »
Hallo Robertpp!

Geh bitte kannst du das Problem nicht etwas genauer beschreiben. Du sagst, du lässt es auf dem Server laufen. Hallo was für ein Server. Normalerweise müsste man annehmen AS/400 aber dann schreibst du von Client Access? Ist der Server nicht die AS/400?

Weiters hast du meine ganzen anderen Fragen elegant übergangen. Als erste musst du mal schauen welcher Art das Feld auf der AS/400 ist. Feldtyp usw. Ist es auf der AS/400 überhaupt ein numerisches Feld?

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #12 am: 08.03.06 - 22:40:15 »
Guten Abend,

So jetzt mal mit mehr Zeit etwas genauer!
Es ist so: Es ist ein normaler Windows2000 Server auf dem der LoNo Server läuft oder dort ist eben Client Access installiert mit einem ODBC Treiber.
Wenn ich auf der As400 ein Query direkt auf die Tabelle mache dann sehe ich dort zb. 0,45 oder 1,20 oder 0,6 stehen.

Das ganze läuft dann so: Teilenummer in Frontend-doc eingeben. Die wird dann in ein Hintergrund-doc geschrieben und gespeichert. Dann wird der Agent mit agent.RunOnServer(hdoc.NoteID) gestartet sodass er am Server läuft weil nur am Server die ODBC-Verbindung eingerichtet ist. Der Agent holt das "hdoc" und die Teilenummer und dann eben auf die Tabelle und hier mach ich dann folgendes:
Select auf Teilenummer in Tabelle;
Set ioPartTime = hdoc.GetFirstItem( "oPartTime" )   was zu Beginn ja leer ist.
voPartTime = Cdbl(Res.GetValue("AGSTZT")) dan holen des Wertes egal ob ich Cdbl oder Cstr mache es ist immer ,45
dann:
If ioPartTime Is Nothing Then
hdoc.oPartTime = voPartTime
Else
Call ioPartTime.AppendToTextList(  voPartTime )
end if

und am Ende steht im Feld immer 45. Es sollte egal ob es ein nummerisches Feld ist oder ein Text Feld ist aber trotzdem irgendwann mal das Komma erscheinen das tut es aber nicht. Es ist noch zu sagen dass das Feld ein Multivalue Feld ist. Bei mehreren gefunden Einträgen wird der weitere Wert angehängt.

Wenn ich das ganze Debugge dann läuft das ganze ja mit der lokal eingetragener ODBC-Verbindung und ich sehe, dass die Variable auch nur ,45 oder bei cstr ",45" steht. Also es macht keinen Unterschied zwischen Server und Clientseitiger Ausführung.

danke robert
------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #13 am: 08.03.06 - 23:05:21 »
Call ioPartTime.AppendToTextList(  voPartTime )

Ergo schiebst Du das Teil in ein Textfeld. Irgendwie hätten wir das jetzt einfacher haben können  ;).

Hole Dir den Wert, den Du via ODBC holst, vorab in eine Zwischenvariable (die hast Du ja schon).
Ich vermute, der Datentyp ist dann Text und beinhaltet ",45".
Wenn Du für ursprüngliche Zahlen trotzdem Text als Ziel im NotesDocument behalten willst, dann prüfe jetzt einfach, ob Deine Zwischenvariable mit "," beginnt. Wenn ja, setzte "0" davor.
Besser wäre sicherlich, das Datenformat beizubehalten und statt dessen den mit Cdbl gewandelten Wert mit ArrayAppend an das bestehende Item (so vorhanden) anzuhängen.

Dass Dein führendes Komma verloren geht, liegt an den Feldtrennzeichen im FrontEnd (Felddefinition) ...

Ich hoffe, ich konnte mich zu später Stunde noch verständlich ausdrücken  ;D

Bernhard

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #14 am: 08.03.06 - 23:24:23 »
Hallo Bernhard,

Kann durchaus passieren zu dieser Zeit aber es war alles klar ausgedrückt, Aber:
Zwischenvariable --> stimmt das hab ich gemacht --> Wert stimmt auch ist dann ",45" Was ich jetzt(morgen) ausprobieren muss ist, wenn die Zahl zb 1,2 ist.
Mir ist in diesem Fall eigentlich egal in welchem Format das ganze dann vorliegt.

Bei Cdbl(Res.GetValue("AGSTZT"))  bekomm ich als Ergebnis in der Variable ,45
Wie kann ich dem Feld bei Set ioPartTime = hdoc.GetFirstItem( "oPartTime" ) sagen das es ein Number-Feld ist? Ich hab keine Maske dazu für computewithform?

Das Feldtrennzeichen ist aber nur dann definiert wenn das ganze ein Number Feld ist und derzeit ist es aber "leider" als Text-Feld hinterlegt, deshalb ist es so unerklärlich.

------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #15 am: 08.03.06 - 23:30:56 »
Wie kann ich dem Feld bei Set ioPartTime = hdoc.GetFirstItem( "oPartTime" ) sagen das es ein Number-Feld ist? Ich hab keine Maske dazu für computewithform?

Masken sind eigentlich in NotesDBs sowieso entbehrlich (wenn nur nicht die User wären  ;D).

dblValue = Cdbl(Res.GetValue("AGSTZT"))
doc.YourTargetItem = dblValue
... und es ist ein Item mit numerischen Inhalt. Ganz einfach.
ArrayAppend funktioniert genauso:
doc.YourTargetItem = ArrayAppend (doc.YourTargetItem, dblValue)

Schau Dir das mal an. So in einer Spiel-DB ohne jegliches ODBC-Geraffel - nur diese Funktionalität. Auf die erforderlichen Abfragen wegen Zulässigkeit und ErrorHandling habe ich hier verzichtet - das ist ja eh klar.

Bernhard

Bernhard

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #16 am: 08.03.06 - 23:36:32 »
Ok danke Bernhard, werde mich dann morgen mit einem frischen Kopf damit befassen und hoffe das es morgen dann klappt.

Sonst muss ich sagen so ein runonserver mit übergabe eines Doc's und hineinspeichern und dann im Frontend wieder auslesen des doc ist eine feine Sache. Du ersparst dir echt das ganze einrichten von ODBC-Verbindungen clientseitig.

robert
------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #17 am: 08.03.06 - 23:42:23 »
Dann sag' ich mal "Viel Glück", Robert. Solange Du tatsächlich ",45" als Wert zurückbekommst, ist es wirklich ein leichtes, daraus eine "normal lesbare" Zahl wie 0,45 zu machen. Wenn Du da durch bist, wirst Du über den Trödel von heute nur noch lächeln. Man muss eben nur mal gemacht und verstanden haben. Irgendwann ist immer das erste Mal. Wer gut ist, erlebt das sein Leben lang  ;)

Bernhard

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Re: ODBC AS400 falsches Zahlenformat
« Antwort #18 am: 09.03.06 - 09:06:53 »
Guten Morgen,  ;D

So jetzt passt das mit dem ,45
Ich schreib es jetzt in ein Number-Feld und es wird richtig dargestellt. (mit 0 am Beginn)
Ein kleines Problem hab ich jetzt noch:
Wenn das Feld noch nicht existiert dann kann (muss ich den ersten Wert) ja mit
valuedbl =Cdbl(Res.GetValue("AGSTZT"))      
if hdoc.oPartTime(0) = "" then
   pdoc.oPartTime = valuedbl
else
....
das Feld setzten.
Wenn aber die erste Zahl im Feld steht dann kann ich nicht mehr abfragen = "" weil es ja kein Text-Feld ist damit ich dann mit
   pdoc.oPartTime = Arrayappend (pdoc.oPartTime, valuedbl)
den weitern Wert anhängen kann?
Wie kann ich das noch lösen?
------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

Glombi

  • Gast
Re: ODBC AS400 falsches Zahlenformat
« Antwort #19 am: 09.03.06 - 09:15:48 »
Sowas fange ich wie folgt ab:

dim item as NotesItem
set item = pdoc.GetFirstItem( "oPartTime" )
valuedbl =Cdbl(Res.GetValue("AGSTZT"))     
if not (item.Type = NUMBERS) then
   pdoc.oPartTime = valuedbl
else
...

oder so:
valuedbl =Cdbl(Res.GetValue("AGSTZT"))     
if not IsNumeric(hdoc.oPartTime(0)) then
   pdoc.oPartTime = valuedbl
else


Andreas
« Letzte Änderung: 09.03.06 - 09:17:31 von Glombi »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz