Converter dbf foxpro para dbf xharbour

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Converter dbf foxpro para dbf xharbour

Mensagem 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
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Converter dbf foxpro para dbf xharbour

Mensagem por alxsts »

Olá!

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

Simplesmente remova a linha 88 do código acima.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Converter dbf foxpro para dbf xharbour

Mensagem 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
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
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Converter dbf foxpro para dbf xharbour

Mensagem 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!!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Converter dbf foxpro para dbf xharbour

Mensagem 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.
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
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Converter dbf foxpro para dbf xharbour

Mensagem 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!!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Converter dbf foxpro para dbf xharbour

Mensagem 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.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Converter dbf foxpro para dbf xharbour

Mensagem 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.
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/
Responder