Win 7 64 bit und Speicherprobleme [erledigt]

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Win 7 64 bit und Speicherprobleme [erledigt]

Beitrag von Ewald »

Ein Kunde hat sich Rechner mit Windows 7 64bit in Netz gehangen und überrascht mich mit einem Fehler. Der Ursprung sind wohl Rechenoperationen, bei denen ich nicht ausschließen kann, das es auch mal zu Divisionen durch Null kommt. Das hatte ich weitestgehend abgefangen - da es allerdings nie Fehlermeldungen gab - wohl nicht konsequent genug. Wie gesagt, unter allen OS bisher laufen die Programme und auch Windows 7 64bit verschluckt sich nicht an der Rechenoperation. Erst wenn es gilt, das Ergebnis abzuspeichern, knallt die 64bit Version mit der Fehlermeldung "Length of database field was exceeded" weg. In der Datenbank stehen dann nur Sterne. Unter der 32bit Version ist das Speichern kein Problem. Die Variable selbst zeigt für mich keinerlei Unregelmäßigkeiten. Sie ist numerisch und einfach nur "0". Wenn ich das Ergebnis in einen String wandel kann ich den als Val() auch in der 64bit Version speichern. Das ist aber wohl keine wirkliche Lösung. Dieses Nonsensprogramm läuft unter der 32bit Version problemlos, in der 64bit Version funktioniert das Speichern aber nicht.

Kennt jemand dieses Problem und hat dafür eine "kleine" Lösung ?

Code: Alles auswählen

proc main
local getlist:={},va:=0,vb:=50,vc:=0

fmakexbla()

va=vb/vc     //  Kein Fehler inkl. 64bit Version

? va,valtype(va)      // 0,00  N
? vb,valtype(vb)      // 50    N
? vc,valtype(vc)      // 0      N  

inkey(0)

use xbla
appe blan
repl wert with va                  // geht in 64bit Version nicht
*repl wert with val(str(va,10,2))  // so ja
browse()
close xbla

return

*------------------------------------------------------

function fmakexbla()
if file("xbla.dbf")
   return .t.
endif
aastruct := {{ "WERT"     , "N" , 10        , 2 }}  
DBCREATE("xbla",aastruct)
return .t.
Zuletzt geändert von Ewald am Di, 27. Nov 2012 12:46, insgesamt 1-mal geändert.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Win 7 64 bit und Speicherprobleme in DBFNTX

Beitrag von georg »

Hallo, Ewald -


verwendest Du die Standard-Errorsys oder hast Du eine eigene?

Da steht nämlich folgendes drin:

Code: Alles auswählen

   /* Division by zero results in 0 */
   CASE oError:genCode == XPP_ERR_ZERODIV      
      RETURN 0                            
Ob das immer greift oder nicht, kann ich nicht sagen (keine Division durch Null Probleme in meinen Programmen), aber die Standard-Errorsys in \XppW32\Source\Sys sorgt für ein 0 als Ergebnis, und wenn Du sie kopiert und diesen Punkt nicht angepasst hast, verhält sich auch Deine so.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Win 7 64 bit und Speicherprobleme in DBFNTX

Beitrag von Ewald »

Hallo Georg,
danke für den Hinweis. Ich habe da noch nie was angepaßt und die Xbase-Version ist immer die gleiche. Das würde doch aber bedeuten, dass ich die 0 ohne Probleme in ein numerisches Feld speichern könnte. Und genau das geht ja unter Win7 64bit nicht.
Gruß
Ewald
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Win 7 64 bit und Speicherprobleme in DBFNTX

Beitrag von Koverhage »

Das ist ein Problem der 64-Bit version. Dafür gibt es von Alaska einen Patch, sofern man eine aktive Subscription hat.
Gruß
Klaus
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Win 7 64 bit und Speicherprobleme in DBFNTX

Beitrag von Ewald »

