Converter DBT para FPT

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Josmar dos Santos
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 11 Jan 2006 18:36
Localização: Botucatu-SP

Converter DBT para FPT

Mensagem 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

:(
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Converter DBT para FPT

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Converter DBT para FPT

Mensagem 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
Anexos
DBF2FPT.zip
(164.77 KiB) Baixado 169 vezes
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Josmar dos Santos
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 11 Jan 2006 18:36
Localização: Botucatu-SP

Re: Converter DBT para FPT

Mensagem por Josmar dos Santos »

Bom dia irmãos...Coloco essa rotina dentro do prg principal ou separado ???


josmar
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Converter DBT para FPT

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Josmar dos Santos
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 11 Jan 2006 18:36
Localização: Botucatu-SP

Re: Converter DBT para FPT

Mensagem 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
Josmar dos Santos
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 11 Jan 2006 18:36
Localização: Botucatu-SP

Re: Converter DBT para FPT

Mensagem por Josmar dos Santos »

Ola pessoal, consegui resolver, tava linkando errado ! Valew pela força !

Josmar
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Re: Converter DBT para FPT

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Josmar dos Santos
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 11 Jan 2006 18:36
Localização: Botucatu-SP

Re: Converter DBT para FPT

Mensagem por Josmar dos Santos »

Perfeitamente Pablo, foi exatamento o que eu fiz ! Agora ja ta normal !
Valew pela força !
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Converter DBT para FPT

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

Código: Selecionar todos

  Append from (Torigem) via "dbfntx"
E deu a seguinte mensagem de erro:

Código: Selecionar todos

Error Dbcmd/1005 Argument error:DBUSEAREA

Gostaria da ajuda de vcs, pra acabar essa obra de arte...

Grato,

Gabriel
lugab
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Converter DBT para FPT

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Converter DBT para FPT

Mensagem por lugab »

Valeu, Toledo....

Muito obrigado.

gabriel
lugab
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Converter DBT para FPT

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Re: Converter DBT para FPT

Mensagem 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.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Responder