Página 1 de 3

Ajuda Migracao.

Enviado: 17 Mar 2011 19:06
por mraakkari
Primeiramente gostaria de agecer por esta ferramenta de discussao.

Bom, nao entendo nada de harbour ou xharbour.

Tenho um prg em clipper summer que gostaria de converte-lo em harbour.

Esse prg tem base:dbf e indice:ntx, e gostaria de adapta-lo com base:dbf e indice:CDX.
Estrtura CDX:

produto.cdx

prodcod
proddescr
prodbarr
prodpreco


Segue codigo

Código: Selecionar todos

! cls
set exclusive off
set date british
set century on
use stkmaste 
do while .t.
   use basedados
   if ! file ('codbarra.ntx')
      set exclusive off
      use stkmaste
      index on cod_barra to codbarra
      close
   endif
vpreco1=0
set color to gr+/n
@ 00,00 clear to 09,79
@ 01,01 to 05,79 double
@ 06,01 to 24,79 double
@ 03,29 say 'TERMINAL DE CONSULTA'
@ 12,24 say 'Codigo de Barra'
@ 15,10 say 'Descricao'
@ 15,62 say 'Marca'
@ 19,29 say 'Preco R$:'
set color to
set color to w/n
vcod_barra=space(14)
vpreco1=0
vdescricao=space(50)
vmarca=space(9)

@ 12,40 get vcod_barra picture '99999999999999'
read
   
   if lastkey () = 27
      clear
      quit
   endif
set index to stkbarra
   find (vcod_barra)
   if eof ()
      set color to w/n*
      @ 09,27 say "Codigo Nao Encontrado..."
      set color to
      set color to r/n
      @ 16,10 say "Descricao nao encontrada!                        "
      @ 16,62 say "N/E      "
      @ 19,39 say "      0.00"
      set color to
*      inkey (0)
*      inkey (4)
      close
      loop
      set color to
   endif
   vdescricao=descricao
   vmarca=marca
   vpreco1=prvvmn_v
   @ 16,10 say vdescricao picture "@!"
   @ 16,62 say vmarca picture "@!"
   @ 19,39 say vpreco1 picture"999,999.99"
*   inkey(0)
   vcod_barra=space(14)
   close
   @ 00,00 clear to 06,79
   goto top
enddo
close all
return


Re: Ajuda Migracao.

Enviado: 18 Mar 2011 00:18
por alxsts
Olá!

Seja bem-vindo ao fórum, caro mraakkari!
mraakkari escreveu:Bom, nao entendo nada de harbour ou xharbour.
Não sei se você é programador ou apenas usuário deste aplicativo. De qualquer forma, disponho-me a ajudá-lo nesta migração.

Notei, no código postado, a abertura de duas tabelas: stkmaste e basedados. Você informou a estrutura de qual tabela? Basedados?
Para que serve a primeira? Existe tambem uma referência confusa a um arquivo de índice:

Código: Selecionar todos

set index to stkbarra
.
Poderia esclarecer? Informe as tabelas corretas, com os respectivos layouts e índices.

Essa é uma aplicação típica de supermercados, o chamado terminal de consulta (acho que alguns o chamam de São Tomé). Qual o tipo de monitor onde será executada esta aplicação?

Você terá que fazer um programa para converter a base de NTX para CDX e converter o teu aplicativo. Se for difícil para você baixar o compilador xHarbour, e em se tratando de uma aplicação pequena, poderei compilar e te enviar por e-mail. Farei alguns ajustes no código, se você permitir, que serão publicados aqui neste fórum,

Re: Ajuda Migracao.

Enviado: 18 Mar 2011 10:13
por mraakkari
obrigado pela resposta.

é somente uma dbf, onde esta stkmaste, favor ler se BASEDADOS, pois esqueci de altera-lo, e ja postei a estrutura cdx.

gostaria muito das suas alteracoes e favor posta-lo aqui, pois pretendo aprender a compilar essa linguagem.

