Adicionar novos compos no DBFs
Moderador: Moderadores
Adicionar novos compos no DBFs
Ola, turma,
TEm como montar um rotina para adcionar novos compos em dbfs, sem perder as informacoes.
t+
TEm como montar um rotina para adcionar novos compos em dbfs, sem perder as informacoes.
t+
Sempre há uma solucao para os nossos problema clipper.....
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
dbs
Ola Marbio...blz ?
Gostria de fazer um comentário ...
Na minha concepção, não seria mais seguro criar esses campos na própria DBU ?....
Um abraço..
Josmar
Gostria de fazer um comentário ...
Na minha concepção, não seria mais seguro criar esses campos na própria DBU ?....
Um abraço..
Josmar
Ola,
1º) Eu uso o DBU, para fazer isso com os meus cliente, quando eu vou, mas quanto eu mando a atualizacao, nao tem geito certo.
meu amigo eu agradeco a sua rotina
o meu e-mail e: marbio@netsulminas.com.br
ficarei muito grato
t+
1º) Eu uso o DBU, para fazer isso com os meus cliente, quando eu vou, mas quanto eu mando a atualizacao, nao tem geito certo.
meu amigo eu agradeco a sua rotina
o meu e-mail e: marbio@netsulminas.com.br
ficarei muito grato
t+
Sempre há uma solucao para os nossos problema clipper.....
- Tim9
- Usuário Nível 3

- Mensagens: 154
- Registrado em: 14 Ago 2003 15:18
- Localização: Ribeirão Preto
- Contato:
Vou ficar sem saber como se faz isso de uma maneira fácil. Que pena...
Mas posso sugerir aos moderadores para disponibilizr esta rotina na secção de downloads, pois acredito ser de grande interesse geral.
Ou estou enganado?
at+

