Página 1 de 1
Converter DBT para FPT
Enviado: 04 Ago 2010 02:08
por Josmar dos Santos
Bom dia a todos, sei q é um assunto q ja foi bastante discutido aqui, até mesmo porque achei muito coisa a respeito disso aqui no forum, mas confesso a vocês q ainda não entendi o procedimento correto de fazer essa transferência de arquivos. Eu so tenho dois arquivos memo: CLIENTES.DBT E FORNECED.DBT. O que teria q fazer ? Quais os comandos para transformar esses arquivos para CLIENTES.FPT E FORNECED.FPT ? Terei q fazer um prg separado do meu sisteminha e linka-lo ? Gostaria na medidado do possível q alguém colocasse um exemplo usando esses arquivos.
Obs-> Andei usando um programa de um colega que faz essa transferência, mas não funcionou !!!
Josmar

Re: Converter DBT para FPT
Enviado: 04 Ago 2010 08:26
por Toledo
Josmar, para cada arquivo DBT existe um correspondente DBF, então basta criar este arquivo DBF com o RDD DBFCDX que o arquivo FPT será criado automaticamente.
Veja um exemplo:
Código: Selecionar todos
REQUEST DBFCDX
USE CLIENTES NEW VIA "DBFNTX"
COPY TO arqnovo1 VIA "DBFCDX"
USE arqnovo1 NEW VIA "DBFCDX"
APPEND FROM CLIENTES VIA "DBFNTX"
USE FORNECED NEW VIA "DBFNTX"
COPY TO arqnovo2 VIA "DBFCDX"
USE arqnovo2 NEW VIA "DBFCDX"
APPEND FROM FORNECED VIA "DBFNTX"
CLOSE ALL
RETU
Compilando e executando este código, será criado os arquivos ARQNOVO1.DBF e ARQNOVO1.FPT que corresponde aos arquivos CLIENTES.DBF e CLIENTES.DBT, e também serão criados os arquivos ARQNOVO2.DBF e ARQNOVO2.FPT que corresponde aos arquivos FORNECED.DBF e FORNECED.DBT.
Bom, agora é só renomear os arquivos.
Abraços,
Converter DBT para FPT
Enviado: 04 Ago 2010 08:36
por Pablo César
Enquanto editava esta minha mensagem o Toledo ganhou de antemão na postagem, mas fica então aqui outro exemplo, desta vez de forma genérica, que encontrei na internet e disponibilizei desta forma para não arriscar que no futuro possa ser perdido no link do autor.
Código: Selecionar todos
/*
DBT2FPT.PRG - Conversor de campo do tipo Memo
Autor : Loren Scott / SuccessWare 90, Inc.
Traduzido: Pablo Cesar - Forum PCTOLEDO
Este eh um exemplo demostrando como converter arquivos do Clipper .DBTs
para o do tipo compativel FoxPro .FPTs utilizando o Clipper 5.2 e RDD DBFCDX.
Compilar: CLIPPER dbt2fpt /n/w
Link : BLINKER FI dbt2fpt LIB dbfcdx,clipper
---------------------------------------------------------------------
*/
#include "RDDSYS.CH"
REQUEST DBFCDX
FUNC DBT2FPT( cOldFile, cNewFile )
LOCAL aFile := {}
// Ter certeza que foram passados os parametros corretos
IF PCOUNT() < 2
?
? "SINTAXE: DBT2FPT <arquivo_original> <arquivo_novo>"
?
? "onde:"
? " <arquivo_original> = Nome do arquivo contendo campo memo a ser convertido"
?
? " <arquivo_novo> = Novo arquivo a ser criado"
?
Return(1)
ENDIF
cOldFile := Upper( AllTrim( cOldFile ))
cNewFile := Upper( AllTrim( cNewFile ))
IF "." $ cOldFile
cOldFile := Left( cOldFile, at( ".", cOldFile )-1 )
ENDIF
IF "." $ cNewFile
cNewFile := Left( cNewFile, at( ".", cNewFile )-1 )
ENDIF
// Mostra mensagem
? "DBT2FPT - Conversor de arquivo Memo"
?
// Verifica disponibilidade do arquivo original
IF !File( cOldFile + ".DBF" )
? "Nao foi encontrado o arquivo " + cOldFile + "!"
?
Return(2)
ENDIF
// Abrindo o arquivo original (usando DBFNTX)
USE (cOldFile) VIA "DBFNTX"
// Abrindo RDD DBFCDX para criacao do novo dbf+fpt
RDDSetDefault("DBFCDX")
// Mostra em tela que o processo ja comecou
? "Convertendo..."
// Agora irah copiar para o novo arquivo
COPY TO (cNewFile) FOR ShowDot()
// Veja, ja foi feito !
?? " Conversao realizado com sucesso !"
?
// Fecha e limpa da memoria tudo antes de sair
CLOSE ALL
// Compara o tamanho dos arquivos
aFile := Directory( cOldFile + ".DBT" )
? PadR( "Arquivo original " + cOldFile + ".DBT Tamanho",41 ) + ": " + Str( aFile[1,2] ) + " bytes"
aFile := Directory( cNewFile + ".FPT" )
? PadR( "Novo arquivo " + cNewFile + ".FPT Tamanho",41 ) + ": " + Str( aFile[1,2] ) + " bytes"
?
Return(0)
FUNC ShowDot()
?? "."
Return (.T.)
De todas formas, os exemplos funcionarão. Mas sou obrigado a fazer uma ressalva com respeito a esses arquivos contendo campo MEMO. Geralmente esses arquivo dão corrupção de arquivo e impossibilitando abertura do DBF. Aconselho utilizarem arquivos textos independente do dbf. Fazer uma vinculação do nome de cada arquivo com algum código que o dbf possua. Dessa forma, os arquivo textos não iterferirão no DBF e poderá ficar até mesmo mais enxuto, pois nem todo registro possui algum texto a ser gravado. Neste tópico explico melhor:
Campo MEMO
Re: Converter DBT para FPT
Enviado: 04 Ago 2010 10:41
por Josmar dos Santos
Bom dia irmãos...Coloco essa rotina dentro do prg principal ou separado
josmar
Re: Converter DBT para FPT
Enviado: 04 Ago 2010 11:12
por rochinha
Amiguinhos,
Na rotina do Toledo percebi algo:
Código: Selecionar todos
USE CLIENTES NEW VIA "DBFNTX"
COPY TO arqnovo1 VIA "DBFCDX"
USE arqnovo1 NEW VIA "DBFCDX"
APPEND FROM CLIENTES VIA "DBFNTX"
Se usar da forma como esta e meu arquivo CLIENTES contiver dados terei no final das contas duplicidade de registros.
Somente corrigindo:
Código: Selecionar todos
USE CLIENTES NEW VIA "DBFNTX"
COPY STRU TO arqnovo1 VIA "DBFCDX"
USE arqnovo1 NEW VIA "DBFCDX"
APPEND FROM CLIENTES VIA "DBFNTX"
Desta forma comente a estrutura do arquivo CLIENTES sera criada, vazia, e o APPEND FROM trara os dados bunitinhu.
Re: Converter DBT para FPT
Enviado: 04 Ago 2010 12:06
por Josmar dos Santos
Na hora de compilar está dando esse erro: Error DBCMD/1015 Argument error: DBCREATE
Somente da esse erro quando compilo o prg fora do sistema, ou seja, separado. Quando compilo dentro do prg principal nao gera erro. Não sei se estou errado, seria porque no sistema foi colocado a lib dbfcdx e no prg separado não ha lib ?
Como chamo a lib ai mesmo nesse prg ?
prg separado:
Código: Selecionar todos
REQUEST DBFCDX
USE CLIENTES NEW VIA "DBFCDX"
COPY STRU TO ARQUIVO1 VIA "DBFCDX"
USE ARQUIVO1 NEW VIA "DBFCDX"
APPEND FROM CLIENTES VIA "DBFNTX"
josmar
Re: Converter DBT para FPT
Enviado: 04 Ago 2010 13:12
por Josmar dos Santos
Ola pessoal, consegui resolver, tava linkando errado ! Valew pela força !
Josmar
Re: Converter DBT para FPT
Enviado: 04 Ago 2010 14:44
por Pablo César
Josmar, veja que na minha mensagem anterior anexei o arquivo zip contendo o prg e executável. Assim você poderá contar como aplicativo separado do seu sistema. Depois é só renomear os arquivos.
Re: Converter DBT para FPT
Enviado: 04 Ago 2010 15:20
por Josmar dos Santos
Perfeitamente Pablo, foi exatamento o que eu fiz ! Agora ja ta normal !
Valew pela força !
Re: Converter DBT para FPT
Enviado: 04 Ago 2010 20:42
por lugab
Amigos, baseado nas contribuições deste tópico, eu fiz o código simplório abaixo.
Deu erro na execiução. O programa gerou a estrutura, mas não copiou os dados do DBF antigo para o novo.
Código: Selecionar todos
procedure main
tOrigem=space(8)
tDestino=space(8)
Request dbfcdx
do while .t.
Clea
@ 08,08 TO 14,35
@ 10,10 say "Origem..:" get tOrigem pict "@!" valid .not. empty(Torigem)
@ 12,10 say "Destino :" get tDestino pict "@!" valid .not. empty(tdestino)
read
if lastkey()=27
close all
retu
Endif
If Tdestino=Torigem
Alert("Mesmo Nome ...")
loop
Endif
SDestino=Alltrim(TDestino)+".dbf"
Sorigem=Alltrim(Torigem)+".dbf"
If .not. file(Sorigem)
Alert("Arq.origem Nao Encontrado")
loop
Endif
If file(Sdestino)
Alert("Arq.destino ja existe")
loop
Endif
Torigem=Alltrim(Torigem)
Tdestino=Alltrim(Tdestino)
*--- copia de estrutura
Use (Torigem) new via "dbfntx"
// a linha abaixo deu erro na compilacao
// Copy Structure to (Tdestino) via "dbfcdx"
// e foi substituída pelas 2 a seguir
Rddsetdefault("dbfcdx")
Copy Structure to (Tdestino)
*------- copia de registros ------
Use (Tdestino) new via "dbfcdx"
Append from (Torigem) via "dbfntx"
Close All
enddo
retu
A execução cancelou nesta linha:
E deu a seguinte mensagem de erro:
Gostaria da ajuda de vcs, pra acabar essa obra de arte...
Grato,
Gabriel
Re: Converter DBT para FPT
Enviado: 05 Ago 2010 08:00
por Toledo
lugab escreveu:// a linha abaixo deu erro na compilacao
// Copy Structure to (Tdestino) via "dbfcdx"
Eu também tentei usar o parâmetro VIA no comando COPY STRUCTURE, mas não aceitou. Tentei compilar com Clipper 5.2, 5.3 e com [x]Harbour e nenhum deles aceitaram este parâmetro.
Gabriel, então já que é para copiar a estrutura e também os registros do arquivo origem para o arquivo destino, alterei o seu exemplo e troquei COPY STRUCTURE por COPY TO, que aceita VIA.
Código: Selecionar todos
procedure main
tOrigem=space(8)
tDestino=space(8)
Request dbfcdx
do while .t.
Clea
@ 08,08 TO 14,35
@ 10,10 say "Origem..:" get tOrigem pict "@!" valid .not. empty(Torigem)
@ 12,10 say "Destino :" get tDestino pict "@!" valid .not. empty(tdestino)
read
if lastkey()=27
close all
retu
Endif
If Tdestino=Torigem
Alert("Mesmo Nome ...")
loop
Endif
SDestino=Alltrim(TDestino)+".dbf"
Sorigem=Alltrim(Torigem)+".dbf"
If .not. file(Sorigem)
Alert("Arq.origem Nao Encontrado")
loop
Endif
If file(Sdestino)
Alert("Arq.destino ja existe")
loop
Endif
Torigem=Alltrim(Torigem)
Tdestino=Alltrim(Tdestino)
*--- copia de estrutura e registros ---*
Use (Torigem) new via "dbfntx"
Copy to (Tdestino) via "dbfcdx"
Close All
enddo
retu
Abraços,
Re: Converter DBT para FPT
Enviado: 06 Ago 2010 03:20
por lugab
Valeu, Toledo....
Muito obrigado.
gabriel
Re: Converter DBT para FPT
Enviado: 07 Ago 2010 13:52
por JoséQuintas
Quantas vezes vai fazer a conversão?
Se for uma única vez, mais prático usar o Foxpro versão DOS.
Basta abrir o arquivo e modificar a estrutura, que será automáticamente salvo como FPT.
Re: Converter DBT para FPT
Enviado: 03 Nov 2010 00:40
por clodoaldomonteiro
Quintas!
Achou que eles e querem fazer em nível de execução.
Uma outra rotina que deve ser colocado é se já existir registros no arquivo destino, perguntar ao usuário de pode sobrescrever, pois os dados do arquivo destino serão apagados.