sou programador OPP em Java e estou apanhando nessa estruturada, pois acho que já é uma linguagem em desuso.


abraços...

Ajuda Migracao.

Enviado: 18 Mar 2011 12:36
por Pablo César
sou programador OPP em Java e estou apanhando nessa estruturada, pois acho que já é uma linguagem em desuso
Desuso ? O Clipper realmente está sendo deixado de lado, mas com [x]Harbour e GUI libs está ganhando forças novamente.

Se você tiver interesse na linguagem xBase, não desmerecendo o esforço do colega que se dispõe em fazer para você, em migrar de forma rápida e fácil em modo console, leia esta mensagem: https://pctoledo.org/forum/viewto ... 543#p66474 Neste tópico encontra-se um arquivo .doc que dá todas as dicas para uma migração rápida em modo console. A IDE HMG 3.0.35 é uma ferramenta com mais fácil comprensão para os que estão migrando do Clipper e teremos a HMG versão 4 que é baseado na tecnologia QT, multiplataforma e mais voltada a OPP (ja que você é programador Java).

Re: Ajuda Migracao.

Enviado: 18 Mar 2011 14:23
por mraakkari
Pablo, obrigado pela resposta...

Antes, eu disse que "achava" que era uma linguagem em desuso, mas pelo visto me enganei, pois ainda nao tinha ouvido falar harbour, e so o conheci pela busca na internet.

Li o artigo e acho que nao me servirá, pois tem esse trecho:"HMG: Um compilador Harbour com baterias inclusas. Se você não está interessado em Linux ou Mac-OS e quer apenas que a sua aplicação seja instalado tudo que precisa. Um Compilador C, binarios e arquivo bat com muitos exemplos. Cada programa criado é chamado de "Harbour MiniGUI" ou apenas "HMG" abreviado."

