Converter de Clipper para Harbour

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

Moderador: Moderadores

Avatar do usuário
aprendiz_ce
Usuário Nível 3
Usuário Nível 3
Mensagens: 147
Registrado em: 21 Jul 2011 10:05
Localização: Fortaleza/CE

Converter de Clipper para Harbour

Mensagem por aprendiz_ce »

Olá José Quintas,

Pois é, eu acabei de rodar aquele pequeno teste de teclas recomendado por você e o mesmo intercepta todas as teclas normalmente. Usei somente LastKey() e não usei #include "inkey.ch" e deu certinho. O que eu faço? O problema é que o sistema que realmente quero converter para o Harbour usa muito DBEdit() e Achoice() para ativar sub-rotinas através de varias teclas de funções. Se eu não conseguir converter uma sistema pequeno, imagina como vou fazer com o ERP que é bem grande e cheio de rotinas bem especificas.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Converter de Clipper para Harbour

Mensagem por Itamar M. Lins Jr. »

Ola!
Achoice já usei muito é funciona.

Código: Selecionar todos

  opsel  := achoice(li+1,ci+1,(li+lf),(ci+cf),matriz,.t.,,opsel1)
Seria interessante vc tentar colocar aqui o fonte todo dessa rotina com dbedit, com suas modificações para podermos isolar o problema.
Não coloque o que não for necessário, apenas o crucial.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
aprendiz_ce
Usuário Nível 3
Usuário Nível 3
Mensagens: 147
Registrado em: 21 Jul 2011 10:05
Localização: Fortaleza/CE

Converter de Clipper para Harbour

Mensagem por aprendiz_ce »

Olá Itamar, Bom Dia!

Ainda bem que o Achoice funciona! Ufa! (rs)

Sobre a rotina: Eu já postei anteriormente a rotina e da forma que você recomenda, ou seja, somente o que interessa. Essa rotina é bem simples mesmo, ela faz uma consulta com DBEdit() em cima de uma pequena tabela de cadastro que contem uma dezena de registros. A função auxiliar é só para mudar a ordem dos índices e consequentemente melhorar a visualização dos registros, somente isso! O bom é que o toque de teclas é interceptado por todo o sistema, tanto em menus, helps (cadastros) e "ESC" para saída das subrotinas, mas somente nessa questão do DBEdit() é que está dando problema. Uma coisa que me deixa encucado é o fato do "ESC" funcionar dentro de função do DBEdit(), pois penso que se nem isso funcionasse a saída no DBEdit() não ocorreria e o usuário ficaria preso dentro da consulta sem a condição de sair da mesma.

Mais uma vez obrigado pela atenção e interesse em me ajudar.

Forte abraço!
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Converter de Clipper para Harbour

Mensagem por Itamar M. Lins Jr. »

Ola!
Eu já postei anteriormente a rotina e da forma que você recomenda, ou seja, somente o que interessa.
Não postou.
Tem que rodar aqui sem mexer nada no seu código, não tem como testarmos aqui da forma que vc postou.
Tem que colocar lá o FUNCTION MAIN, Criar a estrutura do DBF, indexar... tem que fazer fica fácil aqui p/ nós o interesse é seu, nós ajudamos. Mas muita gente vê o que vc postou e não testa (meu caso) porque não tem como.
Isolar o problema é fazer a rotina toda, bem simplificada, só o essencial e auto executável.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Converter de Clipper para Harbour

Mensagem por Jairo Maia »

Olá Aprendiz,

Altere sua função DBedit31() desta forma e veja o que acontece:

Código: Selecionar todos

Function DBedit31
Parameters Modo
Aguarde('F2-Muda ordem "'+IndexKey()+'"')
//Tecla := LastKey()
RetDb := 1
If Modo = 4
   If LastKey() = 27
      RetDb := 0
   ElseIf LastKey() = -1
      If IndexOrd() = 1
         Set Order To 2
      ElseIf IndexOrd() = 2
         Set Order To 1
      Endif
      Go Top
      RetDb := 2
   Endif
Endif
Return (RetDb)
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
aprendiz_ce
Usuário Nível 3
Usuário Nível 3
Mensagens: 147
Registrado em: 21 Jul 2011 10:05
Localização: Fortaleza/CE

Converter de Clipper para Harbour

Mensagem por aprendiz_ce »

Olá José Quintas,

