Página 1 de 1

Converter dbf foxpro para dbf xharbour

Enviado: 30 Jun 2021 23:05
por deividdjs
boa noite amigos ...

Estou tendo dificuldade em migrar uma base DBF de um programa desenvolvido em foxpro para meu em xharbour ambos estão em CDX ... antes eu nem conseguia abrir o arquivo ... intalei o foxpro 9 e converti o dbf para xbase IV e apartir de ai consegui abrir o arquivo com o DBU normalmente .. porem fiz um .prg para converter os campos para o meu dbf e ele simplesmente não navega pelo banco com o SKIP saltando para o registro seguinte e grana somente os dpois primeiros registro ... alguem já passou por essa experiencia e pode me ajudar???

Vejam o codigo ... é aparente simples ... mais vai que eu esteja errando em alguma parte ...

Código: Selecionar todos

	use TMPRO

   c_codprod := "000000"                                        
	                                                      
   do while !EOF()
	   
		@03,05 say ALLTRIM(CODIGO_INT)
		@04,05 say ALLTRIM(CATEGORIA)
				           
     	c_codprod := strzero(VAL(c_codprod)+1,6)
	c_descr   := articulo
   	n_cusunit := costo                                 
   	n_cusrep  := costo                                 
   	n_cusmed  := costo                                 
   	n_quant   := cantidad                              
   	n_punitv  := menor                                 
   	n_punita  := mayor                                 
   	c_marca   := marca
	if alltrim(categoria) = "PLOMERIA"                          
   	   c_codgru := "001"                               
   	endif
	if alltrim(categoria) = "ELECTRIDAD"                    
   	   c_codgru := "002"                               
   	endif
	if alltrim(categoria) = "BULONERIA"                     
   	   c_codgru := "003"                               
   	endif
	if alltrim(categoria) = "CERRADURA"	                  
   	   c_codgru := "004"                               
   	endif
	if alltrim(categoria) = "ADHESIVOS"                     
         c_codgru := "005"                               
      endif   
	if alltrim(categoria) = "PINTURA"                       
         c_codgru := "006"                               
      endif
	if alltrim(categoria) = "CONSTRUCCION"                  
         c_codgru := "007"                               
      endif
	if alltrim(categoria) = "CABLES"                        
         c_codgru := "008"                               
      endif
	if alltrim(categoria) = "ABRASIVOS"                     
         c_codgru := "009"                               
      endif
	if alltrim(categoria) = "GRIFERIA"                      
         c_codgru := "010"                               
      endif
	if alltrim(categoria) = "REFRIGERACION"                 
         c_codgru := "011"                               
      endif
	if alltrim(categoria) = "JARDINERIA"                    
         c_codgru := "012"                               
   	endif
	if categoria = space(13)
   	   c_codgru := "013"   // GRUPO GENERAL
	endif                                              
      if unidad = "Un."                                  
   	   c_und := "UN"                                   
   	endif
	if unidad = "Mt"                               
   	   c_und := "MT"                                   
   	endif                                              
        
	       @10,10 say c_codprod
	       @12,10 say c_descr
		@14,10 say recno() 			    
		
		@16,10 say c_marca
		@18,10 say n_quant
		                                                   
   	use PRO                                            
   	append blank                                       
   	replace cc_codprod with c_codprod,;
   		   cc_descr   with c_descr,;                  
   	        cn_cusunit with n_cusunit,;                
   	        cn_cusrep  with n_cusrep,;                 
   	        cn_cusmed  with n_cusmed,;                 
   	        cn_quant   with n_quant,;                  
   	        cn_punitv  with n_punitv,;                 
   	        cn_punita  with n_punita,;                 
   	        cc_marca   with c_marca,;                  
   		cc_codgru  with c_codgru,;
		cn_icmven  with 10,;                       
   		cn_icmcomp with 10,;
		cn_qtdfact with n_quant                         
	
		use TMPRO
     	        skip                                        
   	
   enddo                                     