Mas posso sugerir aos moderadores para disponibilizr esta rotina na secção de downloads, pois acredito ser de grande interesse geral.
Ou estou enganado?
at+
Até Breve!
Luz e Paz!
Tim9
------------------------------------------
olynthes@gmail.com
** Somos livres para escolher, mas prisioneiros das conseqüências **
------------------------------------------
Uso Clipper 5.2e, Blinker 7.0, Prwin 1.0 BFNTX migrando p/ xHarbour e Hwgui Dbfcdx
Luz e Paz!
Tim9
------------------------------------------
olynthes@gmail.com
** Somos livres para escolher, mas prisioneiros das conseqüências **
------------------------------------------
Uso Clipper 5.2e, Blinker 7.0, Prwin 1.0 BFNTX migrando p/ xHarbour e Hwgui Dbfcdx
Tim9,Tim9 escreveu:Vou ficar sem saber como se faz isso de uma maneira fácil. Que pena...
Eu faço da maneira abaixo e funciona que é uma beleza!
No passado precisei exatamente de uma rotina dessas e um amigo postou aqui no fórum a solução. O processo é o seguinte: Vc cria o NOVO arquivo com a NOVA estrutura e depois copia os dados do arquivo ANTIGO pro NOVO, veja:
Código: Selecionar todos
aCampos2 := {}
aAdd( aCampos2 , { "NUMCXA" , "N" , 1 , 0 } )
aAdd( aCampos2 , { "DESCRI" , "C" , 10, 0 } )
aAdd( aCampos2 , { "STSCXA" , "C" , 1 , 0 } )
aAdd( aCampos2 , { "FLGAUT" , "C" , 1 , 0 } )
aAdd( aCampos2 , { "DATCXA" , "D" , 8 , 0 } )
aAdd( aCampos2 , { "OPECXA" , "C" , 3 , 0 } )
aAdd( aCampos2 , { "SLDCXA" , "N" , 13, 2 } )
aAdd( aCampos2 , { "SLDDIN" , "N" , 13, 2 } )
aAdd( aCampos2 , { "SLDCHQ" , "N" , 13, 2 } )
aAdd( aCampos2 , { "SLDVAL" , "N" , 13, 2 } )
aAdd( aCampos2 , { "CXAANT" , "N" , 13, 2 } )
aAdd( aCampos2 , { "DINANT" , "N" , 13, 2 } )
aAdd( aCampos2 , { "CHQANT" , "N" , 13, 2 } )
aAdd( aCampos2 , { "VALANT" , "N" , 13, 2 } )
dbCreate( "A07CXA.TMP" , aCampos2 , "DBFCDX" ) // crio arquivo com extenção TMP
DBCLOSEALL() // fecho todos arquivos
USE A07CXA.TMP // abro arquivo com NOVA estrutura
APPEND FROM A07CXA.DBF // copio dados do ANTIGO arquivo
USE // fecho banco de dados
FERASE("A07CXA.DBF") // apago arquivo ANTIGO
FERASE("A07CXA.CDX") // apago indice tbem
FRENAME("A07CXA.TMP", "A07CXA.DBF") // renomeio o novo para DBF
USE A07CXA EXCLUSIVE // recrio as chaves de indices
PACK
INDEX ON NUMCXA TAG CHAVE1 TO A07CXA
INDEX ON DESCRI TAG CHAVE2 TO A07CXA
USE
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Segue rotina.
********************************
// ALTERAR ESTRUTURA ARQUIVO
********************************
PROCEDURE ALT_ESTRU()
#include "directry.ch"
#include "dbstruct.ch"
//#include "inkey.ch"
//#define true .t.
//#define false .f.
LOCAL TELA1 := SAVESCREEN(01,00,24,79)
local diretorio:=directory("*.dbf","D"),;
arquivos:={},;
campos:={},;
contador
for contador = 1 to len(diretorio)
aadd(arquivos,diretorio[contador,1])
next contador
WHILE .T.
ThreeD_Bord(03,00,23,79,2,JANAZ,"B",.F.,' ALTERAR ESTRUTURA DE ARQUIVO ',PRINCIP)
SETCOLOR(PRINCIP)
MENSAGEMI('<ESC> Desistir ou <ENTER> Selecionar Arquivo',24)
SETCOLOR(JANAZ)
@ 05,10 say "A R Q U I V O"; @ 06,10 say replicate('-',13)
//asort(arquivos)
option := achoice(07,10,20,22,arquivos) //diretorio[F_NAME])
if lastkey() == K_ESC; setcursor(0); exit; endif
if lastkey() == K_ENTER
use (diretorio[option,1]) new alias table
estrutura := table->(DbStruct())
for contador := 1 to len(estrutura)
aadd(campos,estrutura[contador,1]+space(10-len(estrutura[contador,1]))+" | "+estrutura[contador,2]+" | "+strzero(estrutura[contador,3],4)+" | "+strzero(estrutura[contador,4],2))
next contador
SETCOLOR(PRINCIP)
MENSAGEMI('<ESC> Desistir ou <ENTER> Informar Dados',24)
SETCOLOR(JANAZ)
@ 05,40 say "ESTRUTURA DO ARQUIVO"; @ 06,40 say replicate('-',26)
option1 := achoice(07,40,15,65,campos)
if lastkey() == K_ENTER
while .t.
setcursor(1)
xname := space(10)
xtype := space(1)
xleng := xdeci:=0
@ 17,40 say "Nome do novo campo :" get xname picture "@!" valid !empty(xname)
@ 18,40 say "Tipo do campo :" get xtype picture "!" valid xtype$"CNDLM"
@ 19,40 say "Tamanho do campo :" get xleng picture "999" valid xleng > 0
@ 20,40 say "Casas decimais :" get xdeci picture "99" when xtype == 'N'
read
if lastkey() == K_ESC; setcursor(0); exit; endif
setcursor(0)
if alert("*** ATENCAO ***;Deseja realmente criar o novo campo",{"Sim","Nao"})=1
atual:=len(estrutura)
aadd(estrutura,{alltrim(xname),xtype,xleng,xdeci})
DbCreate("tmp.dbf",estrutura)
use tmp.dbf new alias tmp
table->(DbGoTop())
c_c:=0
While table->(!eof())
tmp->(DbAppend())
for contador:=1 to table->(FCount())
tmp->(FieldPut(contador,table->(FieldGet(contador))))
next contador
tmp->(DbCommit())
c_c++
table->(DbSkip(1))
@ 24,00 say padc(c_c,80)
end
DbCloseAll()
Delete File (diretorio[option,1])
Rename TMP.DBF TO (diretorio[option,1])
else
select('table'); use
endif
end
// select('table'); use
else
select('table'); use
endif
endif
end
RESTSCREEN(01,00,24,79,TELA1)
RETURN NIL
********************************
// ALTERAR ESTRUTURA ARQUIVO
********************************
PROCEDURE ALT_ESTRU()
#include "directry.ch"
#include "dbstruct.ch"
//#include "inkey.ch"
//#define true .t.
//#define false .f.
LOCAL TELA1 := SAVESCREEN(01,00,24,79)
local diretorio:=directory("*.dbf","D"),;
arquivos:={},;
campos:={},;
contador
for contador = 1 to len(diretorio)
aadd(arquivos,diretorio[contador,1])
next contador
WHILE .T.
ThreeD_Bord(03,00,23,79,2,JANAZ,"B",.F.,' ALTERAR ESTRUTURA DE ARQUIVO ',PRINCIP)
SETCOLOR(PRINCIP)
MENSAGEMI('<ESC> Desistir ou <ENTER> Selecionar Arquivo',24)
SETCOLOR(JANAZ)
@ 05,10 say "A R Q U I V O"; @ 06,10 say replicate('-',13)
//asort(arquivos)
option := achoice(07,10,20,22,arquivos) //diretorio[F_NAME])
if lastkey() == K_ESC; setcursor(0); exit; endif
if lastkey() == K_ENTER
use (diretorio[option,1]) new alias table
estrutura := table->(DbStruct())
for contador := 1 to len(estrutura)
aadd(campos,estrutura[contador,1]+space(10-len(estrutura[contador,1]))+" | "+estrutura[contador,2]+" | "+strzero(estrutura[contador,3],4)+" | "+strzero(estrutura[contador,4],2))
next contador
SETCOLOR(PRINCIP)
MENSAGEMI('<ESC> Desistir ou <ENTER> Informar Dados',24)
SETCOLOR(JANAZ)
@ 05,40 say "ESTRUTURA DO ARQUIVO"; @ 06,40 say replicate('-',26)
option1 := achoice(07,40,15,65,campos)
if lastkey() == K_ENTER
while .t.
setcursor(1)
xname := space(10)
xtype := space(1)
xleng := xdeci:=0
@ 17,40 say "Nome do novo campo :" get xname picture "@!" valid !empty(xname)
@ 18,40 say "Tipo do campo :" get xtype picture "!" valid xtype$"CNDLM"
@ 19,40 say "Tamanho do campo :" get xleng picture "999" valid xleng > 0
@ 20,40 say "Casas decimais :" get xdeci picture "99" when xtype == 'N'
read
if lastkey() == K_ESC; setcursor(0); exit; endif
setcursor(0)
if alert("*** ATENCAO ***;Deseja realmente criar o novo campo",{"Sim","Nao"})=1
atual:=len(estrutura)
aadd(estrutura,{alltrim(xname),xtype,xleng,xdeci})
DbCreate("tmp.dbf",estrutura)
use tmp.dbf new alias tmp
table->(DbGoTop())
c_c:=0
While table->(!eof())
tmp->(DbAppend())
for contador:=1 to table->(FCount())
tmp->(FieldPut(contador,table->(FieldGet(contador))))
next contador
tmp->(DbCommit())
c_c++
table->(DbSkip(1))
@ 24,00 say padc(c_c,80)
end
DbCloseAll()
Delete File (diretorio[option,1])
Rename TMP.DBF TO (diretorio[option,1])
else
select('table'); use
endif
end
// select('table'); use
else
select('table'); use
endif
endif
end
RESTSCREEN(01,00,24,79,TELA1)
RETURN NIL
- Tim9
- Usuário Nível 3