Eu uso "bolsa de indices" (CDX) e os respectivos índices existem sim. Isso foi umas das primeiras coisas que eu verifiquei. E tem mais, essa rotina já rodava e roda certinha em Clipper. O problema está é dentro da função do DBEdit(), apenas eu ainda não consegui você entender o que é.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar do usuário
aprendiz_ce
Usuário Nível 3
Usuário Nível 3
Mensagens: 147
Registrado em: 21 Jul 2011 10:05
Localização: Fortaleza/CE

Converter de Clipper para Harbour

Mensagem por aprendiz_ce »

Olá Jairo, Boa Tarde!

Você foi direto ao ponto! A minha "segueira" induziu todo mundo a dúvida coletiva, a especulações disso ou aquilo e até mesmo ao erro por assim dizer. Mas tudo culpa minha! Peço mil desculpas a todos.

O problema não tem nada haver com LastKey() e sim com a seleção na ordem dos índices. Troquei o IndexKey() por IndexOrd() conforme o você recomendou e ficou tudo certinho. São coisas desse tipo que as vezes me metem medo na hora de fazer certas conversões, pois são muito sutis e as vezes passam desapercebidas e consequentemente dando muito dor de cabeça. Nunca na minha vida (pelo menos para o momento) e iria acha que fosse isso.

Mais uma fez obrigado a você e aos colegas pela atenção.

Forte abraço!
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Converter de Clipper para Harbour

Mensagem por JoséQuintas »

Se olhar o fonte que postei é exatamente com sua rotina usando IndexKey() e funciona.

Então deve ter colocado chave do índice errada, mas também não funcionaria no Clipper.

Por acaso é rotina nova ou já existia?
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Converter de Clipper para Harbour

Mensagem por Itamar M. Lins Jr. »

Pois é aprendiz_ce
Era só testar isso.
nKey := Lastkey()
IF nKey == K_F2
alert("estou aqui")
ENDIF

É assim mesmo, vamos pra frente.

Te aguardo na HBIDE a qual somente os fortes e destemidos conseguem usar...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
aprendiz_ce
Usuário Nível 3
Usuário Nível 3
Mensagens: 147
Registrado em: 21 Jul 2011 10:05
Localização: Fortaleza/CE

Converter de Clipper para Harbour

Mensagem por aprendiz_ce »

Se olhar o fonte que postei é exatamente com sua rotina usando IndexKey() e funciona.

Então deve ter colocado chave do índice errada, mas também não funcionaria no Clipper.

Por acaso é rotina nova ou já existia?
É novinha! Só tem 19 aninhos de idade. Uma adolescente. (rs)

Deixando a brincadeira de lado. A mesma é antiga e tenho centenas de rotinas similares funcionando certinho em Clipper.

Acredito que no seu teste a rotina funcionou, mas no meu caso não! Analisando a questão, o IndexKey() é utilizado para exibir a chave de índice selecionada e isso é exibido corretamente. Não mexi nessa linha. Daí na hora de comparar para mudar a ordem do índice a coisa não dá certo. Fico maluco com essas coisa! Vai entender!
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar do usuário
aprendiz_ce
Usuário Nível 3
Usuário Nível 3
Mensagens: 147
Registrado em: 21 Jul 2011 10:05
Localização: Fortaleza/CE

Converter de Clipper para Harbour

Mensagem por aprendiz_ce »


Pois é aprendiz_ce
Era só testar isso.
nKey := Lastkey()
IF nKey == K_F2
alert("estou aqui")
ENDIF

É assim mesmo, vamos pra frente.

Te aguardo na HBIDE a qual somente os fortes e destemidos conseguem usar...
Itamar,

Pois é, eu fiz teste de teclado fora da rotina. Dentro eu só focava o resultado da consulta, daí deu no que deu! (rs)

Nossa, a HBIDE é tão complexa assim? Somente os "fortes" e "destemidos" conseguem usar? Será que me encaixo nesse perfil?! (rs)

Vou te ser sincero. Estou maravilhado com o Harbour nesse primeiro contato, e se eu conseguir converter meu aplicativo para Harbour deixando ele todo certinho, daí vou encarar esse desafio, pois como tenho o Linux como objetivo final, acho que vou acabar necessitando dele mesmo. Falo isso levando em conta os seus comentários sobre o mesmo, mas só farei isso num segundo momento. Ok?

Aquele abraço!
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Converter de Clipper para Harbour

Mensagem por Jairo Maia »

