De vez em quando dá uns GPF´s.. Estou utilizando o EXOSPACE, mas já mudei para o BLINKER 6 e não muda nada..
É sempre em uma rotina da aplicação. Não há segredos na rotina. Ela abre uns arquivos DBF com índices NTX e atualiza dados em outros DBF´s com índices CDX... O Que acontece é que no meio do processo sempre dá uns paus.. Geralmente GPF. O BLIGPF não pega coisa com coisa: As vezes pega o GPF na função __GETGRIP (função do próprio Clipper). As vezes é na __BCMP (também do Clipper)... Não tem muita lógica. As vezes ele para em uma linha onde estou atualizando determinado campo que nem tem índice, e diz que GENCODE não é um método exportável...
Sei lá moçada;; ele processa uns 300 registros, depois começa dar pau. O número de registros que ele processa varia um pouco, dependendo a hora.. Eu vou no DBF destino, dou um ZAP e começo denovo;.. Pau denovo com um pouquinho menos registros...
A função que roda é esta:
Código: Selecionar todos
function LisMapa(cPara) //Gerar Mapa de Trabalho.
local nRecDiar := diar->(recNo())
local nOrdDiar := diar->(ordSetFocus(5))
local nRecMEx := lismexa->(recNo())
local nOrdMEx := lismexa->(ordSetFocus("PK"))
local nRecLR := lisreq->(recNo())
local nOrdLR := lisreq->(ordSetFocus("LRPACI"))
local nRecEx := examx->(recNo())
local nOrdEx := examx->(ordSetFocus(1))
local cOrdTop
local cOrdBott
local cMapa
local cPaci
local cData
local aReq
local cReq := ""
local cEx
local _ret := 0
local _retReq := 0
local cWork
local cProt
local cEId
local dInicio
local dFim
local cInicio
local cFim
cWork := subStr(cPara,01,04)
cProt := subStr(cPara,05,05)
cEId := subStr(cPara,10,03)
cInicio := subStr(cPara,13,08)
cFim := subStr(cPara,21,08)
diar->(ordSetFocus(5))
diar := lisic->(ordScope(TOPSCOPE, cInicio))
diar := lisic->(ordScope(BOTTOMSCOPE, cFim))
cMapa := strZero(mwSeq("MAPA","MAPA",,,,9999999),10)
diar->(dbGoTop())
diar->(dbSeek(cInicio,.f.))
aMapa := {}
while .not.diar->(eof().or.bof()).and.(_ret>=0).and.;
diar->((dToS(data_ped)>=cInicio).and.(dToS(data_ped)<=cFim))
if .not.(cData==dToS(diar->data_ped))
cData := dToS(diar->data_ped)
endIf
cPaci := strZero(diar->cod_pac,10)
lisreq->(dbSeek(cPaci+cData,.f.))
if lisreq->(eof())
aReq := LIS04IR(diar->cod_pac,diar->data_ped)
_retReq := aReq[1]
if (_retReq<0)
_ret := _retReq
endIf
lisreq->(dbSeek(cPaci+cData,.f.))
endIf
if (_ret>=0)
if (diar->cod_exam>3006).and.(diar->cod_exam<3008)
cEx := ""
endIf
cEx := padR(allTrim(str(diar->cod_exam)),10)
examx->(dbSeek(cWork+cProt+cEId+cEx,.f.))
if .not.examx->(eof())
lismapa->(dbSeek(cMapa,.f.))
if lismapa->(eof())
lismapa->(dbAppend())
if lismapa->(mwRLock())
lismapa->mapa := cMapa
lismapa->(dbUnLock())
endIf
endIf
lismexa->(dbSeek(cMapa+cReq+cEx,.f.))
if lismexa->(eof())
lismexa->(dbAppend())
if lismexa->(mwRLock())
lismexa->mapa := cMapa
lismexa->req := cReq
lismexa->exame := cEx
_ret++
else
_ret := -20
endIf
endIf
endIf
endIf
if (_ret>=0)
dbCommitAll()
lismexa->(dbUnLock())
endIf
diar->(dbSkip())
endDo
examx->(ordSetFocus(nOrdEx))
examx->(dbGoTo(nRecEx))
lisreq->(ordSetFocus(nOrdLR))
lisreq->(dbGoTo(nRecLR))
lismexa->(ordSetFocus(nOrdMEx))
lismexa->(dbGoTo(nRecMEx))
diar->(ordSetFocus(nOrdDiar))
diar->(dbGoTo(nRecDiar))
return _ret
Código: Selecionar todos
function s04bug(ctable,sField2,cfilter,cseq,nBegin,nMax)
local ckey, _ret := -1
local _new := .f.
local aOpened
if valtype( ctable ) <> "C"
ctable := alias()
endif
if valtype( sField2 ) <> "C"
sField2 := ""
endif
if valtype( cfilter ) <> "C"
cfilter := ""
endif
if valtype(cseq)<>"C"
cseq := ""
endif
if valtype(nBegin)<>"N"
nBegin := 1
endif
if valtype(nMax)<>"N"
nMax:=999999999999999
endif
ctable := padr(ctable, 011)
sField2 := padr(sField2, 015)
cfilter := padr(cfilter, 200)
cseq := padr(cseq, 003)
ckey := ctable+sField2+cfilter+cseq
aOpened := mwUseDB("_DBFCDX",5)
sequence->(OrdSetFocus("key"))
sequence->(dbSeek(ckey,.f.))
if !sequence->(found())
sequence->(dbAppend())
_new := .t.
endif
if sequence->(mwRLock() )
if _new
sequence->table := ctable
sequence->column := sField2
sequence->filter := cfilter
sequence->seq := cseq
sequence->sequence := nBegin-1
sequence->max := nMax
endif
_ret := sequence->sequence+1
if (sequence->max>0).and.(_ret>sequence->max)
_ret := -1
else
sequence->sequence := _ret
endIf
sequence->(dbUnLock())
endif
mwCloseDB(aOpened)
return _ret
sequence->sequence := _ret
e diz: No exported method: GENCODE
Vai saber...
Ah, tem mais informação:
Quando saio do Debugador depois do erro, ele poe uma mensagem de erro abaixo:
run-time error R6001
- null pointer assignment


