Página 1 de 1

Retornar nome do dbf corrente

Enviado: 06 Jul 2010 23:41
por tcharraw
Alguem sabe que comando do xHarbour eu uso para poder retornar o nome do arquivo dbf que está sendo utilizando ?

Re: Retornar nome do dbf corrente

Enviado: 06 Jul 2010 23:46
por sygecom
#include "DbInfo.ch"
DBInfo(DBI_FULLPATH)

Re: Retornar nome do dbf corrente

Enviado: 07 Jul 2010 09:44
por rochinha
Amiguinhos,

Desde quando usava Clipper eu usava a função DBF().

Caso queira saber quantos indices estão ativos para a área corrente use:

Código: Selecionar todos

FUNCTION NDXCOUNT()
   LOCAL counter
   FOR counter = 1 TO 15
       IF EMPTY(INDEXKEY(counter))
          EXIT
       ENDIF
   NEXT
   RETURN (counter-1)
Caso queira uma lista de indices use:

Código: Selecionar todos

FUNCTION ordList()
   LOCAL counter
   PUBLIC nomes_ndx := {}
   FOR counter = 1 TO 15
       IF EMPTY(INDEXKEY(counter))
          EXIT
       ENDIF
       AADD(nomes_ndx,ORDNAME(counter))
   NEXT
   RETURN nomes_ndx
Caso queira saber os nomes de todos DBFs abertos no momento use:

Código: Selecionar todos

FUNCTION dbfList()
   LOCAL counter
   PUBLIC nomes_dbf := {}
   FOR counter = 1 TO 255
       IF EMPTY(ALIAS(counter))
           EXIT
       ENDIF
       AADD(nomes_dbf,ALIAS(counter))
   NEXT
   RETURN nomes_dbf

Re: Retornar nome do dbf corrente

Enviado: 07 Jul 2010 10:35
por sygecom
Olá Rochinha,
O nome do ALIAS nem sempre é o mesmo nome do DBF, eX.:
use AGENDA alias AGEN shared

DBF()// AGEN (acho errado, no meu ver deveria voltar o nome do DBF e volta o nome do ALIAS)
ALIAS() // AGEN

Retornar nome do dbf corrente

Enviado: 09 Fev 2012 17:41
por lugab
Pessoal, aproveito o tema deste tópico pra perguntar o seguinte:

Numa pasta eu tenho vários dbfs e não sei o nome de nenhum deles.

Como faço para listar na tela o nome de cada um desses arquivos, um a um ?

E sim, eu pesquisei no fórum, e o tópico q achei e q chegou mais perto do q necessito foi este, sobre ADIR e cia

Grato

Retornar nome do dbf corrente

Enviado: 09 Fev 2012 17:56
por kiko
usa a função Directory...

Código: Selecionar todos

#include "Directry.ch"
PROCEDURE Main
   LOCAL aDir
   aDir := Directory( "*.prg" )
   AEval( aDir, {|a| QOut( a[F_NAME] ) } )
   aDir := Directory( "C:", "V" )
   AEval( aDir[1], {|x| QOut( x ) } )
RETURN

Retornar nome do dbf corrente

Enviado: 09 Fev 2012 18:11
por lugab
Kiko, não fui feliz em meu pedido de ajuda.

Na verdade eu tenho uma rotina para pegar todos os dbfs (não sei quantos e nem quais os seus nomes) , que é bem simples, veja:.

Código: Selecionar todos

   private vdir[adir("*.dbf")] 
   adir("*.dbf",vdir) 
Eu só não sei como pegar cada dbf encontrado e dar um PACK , automaticamente e encerrar a rotina logo após o último dbf encontrado e packeado.

Vc, ou algum outro colega, saberia como fazer ?

Retornar nome do dbf corrente

Enviado: 09 Fev 2012 18:42
por joaoalpande
com xharbour faço assim , não sei se é igual no harbour

Código: Selecionar todos

Function Zapea()
   LOCAL aDir, aFile, cFile, nI
   aDir:={}; aFile:={}
   aDir:=Directory("*.DBF")
   AEval(aDir,{|f| AAdd(aFile,f[1])})
   FOR nI=1 TO Len(aFile)
      cFile:=aFile[nI]
      IF !Protect(cFile)
         USE (cFile) NEW
         ZAP
         PACK
         USE
      ENDIF
   NEXT nI
RETURN (Nil)

Retornar nome do dbf corrente

Enviado: 09 Fev 2012 18:56
por lugab
Obrigado Kiko e João, graças a vcs o problema ta resolvido.

Espero poder retribuir-lhes um dia

Gabriel