Hallo Klaus,
das ist nicht schlecht. Habe grade schon die errorsys verwurstet und alle erdenklichen 0, 0.00 0,00 zurückgeben lassen. Alles ohne wirklichen Erfolg. Dann bleibt mir leider nur noch der Weg über val(str(var,10,2)) zu gehen. :shock:
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Win 7 64 bit und Speicherprobleme in DBFNTX

Beitrag von AUGE_OHR »

PDR 6130 / 6286
gruss by OHR
Jimmy
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Win 7 64 bit und Speicherprobleme in DBFNTX

Beitrag von Herbert »

Division durch 0 ist nie gut. Du musst Soches in deinem Code abfangen. Die Errorsys ist dazu da, Unvorhergesehenes abzufangen. Aber wenn du weisst, dass dein vc null sein kann, darf in diesem Fall nicht dividiert werden, und musst dies entsprechend programmieren.
Bie Xbase haben wir zusätzlich das Problem, dass wir nicht wissen, welchen numerischen Datentyp wir eigentlich haben (real, integer usw.), also ob bloss ganze Zahlen vorkommen können oder z.B. ein 0.00001.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Win 7 64 bit und Speicherprobleme in DBFNTX

Beitrag von brandelh »

Man sollte auch beachten, dass nZahl / 0 = 0 sowieso falsch ist.
Diese Operation ist "undefiniert" :arrow: http://de.wikipedia.org/wiki/Division_%28Mathematik%29
Bei der Näherungsmethode nähert man sich unendlich ...

Dass es bei uns eine 0 gibt ist wohl oft eine passable Lösung, aber nicht wirklich richtig:

A bekommt 50 Euro und arbeitet 5 Tage = 10 Euro pro Tag.
A bekommt 50 Euro und arbeitet 1 Tag = 50 Euro pro Tag.
A bekommt 50 Euro und arbeitet nichts = 0 Euro pro Tag, ja aber er hat doch 50 Euro bekommen :?:
ODER A hat "unendlich viele Euro pro Tag" erhalten ... stimmt auch nicht ... Problem erkannt ;-)

Es kann sich übrigens nur um eine integer 0 (LONG) handeln, denn 0.00000000000001 oder 0.9999999999999 sind ja gerade # 0 ;-)
Ich habe es zwar tatsächlich nie ausprobiert, aber eine berechnete Variable mit der Anzeige 0.00 dürfte diesen Fehler nicht auslösen, da intern # 0 ...
Gruß
Hubert
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Win 7 64 bit und Speicherprobleme in DBFNTX

Beitrag von Ewald »

Hallo zusammen,
vllt ist das nicht richtig rübergekommen. Im Programmverlauf ist diese Unregelmäßigkeit nicht zu bemerken. Das Programm stürzt bei der Division nicht ab !!! Die Variable ist nach dem Teilen durch Null vorhanden und wird im Programm danach auch als numerische Variable erkannt - man kann damit weiterrechnen, das Ergebnis ist aber immer falsch - nur in der 64bit Version! Erst der Versuch, diese Variable in eine Datenbank zu speichern, führt mit der 64bit Version zum Programmabsturz. Oben genannter Programmcode ist übrigens so lauffähig.
Wenn das durchgängig allen bekannt ist ist ja gut. Ansonsten ist das natürlich nicht ganz ungefährlich, wenn das gleiche Programm auf unterschiedlichen OS zu verschiedenen Ergebnissen kommt und es nicht zwangsläufig durch Fehlermeldungen auffällt. Mich hat das kalt erwischt.

@Hubert. Ich habe es übrigens versucht, von Errorsys statt 0 den Wert 0.00 zurückgeben zu lassen. Funktionierte auch nicht.

Gruß
Ewald
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Win 7 64 bit und Speicherprobleme in DBFNTX

Beitrag von brandelh »

In der Alaska KB steht übrigens, dass

Problem/Issue 6286 - CLOSED - Hotfix Rollup No.: 36 ...
Gruß
Hubert
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Win 7 64 bit und Speicherprobleme [erledigt]

Beitrag von Ewald »

Wie Jimmy schon schrub. Ok, dann mache ich das Thema mal dicht.
Gruß
Ewald
Antworten