- Mensagens: 154
- Registrado em: 14 Ago 2003 15:18
- Localização: Ribeirão Preto
- Contato:
Olá Jpalma e Janio!
Agora sim, vou saber como fazer, de maneira fácil.
Obrigado.
Vcs foram brilhantes ao postarem aqui rotina de tamanho interesse público.
Realmente, este é o melhor forum sobre o velho e querido Clipper!!
)
Agora sim, vou saber como fazer, de maneira fácil.
Obrigado.
Vcs foram brilhantes ao postarem aqui rotina de tamanho interesse público.
Realmente, este é o melhor forum sobre o velho e querido Clipper!!
Até Breve!
Luz e Paz!
Tim9
------------------------------------------
olynthes@gmail.com
** Somos livres para escolher, mas prisioneiros das conseqüências **
------------------------------------------
Uso Clipper 5.2e, Blinker 7.0, Prwin 1.0 BFNTX migrando p/ xHarbour e Hwgui Dbfcdx
Luz e Paz!
Tim9
------------------------------------------
olynthes@gmail.com
** Somos livres para escolher, mas prisioneiros das conseqüências **
------------------------------------------
Uso Clipper 5.2e, Blinker 7.0, Prwin 1.0 BFNTX migrando p/ xHarbour e Hwgui Dbfcdx
