Página 1 de 2
Migração para xharbour
Enviado: 05 Jun 2008 08:27
por joserubenildosilva
Olá!
Tenho um sistema de factoring rodando hoje com clipper 5.01 com NTX, isso em torno de 80 tabelas e uns 150 indices criados. A Indexação tem que ser diaria, e sempre que um terminal cai(energia, etc) tenho que indexar, isso sem falar nos dados que são perdidos e tal.
Bem, "migrei" para o xharbour, coloquei entre aspas, pois aina acontece algo estranho.
O Sistema esta compilado no xharbour se apresentar problemas, no inicio tive problemas com a dbedit, mas com ajuda aqui no forum consegui contornar o problema, tinha umas funcões que funcionavam certinho no clipper 5.01 e agora não mais funcionam, ou os resultados não são o esperado.
Reconheço que o sistema, em muitos pontos tem os chamados "quebra-galhos" mas funciona, no 5.01 e no xharbour não.
Amigos, o que devo fazer?
Penso em fazer da seguinte forma:
1° deixar ele 100%(fazendo o que faz hoje no 5.01) sem alterar banco de indices(NTX -> CDX)
2° Migrar para indices CDX
3° Compilar para o Linux e usar SSH
3 ° Migrar para um banco relacional(MySql talvez)
Gostaria de algumas dicas e opiniões sobre o assunto.
Obs: Futuramente pretendo acessa-lo via terminal server ou SSH se estiver no Linux.
Sem mais Obrigado
Re: Migração para xharbour
Enviado: 05 Jun 2008 11:10
por rodrmigu
Olá,
Acho que num primeiro momento a migração pra CDX (use com tags, economizará em número de índices) e numa segunda etapa, a migração pra linux que é transparante, ou muito pouco a ser feito.
Já para um futuro, usar um banco de dados, seria o aconselhável, mas vai requerer um pouco mais de adaptação.
[]'s
Rodrigo
Re: Migração para xharbour
Enviado: 05 Jun 2008 11:14
por gvc
1 - Sobre a indexação diária.
Vc esta usando dbcommit() e dbunlock() sempre que termina de gravar os dados em um arquivo?
Eu tinha problemas em um cliente e resolvi colocando o sistema para abrir os arquivos que precisavam no modulo e fechando quando saisse do mesmo. Força um pouco abrir e fechar toda hora, mas não tive mais problemas de reindexação diária.
2 - Dê uma procurada aqui no forum. Temos vários tópicos explicando como migrar para CDX.
3 - Não é a minha praia.
4 - Vc terá que mudar boa parte do seu sistema para usar toda a capacidade de um SGDB relacional.
Apesar de ser poder usar boa parte como o Clipper usa, mas vc estará com um caminhão enorme fazendo entrega de sacolinha de compras.
Um exemplo é que em Clipper nós criamos várias tabelas e usamos vários comandos para selecionar e montar as informações para uma consulta.
Com um SGDB relacional, vc monta o comando SQL para fazer toda a consulta e é retornado como resultado um "arquivo" com todos os dados necessários.
E o ponto mais forte é a segurança das informações.
Eu estou começando a usar ADO para consultar o Oracle. Rapaz, até assusta o que dá para fazer.
Espero ter ajudado. Boa sorte.
Re: Migração para xharbour
Enviado: 05 Jun 2008 12:15
por sygecom
Olá joserubenildosilva,
joserubenildosilva escreveu:Olá!
Tenho um sistema de factoring rodando hoje com clipper 5.01 com NTX, isso em torno de 80 tabelas e uns 150 indices criados. A Indexação tem que ser diaria, e sempre que um terminal cai(energia, etc) tenho que indexar, isso sem falar nos dados que são perdidos e tal.
Bom, por uma falta de energia e um micro sem No-break, até entendo que pode ter problemas, mas fora isso você tem um problema ai, pq isso não é normal de ter que indexar todo dia, eu tenho sistema com muito mais DBF e INDICE e não tenho que fazer isso todo dia e se tivese seria um cara morto por clientes, pq indexar um sistema varios DBF e com milhoes de registros, isso demora muito.
Bem, "migrei" para o xharbour, coloquei entre aspas, pois aina acontece algo estranho.
O Sistema esta compilado no xharbour se apresentar problemas, no inicio tive problemas com a dbedit, mas com ajuda aqui no forum consegui contornar o problema, tinha umas funcões que funcionavam certinho no clipper 5.01 e agora não mais funcionam, ou os resultados não são o esperado.
Reconheço que o sistema, em muitos pontos tem os chamados "quebra-galhos" mas funciona, no 5.01 e no xharbour não.
Jose, por mais que o xharbour seja compativel com Clipper, alguma coisa tem que ajustar, até mesmo para melhor em seus aplicaivos. Como por exemplo a implantação de impressão USB podendo apneas acresentar um
GetDefaultPrinter(). E tem alguns erro que o Clipper permite que o xHarbour não permite, EX:
USE AGENDA ALIAS AGENDA SHARED // abrindo
INDEX ON CODIGO TO AGENDA1 // criando indice
INDEX ON NOME TO AGENDA2 // criando indice
INDEX ON ENDERECO TO AGENDA3 // criando indice
SET INDEX TO AGENDA1,AGENDA2 // abrindo indice
SELE AGENDA
DBSETORDER(3) // aqui o clipper pegaria o primeiro indice pq o 3º não foi aberto, no xharbour ele causa um erro
Então resumindo, Nesse caso acima teria que dar uma revisada em todos fontes principalmente na abertura de DBF e INDICE.
Amigos, o que devo fazer?
Penso em fazer da seguinte forma:
1° deixar ele 100%(fazendo o que faz hoje no 5.01) sem alterar banco de indices(NTX -> CDX)
2° Migrar para indices CDX
3° Compilar para o Linux e usar SSH
3 ° Migrar para um banco relacional(MySql talvez)
Gostaria de algumas dicas e opiniões sobre o assunto.
Obs: Futuramente pretendo acessa-lo via terminal server ou SSH se estiver no Linux.
Na minha opnião em primeiro lugar você deveria fazer esse sistema rodar todo em CDX com TAG, digo isso pq sua dor de cabeça com indice vai se eliminar pela metade. Depois do mesmo rodando todo em CDX vai ficar até mais facil de ver e localizar o pq e onde esta corrompendo os indice, se é que isso vai acontecer depois que tiver todo em CDX com TAG.O Terceiro passo que você citou é muito bom, que é compilar sua app em linux, apenas deve cuidar algumas poucas limitações que acontece em linux, como uso de alguma LIG grafica ou algumas classes que só compilam em Windows, como WIN32PRN, ou seja não compativel com Linux, mas em modo console vai que é beleza.
E sobre migrar a mesma para MYSQL, isso sim, será um grande ganho, digo não só de desempenho(que usando os comandos SQL certo, ele voa baixo) mas por segurança e disponibilidades de integrações com WEB e outros sistemas via REMOTO.
Apesar com RDDLETO, hoje é possivel usar DBF remoto, e pode compilar em Windows e Linux.
Se quiser saber mais sobre RDD LETO, postei ontem um pequeno passo a passo de como compilar e usar.
viewtopic.php?f=33&t=8167
Abraços
Leonardo Machado
Re: Migração para xharbour
Enviado: 05 Jun 2008 12:22
por Hasse
Bom dia José.
A primeira coisa absolutamente necessária é que haja energia estável, e sempre. Não acredito que haja algum sistema que seja totalmente imune à energia de má qualidade. Este assunto é tão longo e complicado que dá para escrever um livro.
Providencie energia limpa, e isto quer dizer, estável e sem muitas harmônicas e você vai ver que os teus problemas cairão 90%. Campos magnéticos muitos fortes também podem incomodar.
Migrar para o CDX é uma MUITO boa. Fiz isto já faz alguns anos e fiquei extremamente satisfeito com os resultados. E esta migração é fácil, com bem poucas alterações. E mais um detalhe, use o CDX com TAG, exatamente como o Leonardo recomendou, ou seja, um arquivo CDX para cada DBF. Todos os índices estarão neste único arquivo CDX. Quando você abre o DBF o CDX é aberto automaticamente, sem bem que eu ainda mantenho o comando de abertura dos índices.
O compilador do xHarbour é mais exigente do que o Clipper, contudo, depois de corrigidos os erros (???) você vai ter um sistema bem mais confiável.
Re: Migração para xharbour
Enviado: 05 Jun 2008 16:34
por rodrmigu
Olá José,
Sobre corrupção de índices vai muito da forma como vc trabalha com eles. Vc costuma abri-los todos no começo do sistema e os deixa abertos, ou vai abrindo e fechando conforme a necessidade?
Dependendo do que vc usa, tenho uma solução pro seu caso.
[]'s
Rodrigo
Re: Migração para xharbour
Enviado: 05 Jun 2008 17:24
por joserubenildosilva
O Sistema Abre todos os arquivos no login de acesso. Concordo que isso não é seguro.
Agradeço a todos pelas colaborações. Certamente acharei(emos) a solução ideal.
Re: Migração para xharbour
Enviado: 05 Jun 2008 18:17
por rodrmigu
Olá José,
Então segue abaixo um exemplo de como resolver isso. Primeiro, vc precisa tirar do seu sistema essa opcao de abrir os arquivos logo apos o login. Como nos outros módulos provavelmente vc nao tem um USE ... INDEX ... e para nao precisar fazer isso em cada modulo, vc pode usar o exemplo abaixo.
Código: Selecionar todos
#include "error.ch"
REQUEST DBFCDX
Procedure Main()
RDDSETDEFAULT("DBFCDX")
CreateTable()
//USE testcdx INDEX testcdx // Esta linha não é mais necessária com a utilização da ErrorSys abaixo.
// ? testcdx->codigo // Este código também funciona com o ErrorSys causando um error e interceptando o mesmo e abrindo o arquivo.
SELECT testcdx
? "RddName:", RddName(), Alias()
SET ORDER TO 2
? "Order:", IndexOrd()
SET ORDER TO "Order01"
? "Order:", IndexOrd()
wait
Return
Procedure CreateTable()
local aStruct := {{ "CODIGO", "N", 6, 0 }, ;
{ "NOME", "C", 25, 0 }}
if ! File("testcdx.dbf")
DBCreate( "testcdx", aStruct, "DBFCDX" )
USE testcdx
INDEX ON field->codigo TAG "Order01" TO testcdx.cdx
INDEX ON field->nome TAG "Order02" TO testcdx.cdx
CLOSE ALL
endif
Return
Procedure ErrorSys()
ErrorBlock( {|e| DefError(e)} )
Return
static Function DefError(e)
Local cAlias, i
if ( e:genCode == EG_NOALIAS ) .and. e:tries <= 2 // Aqui é o Pulo do Gato
cAlias := e:operation
USE &cAlias INDEX &cAlias
return (.t.)
endif
if ( !Empty(e:subsystem) )
?? " " + e:subsystem + "/" + Ltrim(Str(e:subCode))
end
if ( !Empty(e:description) )
?? " " + e:description
end
if ( !Empty(e:operation) )
?? ": " + e:operation
end
if ( !Empty(e:filename) )
?? ": " + e:filename
end
i := 2
while ( !Empty(ProcName(i)) )
? "Called from", Trim(ProcName(i)) + ;
"(" + Alltrim(Str(ProcLine(i))) + ") "
i++
enddo
Return (.f.)
Fique tranquilo quanto a velocidade, funciona muito bem, visto que vc passará a usar DBFCDX, entao vc nao precisa mais abrir aquele monte de NTX's. Quando vc chamar o seu modulo pelo menu, ao retornar vc pode dar um CLOSE ALL, com estes métodos, vc reduzirá em muito a corrupção dos índices.
Se observar no Código do errorsys, verá que eu intercepto o Erro ao tentar abrir o arquivo e o codigo o fará pra vc. Esse método eu venho usando desde a época do clipper 5.01 e atualmente faço assim também para abrir minhas tabelas em postgres, e funciona perfeitamente. O mesmo funciona nao apenas para SELECT, mas para qualquer referencia a uma tabela, pode ser através de um tabela-> que funciona beleza.
Espero lque o código acima tenha esclarecido como usar CDX com TAG e uma ajuda extra na abertura dos arquivos.
[]'s
Rodrigo
Re: Migração para xharbour
Enviado: 06 Jun 2008 08:42
por joserubenildosilva
Ola! Rodrigo, Agradeço desde já pela sua Ajuda, mas infelizmente não obtive êxito na minha tentativa de implementar o seu código dentro do sistema.
Coloquei o código da errorSys dentro do meu Prg principal. Na compilação não apresentou erro, porém no momento da execução, e me retorno o seguinte erro:
Unrecoverable Error 9003: Too Many recursive error handler Calls
Estou compilando na versão que ja esta preparada para o xharbour.
Não fiz a tentativa na versão antiga com clipper 5.01
obrigado pela ajuda!!
Re: Migração para xharbour
Enviado: 06 Jun 2008 09:30
por rodrmigu
Jose,
Geralmente este erro acontece quando tem um erro dentro do Errorsys, de maneira que ele entra em loop e nao consegue mostrar o erro e termina o programa.
Faz o seguinte, pega parte do código que passei e implementa na sua errorsys. Se vc nao tiver uma, dá uma olahda na que vem com o xHarbour.
Vc chegou a compilar o código que te passei?
[]'s
Rodrigo
Re: Migração para xharbour
Enviado: 06 Jun 2008 10:00
por joserubenildosilva
Rodrigo, Eu adicionei o Codigo dentro do prg principal da minha aplicação. Substituindo a rotina de ab ertura pela minha que usava ao iniciar o sistema.
Eu não tenho uma rotina ErrorSys.
obrigado
Re: Migração para xharbour
Enviado: 06 Jun 2008 12:06
por rodrmigu
José,
Vc adicionou o error.ch? Vou ficar online no chat, se desejar entra lá e tentamos descobrir o que possa estar ocorrendo.
[]'s
Rodrigo
Re: Migração para xharbour
Enviado: 07 Jun 2008 07:58
por joserubenildosilva
Olá Rodrigo.
Ontem, um cliente estava precisando de atendimento e não pude continuar no Chat. Bem mas depois eu fui martelar aquele código e consegui faze-lo funcionar. Realmente não fica lento como você disse, porém, acho que o grande problema é o sistema como um todo. Durante anos, foram feitas muitos remendos no código e as coisas "malucas" que andam ocorrendo pode ter explicações nos em certos pontos mal elaborados. Agora em muitos opções do sistema, ele chama sempre o ErrorSys, como o ErrorSys, não é o original, fica aparecendo erros na tela, mas não aborta o sistema, isso mostra ao meu ver que tem pontos onde com o clipper 5.01, passa mas ja com o xharbour não. E outra coisa, tem um relatorio que é impresso diariamente é a base do trabalho dos operadores, como o 5.01, sai perfeitamente mas tanto com o xharbour e clipper 5.2x ele duplica informações.
Resumindo, vou ter que rever todo o código, corrigir isso, depois migrar continuar a migração para CDX/Linux etc
Obrigado pela sua colaboração e persistência que ajudar-me.
sem mais
atenciosamente
jose rubenildo da silva
Re: Migração para xharbour
Enviado: 09 Jun 2008 09:28
por rodrmigu
Olá José,
Ainda bem que conseguiu resolver

Quanto ao errorsys, o que te passei era apenas um bem resumido, mas vc pode customiza-lo a sua maneira, etc.
Vou anexar aqui, o do xHarbour e um que eu uso, que foi customizado, entretanto existem funcoes especificas da xhgtk e postgres que precisam ser mudados, mas já serve pra vc ter uma ideia de como montar o seu e fazer mensagens customizadas para o cliente, salvar em log, etc.
[]'s
Rodrigo
Re: Migração para xharbour
Enviado: 09 Jun 2008 17:50
por joserubenildosilva
ola rodrigo!
Baixei os arquivos e vou testa-lo hoje a noite e amanhã posto resultados
sem mais e obrigado