eu consegui jogar em uma planilha do excell tbm, se alguem puder me ajudar a pegar o conteudo do campo de cada celula e jogar no dbf tbm me salva ...

fico no aguardo amigos ..

forte abraço!

Deivid Souza

Converter dbf foxpro para dbf xharbour

Enviado: 01 Jul 2021 00:36
por alxsts
Olá!

Está abrindo o arquivo a cada loop dentro do Do...While...Enddo.

Simplesmente remova a linha 88 do código acima.

Converter dbf foxpro para dbf xharbour

Enviado: 01 Jul 2021 00:48
por JoséQuintas
Precisa um pouco mais

Código: Selecionar todos

select 0
use pro
select 0
use tmppro
do while ! Eof()
   select pro
   append blank
   ...
   select tmppro
   skip
enddo

Converter dbf foxpro para dbf xharbour

Enviado: 01 Jul 2021 06:42
por deividdjs
Boa noite amigos ..

Da forma q passei no código por incrível que pareça funcionou com outros arquivos meus do xharbour ... tive q indexar por nome... após isso funcionou !!! Sinceramente não intendi nada depois dessa!! Hehhehe

A vida toda eu fiz desta forma q está acima e dava certo sem indexar ... essa vez eu me desesperei!! Hehehe...

Muito obrigado amigos .. show são top!!

Converter dbf foxpro para dbf xharbour

Enviado: 01 Jul 2021 09:15
por JoséQuintas
deividdjs escreveu:Da forma q passei no código por incrível que pareça funcionou com outros arquivos meus do xharbour ... tive q indexar por nome... após isso funcionou !!! Sinceramente não intendi nada depois dessa!! Hehhehe
A vida toda eu fiz desta forma q está acima e dava certo sem indexar ... essa vez eu me desesperei!! Hehehe...
Acho impossível seu fonte funcionar porque eternamente vai ficar copiando apenas o registro 1, até estourar algum limite de capacidade.

Quanto a precisar indexar.... provavelmente foi criado com a opção "auto-open".
Quando o arquivo é usado assim, automaticamente abre os índices.

Converter dbf foxpro para dbf xharbour

Enviado: 02 Jul 2021 00:31
por deividdjs
Boa noite José acredito q sim.. porém ele copia o primeiro e segundo registro após isso fica colocando segundo registro até estourar o limite mesmo ... o estranho q indexei é funcionou... sei lá o que aconteceu ...

Obrigado amigo!!

Converter dbf foxpro para dbf xharbour

Enviado: 02 Jul 2021 08:24
por JoséQuintas

Código: Selecionar todos

   use TMPRO
   do while !EOF()
      ...
      use PRO                                            
      append blank                                       
      use TMPRO
      skip                                        
   enddo
Acima é o seu fonte POSTADO, apenas retirei as variáveis, pra ficar mais visível.

A rotina no LOOP usa o registro atual de TMPRO para o PRO.
Na primeira vez, copia o primeiro registro.
Dentro do LOOP tem o USE TMPRO e SKIP, que causa do LOOP ficar ETERNAMENTE no segundo registro.
Como a rotina NUNCA vai parar, vai doar até estourar alguma capacidade na gravação.

Se funcionou, não foi a rotina postada.
Tanto faz se está indexado ou não.

Converter dbf foxpro para dbf xharbour

Enviado: 02 Jul 2021 08:29
por JoséQuintas
Faltou dizer:

O correto é trabalhar com os dois arquivos abertos ao mesmo tempo, nem de variável precisa.

Código: Selecionar todos

USE PRO NEW
USE TMPRO NEW
DO WHILE ! Eof()
   SELECT PRO
   APPEND BLANK
   REPLACE PRO->CODIGO WITH TMPRO->CODIGO
   ...
   SELECT TMPRO
   SKIP
ENDDO
Assim a posição de trabalho é mantida, e o SKIP é a partir da posição atual, até acabar.
E assim não cria variável à toa.