Página 1 de 1

Como acrescentar um campo na estrutura de um DBF já existent

Enviado: 07 Out 2004 08:23
por indusoft
Olá,

Gostaria de saber como acrescentar um CAMPO na estrutura de um DBF
atraves do Programa (sem ser pelo DBU), sendo este arquivo contem
registros.

Grato

InduSoft

Enviado: 07 Out 2004 09:17
por Everton
Eu faço isto em meu sistema, desta forma.

renomeio o dbf para .old
recrio o dbf com o campo novo
copio os dados do .old para o dbf
e recrio os indices todos.

Enviado: 07 Out 2004 09:50
por kristo
Ué, acho o DBU a forma mais fácil, sendo que ele não faz com que você perca seus dados já contidos na DBF

DBU + F3 = database = você cria o novo campo
depois DBU + F4 = struct = para você salvar a estrutura.......eu acho simples.

Abraços..

Enviado: 07 Out 2004 10:04
por janio
Isso mesmo Kristo!

Acho este processo muito mais SIMPLES, FÁCIO e RÁPIDO do que a forma que o Everton citou.

Concordo, pelo DBU é mais rápido.


Janio

Atualizar BD

Enviado: 07 Out 2004 10:25
por matrix
Eu faço desta forma, é um forma que o cliente poderá fazer também no caso de vc mandar a atualização pela net.

Código: Selecionar todos

/////////////////////////////////////////////////////////////////////////////
/////////////// Funcao: Gera e Atualida DBF da Empresa        ///////
/////////////////////////////////////////////////////////////////////////////
**--------------**
PROCEDURE CR_CFG()
**--------------**
run mkdir \windows\etc
Public Muda
Clear
Set Color To W/B
While .T.
   Muda=.f.
   If !File("\windows\exccfg.DBF")

       Create \windows\ARQ.TMP

       Criacampo("CODIGO_CFG","N",5,0)     // 1
       Criacampo("RAZAOS_CFG","C",45,0)    // 2
       Criacampo("EMPRES_CFG","C",45,0)    // 3
       Criacampo("ENDERE_CFG","C",35,0)    // 4
       Criacampo("NUMERO_CFG","N",5,0)     // 5
                                           
       Commit
       Create \windows\exccfg From \windows\Arq.TMP
       Erase  \windows\Arq.TMP

       If File("\windows\exccfg.TMP")
           Use \windows\exccfg
           Append From \windows\exccfg.tmp
           Close Data
           Erase \windows\exccfg.tmp
       Endif
   Else
       Use \windows\exccfg
       If Neterr()
           Alert(" Arquivo esta Ativo em outro Terminal! ")
           Set Color to
           Clear
           Return .F.
       Else
           @ 21,06 Say Space(50)
           @ 21,06 Say DBF()
           @ 21,15 Say "-  #####   Verificando Campos   #####   "

           Existestru(01,"CODIGO_CFG")
           Existestru(02,"RAZAOS_CFG")
           Existestru(03,"EMPRES_CFG")
           Existestru(04,"ENDERE_CFG")
           Existestru(05,"NUMERO_CFG")
                        
           If Muda      
               Use \windows\exccfg
               Close Data
               FErase("\windows\emp*.NTX")
               !Ren \windows\exccfg.DBF exccfg.TMP
               Loop
           Endif
       Endif
   Endif
       Inkey(1)
   Exit
Enddo
Close All
Return
* Inclua os campos que quiser e depois mande executar esta função, num determinado local do sistema.

Abraços.

Enviado: 07 Out 2004 11:26
por Clipper
Existema várias formas, mas quando você tem que mandar uma atualização para um cliente via internet o melhor meio é como o Dudu faz, eu faço algo parecido...Vejam :

Código: Selecionar todos

IF FILE("\BR\DAT\ARQFECHA.ATU")
   USE \BR\DAT\ARQFECHA.ATU
   APPEND FROM \BR\DAT\ARQFECHA.DBF
   USE
   FERASE("\BR\DAT\ARQFECHA.DBF")
   FERASE("\BR\DAT\ARQFECHA.CDX")
   FRENAME("\BR\DAT\ARQFECHA.ATU","\BR\DAT\ARQFECHA.DBF")
   ATU=.T.
