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:
.
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:
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:
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..'