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

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

indusoft
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 06 Out 2004 17:02

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

Mensagem 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
Everton
Usuário Nível 3
Usuário Nível 3
Mensagens: 143
Registrado em: 07 Jul 2004 08:53
Localização: Campo Grande - MS

Mensagem 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.
Everton Luiz Penteado
Clipper 5.2b - Blink 7.0
kristo
Usuário Nível 2
Usuário Nível 2
Mensagens: 78
Registrado em: 21 Set 2004 16:19

Mensagem 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..
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem 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
Avatar do usuário
matrix
Usuário Nível 3
Usuário Nível 3
Mensagens: 131
Registrado em: 06 Jul 2004 08:41
Localização: Paraná
Contato:

Atualizar BD

Mensagem 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.
"Ter Problemas é Inevitável, ser derrotado por eles é opcional.!!"
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Avatar do usuário
Dercide
Usuário Nível 1
Usuário Nível 1
Mensagens: 18
Registrado em: 18 Ago 2003 18:44

Mensagem 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
Avatar do usuário
Dercide
Usuário Nível 1
Usuário Nível 1
Mensagens: 18
Registrado em: 18 Ago 2003 18:44

Mensagem 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
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Dercide envie ele ao Toledo para colocar no link downloads do site para ficar disponível a todos. (Y)


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Cleiton Fidelis
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 06 Jul 2004 09:44
Localização: Divinopolis MG

Mensagem 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
Responder