hi,
Manfred hat geschrieben:
für gewöhnlich ist das von Xbase++, weil die DB ein zweites Mal geöffnet wurde, unter gleichem Namen. Aber wenn Du sagst, Du vergibst immer einen festen Alias Namen....
sowas in der Art hab ich mir gedacht. Das würde z.T. den Absturz erklären
Manfred hat geschrieben:
Hast Du schon mal im Einzelschrittmodus nachgesehen, wann die DB geöffnet wird und ob sie wirklich einen Alias von Dir bekommt?
Das wäre der erste Schritt, den ich gehen würde.
Nein, dazu hatte ich gestern keine Lust mehr. Aber ich glaube es immer
noch nicht, den auf dem "kurzen Weg" kann nichts passiert sein :
Code: Alles auswählen
Called from LAE2REPL(2062)
Called from LAEUM2(2015)
Called from LIEFAE(311)
Called from JOBWAHL3(123)
Called from YIUINTRO(1923)
Called from (B)CREATEMENUSYSTEM(516)
Called from MAIN(1034)
PROCEDURE MAIN
...
CASE m_wahl == 3
mt_nr1= 3
hilfe := "30000"
S_HELL()
JOBWAHL3(oDraw,oCrt) // Faktura
S_NORMAL()
...
PROCEDURE JOBWAHL3(oParent,oCrt)
...
DO WHILE .T.
...
IF m_wahl1 > 0 .AND. m_wahl1 < 9
IF USED()
CLOSE DATABASE
SELECT 26
DO WHILE .T.
IF USE2LOCK(zlogbuch,.F.,lock_dauer)
EXIT
ENDIF
ENDDO
SELECT 0
ENDIF
ENDIF
DO CASE
CASE m_wahl1 = 1
...
CASE m_wahl1 = 3
...
SELECT 8
LIEFAE(oParent,oCrt)
SELECT 4
...
STATIC FUNCTION LAE2REPL(cKDNR)
LOCAL lwarschon:= .F.
LOCAL retvar := .F.
LOCAL text0
LOCAL nRec := LIEFTEMP->RECNO()
DO WHILE .T.
IF LIEFTEMP->FKDNR == cKDNR
SELECT 8 // zLIEFER
IF ADDRECORD(lock_dauer) .AND. .NOT. lwarschon
REPLACE LIEFER->FKDNR WITH LIEFTEMP->FKDNR
und da "crasht" er dann nach einem "APPEND BLANK" kann ich kein
"REPLACE" machen :
oError:args :
-> VALTYPE: C VALUE: 11272
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Datei oder Datensatz muß für Operation gesperrt sein
oError:filename :
oError:genCode : 76
oError:operation : <FKDNR>:=<11272>
oError:osCode : 0
oError:severity : 2
oError:subCode : 8043
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
Ich komme also "frisch" ins Programm und wähle direkt den Menu Punkt
an. In der Sub Routine wird ein "CLOSE DATABASE" gemacht, also wenn
was offen wäre würde alles geschlossen werden.
Wärend ich bei "LIEFER" / "LIEFER_8" noch mal nachsehen muss, bin ich
mir bei "BESTAND_9" absolut sicher das die nur "einmal" geöffnet wird
Code: Alles auswählen
SELECT 9 // zBESTAND
DO WHILE .T.
IF USE2LOCK(zBESTAND,.F.,lock_dauer)
EXIT
ELSE
F_MELDUNG(21,zBESTAND +" konnte nicht geöffnet werden")
ENDIF
ENDDO
...
SELECT 9 // zBESTAND
IF ist_az_on // Flag zum An/Abschlalten
DO WHILE .T.
IF ADDRECORD(lock_dauer)
REPLACE az_user WITH ID_USER
...
SELECT 9 // zBESTAND
CLOSE BESTAND
Es gibt im dem Modul "nur" 3 Stellen wo ein "SELECT 9" vorhanden ist
sodas man das "eigendlich" schnell übersehen kann.
Das ganze ist erst jetzt mit der "latest" Version aufgetaucht die ich mit
dem "neuen PC" unter XP compile/link gemacht haben. Allerdings hab
ich "den" Codeteil seit der Umstellung von Cl*pper auf Xbase++ Hybrid
nicht mehr angefasst so das ich mir das überhaupt nicht erklären kann.
Ich hab in der Version auch keine weiter Threads eingebaut (ausser zum
drucken) sodas die auch nicht "doppelt geöffenet" sein können ...
Also erstmal Danke für die "Erklärung", ich muss wohl doch wieder den
Win98se PC reaktivieren und mal sehen ob die *.EXE eine Unterschied
aufweisen.
gruss by OHR
Jimmy