Olá Pessoal,
aprendiz_ce escreveu: Troquei o IndexKey() por IndexOrd() [...] e ficou tudo certinho
Isso confirma o que eu achava a medida que acompanhava o tópico, e vou deixar para registro, pois pode se repetir com algum outro colega...
JoséQuintas escreveu:Se olhar o fonte que postei é exatamente com sua rotina usando IndexKey() e funciona.
Então deve ter colocado chave do índice errada, mas também não funcionaria no Clipper.
Foi com base no seu exemplo que arrisquei meu palpite, pois o que eu achava embora não tinha certeza é que em Clipper, a função IndexKey() retorna a chave do indice em Upper Case (Maiúsculas, ou Caixa Alta), enquanto Harbour retorna exatamente como ela foi escrita. Assim, as condicionais dele IndexKey() = 'CODIGRU' e IndexKey() = 'DESCGRU' poderiam não estar retornando .T., pensei em sugerir alterar para Upper( IndexKey() ) = 'CODIGRU' e Upper( IndexKey() ) = 'DESCGRU' . Mas preferi sugerir uma sintaxe literal, e como funcionou, bola pra frente...

Para descontrair:
Itamar M. Lins Jr. escreveu:Te aguardo na HBIDE a qual somente os fortes e destemidos conseguem usar...
Boa tarde pra você também Itamar... (risos).
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
aprendiz_ce
Usuário Nível 3
Usuário Nível 3
Mensagens: 147
Registrado em: 21 Jul 2011 10:05
Localização: Fortaleza/CE

Converter de Clipper para Harbour

Mensagem por aprendiz_ce »

Jairo,

Apesar de ter dado certo, deve haver algo de errado, só não sei o que pode ser!
Foi com base no seu exemplo que arrisquei meu palpite, pois o que eu achava embora não tinha certeza é que em Clipper, a função IndexKey() retorna a chave do indice em Upper Case (Maiúsculas, ou Caixa Alta), enquanto Harbour retorna exatamente como ela foi escrita. Assim, as condicionais dele IndexKey() = 'CODIGRU' e IndexKey() = 'DESCGRU' poderiam não estar retornando .T., pensei em sugerir alterar para Upper( IndexKey() ) = 'CODIGRU' e Upper( IndexKey() ) = 'DESCGRU' . Mas preferi sugerir uma sintaxe literal, e como funcionou, bola pra frente...


Eu criei tudo em Upper Case, ou seja, usei assim tanto nos campos/colunas da tabela, na criação da chave dos índices e na rotina no momento de comparar o retorno do IndexKey() que para mim está retornando em Upper Case. E aí, o que você diz disso?

Por gentileza, comente.

Abraço!
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar do usuário
aprendiz_ce
Usuário Nível 3
Usuário Nível 3
Mensagens: 147
Registrado em: 21 Jul 2011 10:05
Localização: Fortaleza/CE

Converter de Clipper para Harbour

Mensagem por aprendiz_ce »

Aos Colegas,

Se eu quiser compilar já no Linux e começar a ver como a coisa funciona, é muito complicado? Queria para o momento algo bem simples e prático como foi para o momento no Windows. Estou ansioso e com um pouquinho de tempo sobrando, sendo assim queria aproveitar o momento.

Dei uma olhada, mas não achei nada especifico para Debian que é a distro que eu trabalho. Mas me parece que existe algo pronto para instalar no Ubuntu. É isso mesmo? Qual o caminho a seguir?

Obrigado a todos.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Converter de Clipper para Harbour

Mensagem por Jairo Maia »

Olá Aprendiz,
aprendiz_ce escreveu:Apesar de ter dado certo, deve haver algo de errado, só não sei o que pode ser!
Com razão... A rigor, em Harbour se você usar IndexKey() você não pode usar Set Order to <nIndex>, essa linha precisa ser trocado por OrdKey( <nIndex> ), senão não funciona. O motivo não tenho a menor idéia. Pode até ser um bug, mas realmente IndexKey() anula o comando Set Order To.
aprendiz_ce escreveu:Se eu quiser compilar já no Linux e começar a ver como a coisa funciona, é muito complicado?
Creio que não. Monte o ambiente de compilação no Linux instalando o Harbour para Linux e tente compilar. A rigor nem sei se tem o Harbour já compilado para Linux ou se você é que precisa compilar. Mas como não trabalho em Linux, outro colega mais experiente nisso com certeza vai indicar o melhor a fazer.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder