Página 1 de 1

erro na execucao apos compilar Harbour

Enviado: 25 Fev 2011 17:06
por Amparo
Ola amigos

estou tentando converter meu sistema feito em clipper 5.3 para Minigui/Harbour so que no modo console, depois de bater a cabeça consegui compilar e linkar sem erro, so que na hora de executar aparece um erro que ainda nao consegui identificar.

quando executo meu programa a tela de erro é a seguinte:
Erro DBCMD/1015 Argument error: RDDSETDEFAULT
Erro DOS não disponível

Sair Gravar

ai escolho gravar o erro entao me gera o arquivo hb_out.log contendo as seguintes linhas
Application Internal Error - C:\Highstil\SIGEMP.EXE
Terminated at: 2011.02.25 17:50:35
Unrecoverable error 9003: Too many recursive error handler calls
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from ERRORFILE(304) in ERRORSYS.PRG
Called from DEFERROR(184) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from RDDSETDEFAULT(0)
Called from MAIN(81) in MAIN.PRG
------------------------------------------------------------------------


na linha 138 DEFERROR tenho a seguinte instrução
U_SERS->( DBGoTo( aUser[ US__RECNO ] ) )

se alguem tiver uma luz

Re: erro na execucao apos compilar Harbour

Enviado: 25 Fev 2011 17:46
por alxsts
Olá!

Verifique a sintaxe do comando que está emitindo. O correto é:

Código: Selecionar todos

RddSetDefault( "DBFCDX" )

Re: erro na execucao apos compilar Harbour

Enviado: 25 Fev 2011 18:04
por Amparo
ola,

a sintaxe esta assim:
RDDSetDefault( "DBFCDX" )

abraços

Re: erro na execucao apos compilar Harbour

Enviado: 25 Fev 2011 18:53
por alxsts
Olá!

Existem passos que precisam ser seguidos e você não postou o código com problema. Para conseguir configurar um RDD como default você precisa tê-lo disponível:

Código: Selecionar todos

REQUEST DBFCDX
RddSetDefault("DBFCDX")
Está fazendo o Request?
Poste o teu código. Use a Tag Code, presente na barra de ferramentas da janela "Postar uma resposta"

Re: erro na execucao apos compilar Harbour

Enviado: 25 Fev 2011 20:14
por Amparo
sim estou ...

Código: Selecionar todos

#include "SISTEMA.CH"
#include "FILEIO.CH"
#include "STATION.CH"


REQUEST DESCEND
REQUEST DBFCDX
//REQUEST DBFNTX


**************
FUNCTION Main( cComm )
**************

LOCAL cSysfiles := ""
LOCAL lReindex  := .F.  // modo reindexacao automatica
LOCAL nCurUser  := 0

PUBLIC  lAdmin          // modo Admin
PUBLIC  lCash           // modo Caixa
PUBLIC  lPos            // modo PDV
PUBLIC  aSystem
PUBLIC  aUser
PUBLIC  aColor
PUBLIC  aCodes
PUBLIC  aMessages
PUBLIC  aStation
PUBLIC  oMenuPri

PUBLIC  nListRec        // Recno em listas de pesquisa
PUBLIC  nIFHandle       // Handle da impressora fiscal

PUBLIC  nAuditRec

PUBLIC  lIsNT

PUBLIC  nBranch
PUBLIC  lBranch
PUBLIC  cBranch

SetCursor(0)
@ Row(), Col() SAY "Iniciando o sistema BIS..."

nIFHandle := 0
nAuditRec := 0

lAdmin    := .T.
lCash     := .F.
lPos      := .F.
lIsNT     := .F. //HARBOUR OL_IsNT()

nBranch   := 0
lBranch   := .F.
cBranch   := ""

cSysFiles := Upper( AllTrim( GetEnv( "BISFILES" ) ) )

IF !Empty( cSysFiles )
   IF Right( cSysFiles, 1 ) <> "\"
      cSysFiles += "\"
   ENDIF
ELSE
   cSysFiles := DiskName() + ":\" + CurDir() + "\"
ENDIF

AltD(0)

IF ValType( cComm ) == "C"
   cComm := AllTrim( Upper( cComm ) )
   IF At( "DEBUG", cComm ) <> 0 
      AltD(1)
   ENDIF
   lReindex := ( At( "REINDEX", cComm ) <> 0 )
ENDIF


RDDSetDefault( "DBFCDX" )
aqui apresenta o erro cfe abaixo:

Código: Selecionar todos

───────────────────────────────────────────────┐
 Erro DBCMD/2001  Workarea not in use: DBGOTOP │
            Erro DOS não disponível            │
                                               │
                Sair    Gravar                 │