ENDIF

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ATUALIZACAO ARQFECHA
IF FILE("\BR\DAT\BRMASTER.ATU")
   USE \BR\DAT\BRMASTER.ATU
   APPEND FROM \BR\DAT\BRMASTER.DBF
   USE
   FERASE("\BR\DAT\BRMASTER.DBF")
   FERASE("\BR\DAT\BRMASTER.CDX")
   FRENAME("\BR\DAT\BRMASTER.ATU","\BR\DAT\BRMASTER.DBF")
   ATU=.T.
ENDIF

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ATUALIZACAO CADITE
IF FILE("\BR\DAT\CADITE.ATU")
   USE \BR\DAT\CADITE.ATU
   APPEND FROM \BR\DAT\CADITE.DBF
   USE
   FERASE("\BR\DAT\CADITE.DBF")
   FRENAME("\BR\DAT\CADITE.ATU","\BR\DAT\CADITE.DBF")
   ATU=.T.
ENDIF
Eu mando para o cliente um instalador com os arquivos .ATU (são os arquivos com a estrutura atualizada), o sistema na inicialização verifica a existência destes arquivos, se existir ele copia os dados do arquivo antigo para o novo, exclui o arquivo antigo e renomeia o novo de .ATU para .DBF

A variável ATU=.T. é para que eu informe ao sistema que foi feita uma atualização e que ele deve reindexar os arquivos.

Até logo.

Marcelo

Enviado: 08 Out 2004 12:45
por Dercide
Eu tenho clientes em varios estados do Brasil, e passava por essa dificuldade, pois cada vez que inclui campos nos DBF, tinha aquele trabalho todo, no inicio eu manda os discos, e era executado um programa de instalação/atualização, no disco tinha todas as bases vazias, ai o sistema ia lendo as vazias(novas), e comparando com as do cliente, se faltasse um campo, ai era feito a atualizaçao. Eu copiava a base vazia do disquete para o disco rigido, fazia um APPEND FROM, apagava a velha e renomeava a nova.

Funcionava uma beleza, so que depois eu fiz de outra maneira.

Criei um programa para ler todas as minhas base de dados, visto que eu utilizava varios diretorios diferentes com os DBFs, apartir dai gero um .PRG, com todas as estrutura relacionadas. Compilo e gero um executavel, que é mandado para o cliente, ele checa todas as bases e atualiza.

Já tinha postado isso uma vez no forum antigo, mandei para varios colegas, até modifiquei a pedidos. Eu ainda tenho esse exemplo, se alguem quiser é só dar um alo.

Abraços,

Dercide.
dercide@terra.com.br

Enviado: 08 Out 2004 12:46
por Dercide
Eu tenho clientes em varios estados do Brasil, e passava por essa dificuldade, pois cada vez que inclui campos nos DBF, tinha aquele trabalho todo, no inicio eu manda os discos, e era executado um programa de instalação/atualização, no disco tinha todas as bases vazias, ai o sistema ia lendo as vazias(novas), e comparando com as do cliente, se faltasse um campo, ai era feito a atualizaçao. Eu copiava a base vazia do disquete para o disco rigido, fazia um APPEND FROM, apagava a velha e renomeava a nova.

Funcionava uma beleza, so que depois eu fiz de outra maneira.

Criei um programa para ler todas as minhas base de dados, visto que eu utilizava varios diretorios diferentes com os DBFs, apartir dai gero um .PRG, com todas as estrutura relacionadas. Compilo e gero um executavel, que é mandado para o cliente, ele checa todas as bases e atualiza.

Já tinha postado isso uma vez no forum antigo, mandei para varios colegas, até modifiquei a pedidos. Eu ainda tenho esse exemplo, se alguem quiser é só dar um alo.

Abraços,

Dercide.
dercide@terra.com.br

Enviado: 10 Out 2004 01:56
por Dudu_XBase
Dercide envie ele ao Toledo para colocar no link downloads do site para ficar disponível a todos. (Y)

Enviado: 15 Out 2004 15:23
por Cleiton Fidelis
Eu faco o Seguinte...


Ja que tenho de alterar a estrutura faco assim, envio o arquivo ja alterado com extensao .tmp

Exemplo para Cliente.tmp // envio o arquivo ja com os novos campos


use cliente.tmp
zap

append from cliente.dbf

copy to cliente.dbf

reindexo os indices.





Cleiton Fidelis