Seite 1 von 1

Fehler bei REPLACE im Netz !

Verfasst: So, 24. Apr 2016 16:22
von xbaseklaus
Hallo ... ich habe immer noch folgendes Problem bei einer

Netzwerkanwendung (2Benutzer = 2PC's im Netz)

wenn dass Programm auf einem Rechner beendet wird (Windows 7 64Bit)

kommt ab und zu (nicht immer, eher selten) folgende Fehlermeldung:

Code: Alles auswählen

ERROR LOG of "K:\project.EXE" Date: 16.04.2016 13:04:45

 Xbase++ version : Xbase++ (R) Version 1.90.355
 Operating system : Windows 7 06.01 Build 07601 Service Pack 1
 ------------------------------------------------------------------------------
 oError:args :
 -> VALTYPE: N VALUE: 1
 oError:canDefault : N
 oError:canRetry : N
 oError:canSubstitute: Y
 oError:cargo : NIL
 oError:description : Length of database field was exceeded
 oError:filename : 
 oError:genCode : 63,00
 oError:operation : <BENUTZER>:=<1>
 oError:osCode : 0,00
 oError:severity : 2,00
 oError:subCode : 8029,00
 oError:subSystem : BASE
 oError:thread : 1,00
 oError:tries : 0,00
 ------------------------------------------------------------------------------
 CALLSTACK:
 ------------------------------------------------------------------------------
 Called from MAIN(697)


obwohl HOTFIX 36 (DLL) für das 64Bit Problem installiert ist !

mal abgesehen davon, daß er hier in eine DBF nur ein REPLACE macht -> um die Anzahl der Benutzer beim beenden des Programs auf 1 zu setzen !!!

Code: Alles auswählen


* Programm wird auf dem PC beendet !
...
DbCommitAll()
   	
     use nutzer NEW     *( DBF mit Feld benutzer N 1 0 )
	netflock(5)						
           replace benutzer with 1
	unlock
      close databases

quit
Mfg Klaus

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 10:10
von xbaseklaus
Guten Morgen , keiner ne Idee warum er bei einem REPLACE gerade diese Fehlermeldung bringt ! Es wird ja nicht mal irgendwas berechnet !

Und wie gesagt der Fehler taucht so alle 2 Wochen einmal auf ... sonst funktioniert der obige Code jeden Tag problemlos ...

vielleicht hat doch noch jemand ne Idee was ich zumindest mal als FIX ausprobieren könnte und beim Kunden hochladen ...

um darauf zu warten ob der Fehler beim Kunden irgendwann doch wieder auftaucht !

Habe das ganze jetzt schon mehrmals abgeändert !

Code: Alles auswählen

folgendes habe ich schon mal als FIX entfernt:

1. replace benutzer with benutzer - 1  ( Rechnung rausgeschmissen )

2. select 55                                        ( ersetzt durch:  use Nutzer NEW )
    use Nutzer

3. ...

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 10:15
von Martin Altmann
Moin Klaus,
mich wundert. dass die ganzen Zahlen bei den Fehlercodes mit zwei Nachkommastellen auftauchen - das deutet darauf hin, dass du mittels set decimals diese wahrscheinlich fix auf zwei gesetzt hast und somit nicht 1 sondern 1,00 in das Feld geschrieben werden soll. Latürnich scheitert dies, wenn Dein Feld keinerlei Nachkommastellen hat.

Viele Grüße,
Martin

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 10:48
von xbaseklaus
Martin Altmann hat geschrieben:Moin Klaus,
mich wundert. dass die ganzen Zahlen bei den Fehlercodes mit zwei Nachkommastellen auftauchen - das deutet darauf hin, dass du mittels set decimals diese wahrscheinlich fix auf zwei gesetzt hast und somit nicht 1 sondern 1,00 in das Feld geschrieben werden soll. Latürnich scheitert dies, wenn Dein Feld keinerlei Nachkommastellen hat.

Viele Grüße,
Martin
das wäre ein Anhaltspunkt ... was mich aber dann wundert warum es meistens keinen Fehler gibt ....

... Hmm ich glaube ich wechsle im Programm ... set decimals to

Das könnte es aber sein ... ich werde mal vor dem REPLACE ein SET DECIMALS TO 0 setzen

Danke erstmal ... werde auch meinen CODE nochmal durchsuchen

Danke Martin

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 12:05
von komnick
Hallo Klaus,
ich meine, dass SET DECIMALS nur die Darstellung in Anzeige und Ausdruck definiert, aber nicht Speicherbedarf oder Rechengenauigkeit, und deshalb eher nicht die Ursache des Fehlers ist.
Vielleicht solltest du damit anfangen abzufragen, ob USE oder NETFLOCK() gescheitert sind.
Beste Grüße
Martin K.

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 12:48
von georg
xbaseklaus hat geschrieben:netflock(5)
Was ist/macht netflock()? Wie ist "Benutzer" definiert?

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 14:15
von xbaseklaus
georg hat geschrieben:
xbaseklaus hat geschrieben:netflock(5)
Was ist/macht netflock()? Wie ist "Benutzer" definiert?
Hallo Georg , netflock(5) überprüft ob die DBF Nutzer gesperrt ist , falls ja kommt nach 5 Versuchen eine Fehlermeldung !

DBF Nutzer mit FELD benutzer NUMERISCH N Feldlänge 1 Decimals 0 !

Die Datenbank kann aber nicht gesperrt sein , da sie nur einmal kurz beim Programstart überprüft bzw geändert wird und dann wieder geschlossen wird .

erst beim beenden des Programms wird sie erneut aufgerufen und kurz für ein REPLACE (mit Überprüfung netflock(5) ) gesperrt und danach sofort wieder freigegeben !

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 14:18
von georg
Hallo, Klaus -


da Du das Ergebnis von netflock() nicht prüfst, kann es sein, dass der Datensatz nicht gesperrt wurde und das zu der Fehlermeldung führt.

Falls es irgendwie geht, würde ich vor dem REPLACE mal den aktuellen Inhalt des Feldes Benutzer ausgeben.

Aber das sind alles nur Vermutungen.

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 14:21
von Manfred
wenn die Sperrung nicht klappt, müßte dann nicht eine andere Meldung als Fehler erscheinen beim Schreibversuch? Sowas wie Satz muß gesperrt sein, vor Replace? Meine ich jedenfalls.

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 14:46
von xbaseklaus
Manfred hat geschrieben:wenn die Sperrung nicht klappt, müßte dann nicht eine andere Meldung als Fehler erscheinen beim Schreibversuch? Sowas wie Satz muß gesperrt sein, vor Replace? Meine ich jedenfalls.
ja netflock - würde dann eine Fehlermeldung auf dem Bildschirm anzeigen ! da kann aber keine kommen da die Nutzer DBF nur am Anfang bzw am Ende einmal kurz gesperrt wird und sonst geschlossen ist !

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 15:22
von AUGE_OHR
was für ein "Netzwerk" Server ?

wie viel Zeit ist vergangen zwischen letzter Aktion und Logout ?
Energie Einstellungen ?

Virenscanner ?

>obwohl HOTFIX 36 (DLL) für das 64Bit Problem installiert ist !
der behelt lediglich das Division/0 Problem unter 64bit

unabhängig davon ist das rauf/runter Zählen "so" Quatsch ... was passiert wenn das Programm abstürzt ?
auch ist N 1 viel zu klein ... wenn er "schon" bei 9 steht knallt es bei 10 ... schon mal nachgesehen ?

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 16:02
von xbaseklaus
@ Auge_Ohr

2 Pc Windows 7 1Pc Server und Arbeitsplatz 2Pc Kasse.

In Dbf Nutzer -> benutzer steht 0 , 1 , oder 2 nie mehr !

Hauptprogramm muss imer zuerst auf Server gestartet werden ... Kann auch nur 1mal gestartet werden ist im Code so festgelegt
Benutzer wird von 0 auf 1 gesetzt.

Danach kann auch nur auf 2. Pc die Kasse 1mal gestartet werden.
Benutzer wird von 1 auf 2 gesetzt.

Die Kasse muss auch immer zuerst beendet werden ist im Code so festgelegt.
Hier tritt auch ab und zu der Fehler auf Benutzer wird von 2 auf 1 gesetzt.

Danach kann auch erst das Hauptprogramm auf 1.Pc beendet werden
Da wird dann Benutzer von 1 auf 0 gesetzt

Beim start des Hauptprogramms wird jedesmal überprüft ob das programm schon gestartet wurde. Dementsprechend wird der Benutzer überprüft bzw angepasst .

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 16:10
von xbaseklaus
Ach ja auf beiden Pcs ist der Alaska smb2 fix installiert und die Arbeitsverzeichnisse sind in beiden Virenscannern ausgeschlossen

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 16:25
von xbaseklaus
Eigentlich brauche ich die Dbf Nutzer->benutzer gar nicht mehr , weil ich um zu überprüfen ob das programm gestartet wurde bzw wann welches programm wie oft gestartet wurde jeweils auf jedem Pc eine Dummy Dbf exclusive öffne die ich immer Abfrage um zu verhindern dass das programm mehrmals gestartet wird bzw um die richtige Startreihenfolge zu überprüfen.

Aber deswegen würde mich trotzdem interresieren warum der Fehler ab und zu auftaucht.

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 17:01
von AUGE_OHR
xbaseklaus hat geschrieben:Ach ja auf beiden Pcs ist der Alaska smb2 fix installiert und die Arbeitsverzeichnisse sind in beiden Virenscannern ausgeschlossen
der SMB2 Patch nützt dir gar nichts wenn du über den Lanmanager gesteht und ein Laufwerk "map"pst.

was ist mit den Energie Spar Massnahmen Netzwerkkarte ?

Re: Fehler bei REPLACE im Netz !

Verfasst: Mo, 25. Apr 2016 17:23
von xbaseklaus
="AUGE_OHR
was ist mit den Energie Spar Massnahmen Netzwerkkarte ?
Die sollten auf beiden PCs abgeschaltet sein ... werde ich aber nochmal überprüfen !

Re: Fehler bei REPLACE im Netz !

Verfasst: Di, 26. Apr 2016 7:13
von brandelh
AUGE_OHR hat geschrieben:
xbaseklaus hat geschrieben:Ach ja auf beiden Pcs ist der Alaska smb2 fix installiert und die Arbeitsverzeichnisse sind in beiden Virenscannern ausgeschlossen
der SMB2 Patch nützt dir gar nichts wenn du über den Lanmanager gesteht und ein Laufwerk "map"pst.
was ist mit den Energie Spar Massnahmen Netzwerkkarte ?
soweit ich mich erinnere schaltet der Patch die Pufferung der MetaDaten von gesharten Datein ab, das ist in jedem Fall wichtig.

Re: Fehler bei REPLACE im Netz !

Verfasst: Di, 26. Apr 2016 7:58
von AUGE_OHR
brandelh hat geschrieben:soweit ich mich erinnere schaltet der Patch die Pufferung der MetaDaten von gesharten Datein ab, das ist in jedem Fall wichtig.
JA ... wenn es im SMB2 Betrieb läuft !

Re: Fehler bei REPLACE im Netz !

Verfasst: Di, 26. Apr 2016 9:05
von Herbert
xbaseklaus hat geschrieben:um die Anzahl der Benutzer beim beenden des Programs auf 1 zu setzen !!!
Abgesehen vom Problem (jimmy dürfte Recht haben, obwohl der Ort mit dem Fehler sehr eigenartig ist), die Frage, warum du die Anzahl der Benutzer auf diese Weise versuchst festzuhalten? Setzt beim Beenden auf 1? Nicht auf 0? Wenn ein User einen Absturz hat, wird nicht zurückgesetzt, also stimmt so was doch nie. Ich sehe nicht, was deine NUtzer.dbf genau macht. Pro User einen Eintrag? Falls ja, wäre ein logisches Feld ob Login oder nicht einfacher (ja, das ändert im Absturzfall auch nicht, aber dann nur bei dem User) und man muss nur alle login=.t. zusammenzählen und irgendwann mal alle auf .f. stellen.
Worauf ich hinaus will, lass diese Operation einfach mal weg.