───────────────────────────────────────────────┘
o erro acima fala que a DBF nao esta aberto, mas o arquivo hb_out.log mostra o seguinte erro:
Application Internal Error - C:\Highstil\SIGEMP.EXE
Terminated at: 2011.02.25 21:05:57
Unrecoverable error 9003: Too many recursive error handler calls
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DEFERROR(138) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from ERRORFILE(304) in ERRORSYS.PRG
Called from DEFERROR(184) in ERRORSYS.PRG
Called from (b)ERRORSYS(62) in ERRORSYS.PRG
Called from DBGOTOP(0)
Called from SYSFILES(54) in SYSFILES.PRG
Called from MAIN(111) in MAIN.PRG
a linha do erro DEFERROR(138) in ERRORSYS.prg refere-se a
U_SERS->( DBGoTo( aUser[ US__RECNO ] ) )
não consegui identificar onde esta errado, este fontes eu compilo no clipper 5.3 e roda normal estou tentando passar para MINIGUI/HARBOUR no modo console por que li alguns POST que no Harbour nao existe limitação de vetores, arquivos abertos etc etc.

to batalhando ainda num desisti...

Re: erro na execucao apos compilar Harbour

Enviado: 25 Fev 2011 20:54
por Amparo
fazendo alguns teste percebi que o erro esta dando em uma seguinte situacao

abro o arquivo e logo depois aplico a linha abaixo e da erro
( aLocal[i,1] )->( DBGoTop() )
nao esta assumindo a abertura do arquivo eu faço da forma abaixo esta errado?

Código: Selecionar todos

LOCAL i      := 0
LOCAL nWait  := 10
LOCAL aLocal := Array(14)

aLocal[ 1] := { "A_UDIT.SYS", .F. }
aLocal[ 2] := { "F_IELDS.SYS", .T. }
aLocal[ 3] := { "F_ILES.SYS", .T. }
aLocal[ 4] := { "F_ORMS.SYS", .T. }
aLocal[ 5] := { "M_ENUS.SYS", .T. }
aLocal[ 6] := { "M_ESSAGE.SYS", .T. }
aLocal[ 7] := { "O_PTIONS.SYS", .T. }
aLocal[ 8] := { "P_RINTER.SYS", .T. }
aLocal[ 9] := { "R_EPORTS.SYS", .F. }
aLocal[10] := { "S_TATION.SYS", .F. }
aLocal[11] := { "S_YSTEM.SYS", .F. }
aLocal[12] := { "T_ABLES.SYS", .F. }
aLocal[13] := { "U_SERS.SYS", .F. }
aLocal[14] := { "B_RANCH.SYS", .T. }

// Open system files...
FOR i := 1 TO 14 STEP 1
 nWait := 10

 DO WHILE ( nWait > 0 )
    DBUseArea( .T.,;  
    "DBFCDX",;  
    cDir + aLocal[i,1],; 
    Substr( aLocal[i,1], 1, At( ".", aLocal[i,1] ) - 1 ),; 
    .T.,; 
    aLocal[i,2] ) 

    IF !NetErr()
       ( aLocal[i,1] )->( DBGoTop() )  // O ERRO ACONTECE AQUI
       EXIT
    ENDIF

    InKey(1)
    --nWait

    IF nWait = 0
       RETURN .F.
    ENDIF
 ENDDO
NEXT i

Re: erro na execucao apos compilar Harbour

Enviado: 25 Fev 2011 21:13
por Amparo
Ola,

consegui resolver o problema da seguinte forma:
( aLocal[i,1] )->( DBGoTop() ) troquei esta linha pela linha abaixo ai funcionou
(ALIAS( aLocal[i,1]) )->( DBGoTop() )

nao sei se é o certo mais funcionou, e se for assim vou ter um trabalho danado pois em varios pontos do meu prg uso alguma do tipo
( variavel )->( dbgotop() )
( variavel )->( dbskip() )
(variavel )->( dbseek() ) e por ai vai

Re: erro na execucao apos compilar Harbour

Enviado: 25 Fev 2011 23:33
por alxsts
Olá!

Na linha onde ocorre o erro, o alias gerado vem com a extensão .SYS junto.

Código: Selecionar todos

( aLocal[i,1] )->( DBGoTop() ) 
Esse é o problema. No teu caso, o certo seria:

Código: Selecionar todos

( Substr( aLocal[i,1], 1, At( ".", aLocal[i,1] ) - 1 ) )->( DbGoTop() )
.
Não sei qual é a necessidade mas, achei complicado. Acho que deverias simplificar um pouco a tua vida...

Re: erro na execucao apos compilar Harbour

Enviado: 26 Fev 2011 16:22
por Amparo
ola,

problema resolvido, criei o terceiro elemento com o nome da alias

Código: Selecionar todos

aLocal[ 1] := { "A_UDIT.SYS", .F., "A_UDIT" }

e mudei a linha para
( aLocal[i,3] )->( DBGoTop() )