O que eu quero é justamento o contrário, que meu prg seja executado em LINUX, pois meu servidor foi trocado de NOVELL para LINUX, o programa foi modificado. Quero acoplar esse sisteminha de busca, como era antigamente, só que agora o programa trabalha com DBF e CDX (antes, DBF e NTX (era usado muitos NTXs para um mesmo dbf, e agora é somente um CDX pra 1 unico dbf, como mencionei a estrutura no primeiro post).

Acho que consegui detalhar melhor o que preciso.

Obrigado

Re: Ajuda Migracao.

Enviado: 18 Mar 2011 15:39
por alxsts
Olá!

Segue uma possível solução:

Código: Selecionar todos

#include "box.ch"
#include "inkey.ch"
   
REQUEST DBFCDX

FUNCTION Main()

   LOCAL cCodBarra, nCod, GetList := {}

   SetColor( "N/W,B+/W*" )

   RddSetDefault( "DBFCDX" )
   
   SET SCOREBOARD OFF
   SET OPTIMIZE ON
   
   SET AUTOPEN ON
   SET AUTORDER TO 1
   SET DELETED ON

   // Criei e populei uma tabela, para efeito de testes - favor retirar depois...
   If .Not. File( "stkmaste.Dbf" )
      DbCreate( "stkmaste", { { "prodcod",   "N",  6, 0 }, ;
                              { "proddescr", "C", 50, 0 }, ;
                              { "prodbarr",  "C", 14, 0 }, ;
                              { "prodpreco", "N",  9, 2 }  ;
                            } ;
              )  

      USE stkmaste EXCLUSIVE NEW

      For nCod := 1 To 100
         stkmaste->( DbAppend() )
         stkmaste->prodcod   := nCod
         stkmaste->proddescr := "Produto " + Str( nCod,,,.T. )
         stkmaste->prodbarr  := PadL( nCod, 14, "0" ) 
         stkmaste->prodpreco := HB_Random( 1, 999999 ) / 1000
      Next
      stkmaste->( DbCloseArea() ) 
   Endif
   //--------------------

   USE stkmaste SHARED NEW

   If .Not. File( "stkmaste" + IndexExt() )
      INDEX ON prodbarr TAG codbarra TO stkmaste
   Endif

   DispBox( 0, 0, 5, 79, B_DOUBLE + " " )
   DispBox( 6, 0,24,79, B_DOUBLE + " " )
   @ 03,1 Say PadC( "TERMINAL DE CONSULTAS", 78 ) Color "B+/W"

   While LastKey() != K_ESC

      cCodBarra := Space(14)
      @ 12,24 Say "Codigo de Barras" ;
              Get cCodBarra ;
             Pict "99999999999999"

      READ

      If LastKey() != K_ESC
         If stkmaste->( DbSeek( cCodBarra ) )
            @ 12,24 say "Descricao: " + stkmaste->proddescr Color "B+/W"
            @ 14,24 say "Marca    : " + "<marca>" Color "B+/W" 
            @ 16,24 say "Preco R$ : " + Transform( stkmaste->prodpreco, "@E 999,999.99" ) Color "B+/W"
            Inkey(3)
         Else
            Alert( "Codigo Nao Encontrado..." )
         Endif
      Endif  
   EndDo

   DbCloseAll()

   RETURN NIL
//------------------------------------------------------------------------------
Favor testar e me dar um retorno.

Re: Ajuda Migracao.

Enviado: 18 Mar 2011 16:40
por mraakkari
Alexandre muito obrigado pela ajuda, o codigo estava quase perfeito, tive que alterar algumas coisinhas.

Agora to sofrendo na compilação, pois compilei com o HMG IDE, ele cria o exe com um icone do windows, tentei executá-lo em ms-dos 6.22 e nao rodou, pois requer SO windows. Segui os passos para compilaçao em modo console com o HMG tambem nao deu.

obrigado e mais uma vez agradeço pela colaboração.

Re: Ajuda Migracao.

Enviado: 18 Mar 2011 16:41
por mraakkari
esqueci


quero roda-lo em modo console no linux.

Ajuda Migracao

Enviado: 18 Mar 2011 16:49
por Pablo César
mraakkari escreveu:O que eu quero é justamento o contrário, que meu prg seja executado em LINUX
Talvez você não tenha notado a minha citação:
teremos a HMG versão 4 que é baseado na tecnologia QT, multiplataforma e mais voltada a OPP (ja que você é programador Java)
Veja este artigo: http://hmglights.wordpress.com/2010/09/ ... -ao-final/

Como eu disse, se tiver interesse...

Apenas quis apresentar o HMG 3 que é de fácil digestão e aquele comentário citado refere-se a versão 3 não 4. Você anunciou a vontade de converter para Harbour e a utilização da IDE HMG é um caminho. Agora se você escolherá utilizar a versão 4 ou 3 ao início é apenas mais uma opção.

Re: Ajuda Migracao.

Enviado: 18 Mar 2011 16:51
por alxsts
Olá!

As alterações são normais pois eu não tinha todos os detalhes.

Veja se consegue compilar com o xHarbour no Linux com o script que segue:

Código: Selecionar todos

#GCC
!ifndef CC_DIR
CC_DIR = $(MAKE_DIR)
!endif

!ifndef HB_DIR
HB_DIR = $(HARBOUR_DIR)
!endif
 
RECURSE= NO 
 
SHELL = 
COMPRESS = NO
EXTERNALLIB = NO
XFWH = NO
FILESTOADD =  5
WARNINGLEVEL =  0
USERDEFINE = 
USERINCLUDE = 
USERLIBS = 
EDITOR = mcedit
GUI = NO
MT = NO
PROJECT = tirateima.xhb $(PR) 
OBJFILES = $(OB) 
PRGFILES = $(PS)
OBJCFILES = $(OBC) 
CFILES = $(CF)
RESFILES = 
RESDEPEN = 
TOPMODULE = 
LIBFILES = -Wl,--start-group -lvm -lrtl -lpcrepos -lgtcrs -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfntx -ldbfcdx -ldbffpt -lhsx -lhbsix -lcommon -lcodepage -lgtnul -Wl,--end-group -lncurses -lslang -lgpm  -lpthread -lm
EXTLIBFILES =
DEFFILE = 
HARBOURFLAGS =  -w0
CFLAG1 = $(SHELL) -I/usr/include/xharbour -c -Wall 
CFLAG2 = -L$(HB_LIB_INSTALL)
RFLAGS = 
LFLAGS =  $(CFLAG2) 
IFLAGS = 
LINKER = gcc
 
ALLOBJ = $(OBJFILES)  $(OBJCFILES)
ALLRES = $(RESDEPEN) 
ALLLIB = $(USERLIBS) $(LIBFILES) 
.autodepend
 
#DEPENDS
 
#COMMANDS
.cpp.o:
gcc $(CFLAG1) $(CFLAG2) -o$* $**
 
.c.o:
gcc -I/usr/include/xharbour $(CFLAG1) $(CFLAG2) -I. -g -o$* $**
 
.prg.o:
harbour -D__EXPORT__  -n  -go -I/usr/include/xharbour $(HARBOURFLAGS) -I.  -o$* $**
 
#BUILD
 
$(PROJECT): $(CFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE)
    $(LINKER) @&&!
    $(PROJECT) 
    $(ALLOBJ)  
    $(LFLAGS)  
    $(ALLLIB)  
!
No prompt de comando do Linux digite hbmake tirateima.bc. Para executar, digite tirateima.xhb.

Re: Ajuda Migracao.

Enviado: 18 Mar 2011 17:32
por mraakkari
Alexandre,

antes um probleminha:

voce esta criando um cdx : INDEX ON prodbarr TAG codbarra TO stkmaste
eu gostaria de usar um ja criado, no clipper eu usava SET INDEX, tentei e nao deu certo, voce pode me ajudar?

Quanto ao linux, so vou poder testar na segunda-feira, pois não o tenho instalado em casa. Alias nem o harbour no linux la tem. Quanto a isso vou procurar como instalar.

mais uma vez, obrigado...

Re: Ajuda Migracao.

Enviado: 18 Mar 2011 17:38
por alxsts
Olá!

Quando você usa DBFCDX, pode configurar a abertura automática dos índices quando abre a tabela de dados. Pode ainda determinar a ordem ativa. Foi o que fiz no fonte que postei:

Código: Selecionar todos

   SET AUTOPEN ON 
   SET AUTORDER TO 1 
Quando você abre a tabela, o índice 1 já vem aberto. No caso só tem um índice mas, poderia ser qualquer um que exista.

Re: Ajuda Migracao.

Enviado: 19 Mar 2011 09:30
por mraakkari
entendi essa parte.

mas no meu diretorio existem varios arquivos cdx correspondentes a outras tabelas, como faço para abrir somente o cdx que eu quero, tentei de varias formas e nada.

depois dessa linha: USE itens SHARED NEW
quero abrir um cdx ja existente, tentei usar esse comando e nao deu certo: set index to arquivo.cdx

Re: Ajuda Migracao.

Enviado: 19 Mar 2011 13:23
por alxsts
Olá!

O Arquivo CDX tem que ter o mesmo nome da tabela principal. Entendeu?
Dentro desta "bolsa de ordens", que é o CDX, você cria várias ordens (tags), cada uma com um nome.
Quando você usa DBFCDX e AUTOPEN está ativo, o comando USE procura um CDX com o mesmo nome da tabela que você etá abrindo e o abre. Não há necessidade de abrir outro CDX.

Você disse antes que o arquivo só tinha uma ordem. Por que está querendo abrir outro CDX?
Se precisar de outra ordem, crie uma nova TAG no arquivo CDX que já existe. Por exemplo:

Código: Selecionar todos

INDEX ON proddescr TAG descricao TO stkmaste

Segue uma versão melhorada do programa. Retirei o Alert(), que requer a digitação de algo antes de prosseguir, e troquei por uma mensagem temporizada. Afinal, é um terminal de consulta onde o usuário não terá um teclado à disposição.

Código: Selecionar todos

#include "box.ch"
#include "inkey.ch"
#include "setcurs.ch"
   
REQUEST DBFCDX

FUNCTION Main()

   LOCAL cCodBarra, nCod, cScreen, GetList := {}

   SetColor( "N/W,B+/W*" )

   RddSetDefault( "DBFCDX" )
   
   SET SCOREBOARD OFF
   SET OPTIMIZE ON
   
   SET AUTOPEN ON
   SET AUTORDER TO 1
   SET DELETED ON

   // Criei e populei uma tabela, para efeito de testes - favor retirar depois...
   If .Not. File( "stkmaste.Dbf" )
      DbCreate( "stkmaste", { { "prodcod",   "N",  6, 0 }, ;
                              { "proddescr", "C", 50, 0 }, ;
                              { "prodbarr",  "C", 14, 0 }, ;
                              { "prodpreco", "N",  9, 2 }  ;
                            } ;
              )  

      USE stkmaste EXCLUSIVE NEW

      For nCod := 1 To 100
         stkmaste->( DbAppend() )
         stkmaste->prodcod   := nCod
         stkmaste->proddescr := "Produto " + Str( nCod,,,.T. )
         stkmaste->prodbarr  := PadL( nCod, 14, "0" ) 
         stkmaste->prodpreco := HB_Random( 1, 999999 ) / 1000
      Next
      stkmaste->( DbCloseArea() ) 
   Endif
   //--------------------

   USE stkmaste SHARED NEW

   If .Not. File( "stkmaste" + IndexExt() )
      INDEX ON prodbarr TAG codbarra TO stkmaste
   Endif

   DispBox( 0, 0, 5, 79, B_DOUBLE + " ", "W+/W" )

   @ 03,1 Say PadC( "TERMINAL DE CONSULTAS", 78 ) Color "B+/W"

   While LastKey() != K_ESC
      DispBox( 6, 0,24,79, B_DOUBLE + " ", "W+/W" )
      cCodBarra := Space(14)

      SetCursor( SC_NORMAL )

      @ 12,24 Say "Codigo de Barras" ;
              Get cCodBarra ;
             Pict "99999999999999"

      READ

      SetCursor( SC_NONE )

      If LastKey() != K_ESC
         If stkmaste->( DbSeek( cCodBarra ) )
            @ 12,24 say "Descricao: " + Left( stkmaste->proddescr, 40 ) Color "B+/W"
            @ 14,24 say "Marca    : " + "[falta campo no cadastro]" Color "B+/W" 
            @ 16,24 say "Preco R$ : " + Transform( stkmaste->prodpreco, "@E 999,999.99" ) Color "B+/W"
            Inkey(3)
         Else

            cScreen := SaveScreen( 12, 24, 16, 54 )
            DispBox( 12, 24, 16, 54, B_DOUBLE + " ", "N/GR*" )  
            @ 14, 26 Say "Produto nao encontrado..." Color "N/GR*"
            Inkey(3)
            RestScreen( 12, 24, 16, 54, cScreen ) 
         Endif
      Endif  
   EndDo

   DbCloseAll()

   RETURN NIL
//------------------------------------------------------------------------------

Re: Ajuda Migracao.

Enviado: 10 Abr 2011 20:43
por Alexandre Silva
Vi bastante material aqui..
Eu só quero usar o Harbour console..
Instalei um aplicativo que criou as pastas
hmg e hmg4.0 com todas aquelas subpastas bin lib etc
Tb instalai BCC55 (complilador C)
Tb baixei o Hbmake
Tudo nos path certinho

Chego até a fazer o makefile.lnk
mas nao consigo linkar e gerar executavel
quero trabalhar tudo com comandos do Prompt do msdos(CMD)

Como seria a sequencia para fazer o classico Oi Mundo ??

oi.prg
function main()
cls
@ 10,10 say 'Oi Mundo..'