Página 2 de 2

Problemas com o Dbstruct()

Enviado: 07 Jul 2015 15:38
por Itamar M. Lins Jr.
Ola!
O select() não faz efeito nesta lógica.
Como eu disse o USE pode falhar também, deve verificar isso.

Código: Selecionar todos


BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
   DbUseArea(.T.,'DBFCDX',cDBF,cAlias,.T.,.F.,'PTISO')
Recover
      alert('Erro, abrindo Arquivo: '+cDBF)
      lRet := .f.
End Sequence

if Neterr()
    alert('Arquivo Aberto, Em Outro Lugar.')
    lRet := .f.
endif
Vc usa o xHarbour, eu não sei a sintaxe do BEGIN... mas é similar a essa.
E está usando comando do FiveWin... tambem pode ser falha do FiveWin...
No Arquivo que postou o erro é de sintaxe da função DbUseArea

Código: Selecionar todos

//Clipper
 DBUSEAREA( [<lNewArea>], [<cDriver>], <cName>, [<xcAlias>],
      [<lShared>], [<lReadonly>])

O Harbour tem mais...
DBUSEAREA( [<lNewArea>], [<cDriver>], <cName>, [<xcAlias>],;
[<lShared>], [<lReadonly>], [<cCodePage>], [<nConnection>] ) -> <lSuccess>
Saudações,
Itamar M. Lins Jr.

Problemas com o Dbstruct()

Enviado: 07 Jul 2015 15:42
por Itamar M. Lins Jr.
Ola!
Alxsts, tem redundância ai...

Código: Selecionar todos

XARQUIVO := AllTrim( ::GetFilenameById(nBanco) )

IF Select( XARQUIVO ) == 0 
 USE (XARQUIVO) EXCLUSIVE
ELSE
 Select( XARQUIVO )
ENDIF
Basta.

Código: Selecionar todos

XARQUIVO := AllTrim( ::GetFilenameById(nBanco) )

IF Select( XARQUIVO ) == 0 
 USE (XARQUIVO) EXCLUSIVE ... //mas tem que checar se o use falhou.
ENDIF
Saudações,
Itamar M. Lins Jr.

Problemas com o Dbstruct()

Enviado: 07 Jul 2015 16:36
por alxsts
Olá!

Verdade. Se a função Select() retornar maior que zero, a área já estará ativa. Valeu!

Problemas com o Dbstruct()

Enviado: 08 Jul 2015 09:23
por Daiane
Olá,alxsts,
eu fiz dessa maneiro que vc disse mais deu erro no USE

Código: Selecionar todos

LINHA:8571 	USE (XARQUIVO) EXCLUSIVE 
por isso deixei do jeito que falei anteriormente,se a logica ta errada eu não sei,mas pelo menos ta funcionando e n ta dando erro ate agora

Problemas com o Dbstruct()

Enviado: 08 Jul 2015 11:11
por sygecom
Eu usaria a dica do joao, compara quantidade de campos apenas no meu ponto de vista é errado, deve varrer o vetor atras de cada nome de campo.

Problemas com o Dbstruct()

Enviado: 08 Jul 2015 11:22
por Daiane
Gnt,não tem jeito,eu não sei pq ta acontecendo,mas de qualquer forma terei que usar o select(nbanco) e depois o USE
se tem logica ou não,é assim q ta funcionado
Em relação a condição
if Select( XARQUIVO ) == 0
USE (XARQUIVO) EXCLUSIVE
endif
Se eu utilizar apenas isso,dar o erro que eu ja mostrei aq

Problemas com o Dbstruct()

Enviado: 08 Jul 2015 23:43
por Itamar M. Lins Jr.
Ola!
Daiane o erro é bem claro!
O arquivo em questão já está aberto.
Então será assim

Código: Selecionar todos

If select(xArquivo) > 0
   alert("O arquivo já está aberto e não precisa do USE!")
Else
  alert("O arquivo não está aberto e precisa do USE!")
  use...
EndIf

Agora resta saber se está abrindo arquivos diferentes com o mesmo alias.
Ou pode até melhorar ai... se for o caso.

Código: Selecionar todos

If select(xArquivo) >0 //O arquivo está em uso... Pelo menos o alias...
   alert("Vou fechar o arquivo")
   (xArquivo)->(DbCloseArea())
  If neterr()
     alert("Erro Fechando Arquivo: "+xArquivo) 
 EndIf
EndIf
use xArquivo new alias tal ... //agora estou abrindo o arquivo!!!

Saudações,
Itamar M. Lins Jr.

Problemas com o Dbstruct()

Enviado: 09 Jul 2015 11:23
por Daiane
Hum,muito bom,obrigada
acredito que agora não vai dar mais erro