Página 5 de 9
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 11:04
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.
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 11:22
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.
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 11:38
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!
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 11:47
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.
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 12:35
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)
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 13:36
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 é.
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 14:05
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!
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 14:30
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?
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 14:45
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.
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 15:46
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!
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 16:04
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!
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 16:18
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).
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 17:44
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!
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 18:04
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.
Converter de Clipper para Harbour
Enviado: 09 Fev 2015 18:20
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.