Não sei se o sistema do colega que iniciou o tópico tem arquivos do tipo
.DBT para os campos "memo".
Se os tiver, o padrão de índices
.IDX ou
.CDX exigem que os arquivos
.DBT sejam convertidos para
.FPT.
Em
27.03.2011, enviei para a seção
DOWNLOADS deste fórum, um utilitário que faz a conversão, procure-o com o nome
MUDADBT.
A única sugestão que faça primeiro uma cópia de todos os seus arquivos, pois o executável trabalhará com todos os arquivos .DBT que houver no drive e pasta
informados e procurará o seu .DBF correspondente.
Como na época somente enviei o executável, para que possa(m) saber como o mesmo funciona, anexo abaixo o seu fonte:
Código: Selecionar todos
local cores := setcolor()
local i,cntarq
local option,file
request dbfcdx
rddsetdefault("dbfcdx")
dbsetdriver("dbfcdx")
set scoreboard off
set date brit
set century on
driv := "d:\"
diret := curdir()
private farq, fant, fnovo
setcolor("w+/b,g+/n,,bg+b")
drive := "d:\"
direto := curdir()
direto += space(30)
clear
text
Esta rotina mudar todos os arquivos do formato .DBT para o formato .FTP
para uso com o RDD DBFCDX e uso de ¡ndices .CDX/IDX.
Para isso, informar o diret¢rio e pasta onde se encontram tais arquivos.
O sistema abre uma janela com os arquivos .DBT encontrados.
Ap¢s selecionar esse arquivo, ele far todas as modifica‡äes necess rias.
Como o processo ‚ por gera‡Æo de estrutura e c¢pia de arquivos, o tempo
de processamento pode variar em fun‡Æo do tamanho do arquivo tratado.
Quando retornar … janela, o arquivo .DBT tratado nÆo aparecer mais.
Somente utilizar esta rotina ap¢s ter feito c¢pia dos seus arquivos.
NÆo utilizar esse arquivo em rede, e nem com terminais abertos.
A rotina nÆo verificar nem alterar nenhum arquivo de ¡ndices.
A gera‡Æo de novos ¡ndices ficar por conta de sua aplica‡Æo.
Coloque o execut vel em:
- drive: C:
- Pasta: Arquivos de programas\MudarDbt
endtext
inkey(0)
do while .t.
@ 0,0 clear to 23,79
@ 0,0 to 23,79 double
@ 1,10 say "[ MUDAN€A DE ARQUIVOS .DBT PARA .FPT ]"
@ 3,2 say "Drive atual dos arquivos: " get drive ;
pict "@!" valid ! empty("drive")
read
if lastkey() == 27
clear
return
endif
@ 4,2 say "Diret¢rio atual: " get direto pict "@!Ks40" ;
valid ! empty(direto)
read
direto := alltrim(direto)
drdir := drive + direto + "\"
@ 5,2 say "Path selecionado: " + alltrim(drdir)
sn := "S"
@ 7,2 say "Confirma os dados acima ? <SN>" get sn pict "@!" valid sn $ "SN"
read
if sn == "N"
loop
endif
! &drive.
! cd\
! cd &direto.
private dbt_arq[adir("*.dbt")]
cntarq := adir("*.dbt", dbt_arq)
if cntarq == 0
@ 24,0 say "NÆo existem arquivos DBTs nessa pasta! "
inkey(0)
@ 24,0
! &driv.
! cd\
! cd &diret.
direto += space(40)
direto := left(direto,40)
loop
endif
do while (.t.)
close databases
@ 3,2 clear to 7,77
private dbt_arq[adir("*.dbt")]
@ 2,1 to 2,78
@ 4,35 to 17,44 double
@ 4,38 say "DBTs"
cntarq := adir("*.dbt", dbt_arq)
for i := 1 to cntarq
pospto := at(".", dbt_arq[i])
dbt_arq[i] := substr(substr(dbt_arq[i], 1, pospto - 1) + ;
space(8),1,8)
next
option := achoice(5,36,16,43,dbt_arq)
if (option == 0)
exit
endif
@ 1,1 clear to 20,79
farq := trim(substr(dbt_arq[option],1,8)) + ".dbt"
fnovo := trim(substr(dbt_arq[option],1,8)) + ".fpt"
fant := trim(substr(dbt_arq[option],1,8)) + ".dbf"
if file(fnovo)
@ 24,0 say "O arquivo DBT j foi modificado para FPT"
inkey(0)
@ 24,0
loop
endif
if ! file(fant)
@ 24,0 say "NÆo existe o arquivo DBF correspondente a esse DBT !"
inkey(0)
@ 24,0
delete file (farq)
loop
endif
file := drdir + fant
mud_dbt(file)
enddo
direto := direto + space(40)
direto := left(direto,40)
! &driv.
! cd\
! cd &diret.
enddo
setcolor(cores)
return nil
PROCEDURE mud_dbt(fdbf)
cls
select 1
use (fdbf) via "dbfntx"
nreg_ant := lastrec()
copy struc to novo_arq
@ 24,0 say "Aguarde. Copiando para GuardaDB.."
copy to guardadb
close
@ 24,0
select 2
use novo_arq via "dbfcdx"
ndbf := "novo_arq.dbf"
nfpt := "novo_arq.fpt"
@ 24,0 say "Aguarde. Adicionando do GuardaDB.." + ndbf
append from guardadb
nreg_atu := lastrec()
if str(nreg_ant,8) == str(nreg_atu,8)
erase(fdbf)
erase(farq)
endif
close
rename (ndbf) to (fant)
rename (nfpt) to (fnovo)
select 2
use (fant) via "dbfcdx"
close databases
@ 24,0