ORDFOR: Função indefinida (xHARBOUR v1.2.1)

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

Moderador: Moderadores

Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por Linguagemclipper »

Estou usando o xHARBOUR v1.2.1
Aparece no help uma função chamada ORDFOR() que preciso usar no momento, mas o xharbour não está exergando. Já ví que tem no Harbour e no Clipper 5.3 também essa função.
No help diz assim:
Category: Database functions , Index functions
Source: rdd\dbcmd.c
LIB: xhb.lib
DLL: xhbdll.dll
Na pasta lib não existe essa lib xhb.lib, é mole? Todavia, existe o fonte em source/rdd/dbcmd.c
Já tentei linkar a lib rdds.lib, mas não deu certo.
O quê que teu tenho que fazer? Meu sistema dá incompatibilidade com o Harbour, tenho que arrumar a solução no xHarbour mesmo.
Meu programa tem vários indexações dependendo do menu selecionado, exemplo:

Código: Selecionar todos

INDEX ON CNPJ+ANO TAG TEMP TO (fINDEX1) ;
         FOR ANO=xANO ;
         ADDITIVE TEMPORARY
Daí, eu no debug faço o seguinte:

? INDEXKEY()
"CNPJ+ANO"

? ORDFOR()
ORDFOR: Função indefinida
-Enquando que era pra dar "ANO=xANO", correto?

Eu chamo uma rotina que muda o filtro do TBROWSE e depois quero ser capaz de limpar o filtro e voltar o que era antes, mas para isso eu preciso capturar os retornos de INDEXKEY() e ORDFOR() para poder recriar o índice visto que é temporário (autodestrói)
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por JoséQuintas »

Esse INDEX FOR é recurso do SIXCDX e ADS.
O ADS foi muito usado no Harbour/XHarbour enquanto o restante não estava pronto.
Ele tem modo de compatibilidade CDX.

Também tem o ADS através de comando SQL.... vai ser muuito mais rápido, porque o acesso é diferente do acesso normal a DBF.
Se é pra quebrar a cabeça... que seja pra melhor.
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: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por Itamar M. Lins Jr. »

Ola!
Na pasta lib não existe essa lib xhb.lib, é mole?
Salvo engano, xHB.lib é uma biblioteca de compatibilidade do Harbour com algumas funções do xHarbour. Basicamente somente os nomes que mudam. Dai não precisamos alterar os fontes quando migramos do xHarbour para o Harbour.

Código: Selecionar todos

tamar@itamar-desktop:~/hwgui-code$ hbmk2 -find ordfor
Núcleo Harbour (instalado):
   ordFor()
Vou ver lá no \contrib\xhb

Código: Selecionar todos

itamar@itamar-desktop:~/hb32-fontes/contrib/xhb$ grep "ordfor" -i *.prg
ttable.prg:   METHOD ordFor() INLINE ( ::alias )->( ordFor( ::Tag, ::cOrderBag ) )
Tenta ligar ela via EXTERNAL

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por Itamar M. Lins Jr. »

Ola!
Esse INDEX FOR é recurso do SIXCDX e ADS.
?
Index com clausula for ? Isso já vem do clipper.
Syntax do clipper

INDEX ON <expKey> [TAG <cOrderName>] [TO <cOrderBagName>]
[FOR <lCondition>] [ALL]
[WHILE <lCondition>] [NEXT <nNumber>]
[RECORD <nRecord>] [REST]
[EVAL <bBlock>] [EVERY <nInterval>]
[UNIQUE] [ASCENDING|DESCENDING]
[USECURRENT] [ADDITIVE]
[CUSTOM] [NOOPTIMIZE]

Código: Selecionar todos

itamar@itamar-desktop:~/hb32-fontes$ hbmk2 -find ordbag
Núcleo Harbour (instalado):
   ordBagClear()
   ordBagExt()
   ordBagName()

itamar@itamar-desktop:~/hb32-fontes$ hbmk2 -find ordkey
Núcleo Harbour (instalado):
   ordKey()
   ordKeyAdd()
   ordKeyCount()
   ordKeyDel()
   ordKeyGoto()
   ordKeyNo()
   ordKeyRelPos()
   ordKeyVal()

Código: Selecionar todos

USE tests NEW VIA "DBFCDX"
      INDEX ON tests->fName ;
         TO tests           ;
         FOR tests->fName > "CK"
      INDEX ON tests->Id TO TestId

      ORDKEY( "tests" )      // Returns: tests->fName
      SET ORDER TO 2
      ORDKEY()               // Returns: tests->Id
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por JoséQuintas »

Mas ele precisa disso no Xharbour.
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: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por Itamar M. Lins Jr. »

Ola!
O xHarbour foi copiado do Harbour.
Na época já tinha essas funções.

Código: Selecionar todos

19991205-14:22 GMT+1 Bruno Cantero <bruno@issnet.net>
  * include/rddapi.h
    source/rdd/dbcmd.c
    source/rdd/dbf1.c
    source/rdd/dbfcdx/dbfcdx1.c
    + Added dbSeek(), IndexOrd(), ordSetFocus(), ordFor(), ordKey(),
      ordNumber(), ordName() and ordBagName() functions.
  * source/rtl/dummy.prg
    - Removed dbSeek(), IndexOrd(), ordSetFocus(), ordFor(), ordKey(),
      ordNumber(), ordName() and ordBagName() functions.
Forçando a linkagem via EXTERNAL deve resolver.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por sygecom »

Celso Portiolli, :)
Já tentou verificar se falta algum .CH para o comando dar certo ? tipo

#include "std.ch"
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por Linguagemclipper »

A função que eu quero rodar é a ORDFOR(), só ela que não funciona aqui.
XHB.lib poderia ser útil se eu estivesse rodando Harbour, mas estou no xHarbour. O engraçado é que no help do xharbour diz que está na lib xhb.lib que acabei não entendendo nada porque achava que essa lib era do harbour, todavia não existe essa lib na lista do hbmake para eu selecionar.
Não sei como é que compila EXTERNAL que alguns disseram, me expliquem como é, por favor.
Enfim, descobrí outra forma de resolver meu problema porque o índice com ADDITIVE TEMPORARY só é destruído quando fechamos o banco de dados e não quando mudamos o índice, daí deu pra gravar com INDEXORD() e restaurar com ORDSETFOCUS().

Código: Selecionar todos

nORD := INDEXORD()  // SALVA O ÍNDICE ATUAL
*** [...] MUDA O FILTRO (INDEX) ETC
ORDSETFOCUS(nORD) // RESTAURA O ÍNDICE ANTERIOR
Só queria saber como linka o External porque vai acabar sendo útil para alguma tool que eu fizer esse ORDFOR() um dia.
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por sygecom »

Aqui uso xHarbour 1.2.3
Fiz uma chamada do ORDFOR() e compilou, e uso as LIB comuns, mas por outro lado uso xbuild.exe em vez do hbmake, talvez o hbmake que está se atrapalhando na hora de adicionar as lib que precisa para compilar.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por JoséQuintas »

Então.... minha sugestão antiga é: usar HBMK2.EXE no XHarbour
Talvez ele gerencie melhor as LIBs do core XHarbour.
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/
frazato
Usuário Nível 3
Usuário Nível 3
Mensagens: 219
Registrado em: 08 Jul 2004 07:45

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por frazato »

Tarde!
Utilizo o xharbour 0.99.70 simples!
com Hbmake v1.17
e compilou normalmente sem erro, só fiquei curioso onde utilizar isso, kkkk!

Código: Selecionar todos


Function Main()

   REQUEST DBFCDX
   RDDSETDEFAULT("dbfcdx")
   DBSETDRIVER("dbfcdx")


   set confirm    On
   set deleted    on
   set bell       off
   set scoreboard off
   set date       british
   set epoch      to 1950
   Set date format to "DD/MM/YYYY"
   Set exclusive off

   Clear

   sele 1
        use produto
        set index to produto 
	INDEX ON DESCRICAO TO C:\TEMP\LIXO for 'NESTLE'$DESCRICAO

	@ 01,00 say ORDFOR(1)
	go top
    	Dbedit(02,00,12,79)

	INDEX ON DESCRICAO TO C:\TEMP\LIXO for ESTOQUE > 0
	@ 13,00 say ORDFOR(1)
	go top
    	Dbedit(14,00,24,79)

close all
return nil


Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por Vlademiro »

Já resolveu?

No Harbour tem o comando request, para inserir uma função que não foi linkada.

Usa assim antes da Main :

Request ordfor
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por Itamar M. Lins Jr. »

Ola!
A respeito do COMANDO EXTERNAL.
Abra lá no seu /utils/xbscript/xbscript.prg
Dá uma olhada lá dentro.

Código: Selecionar todos

   EXTERNAL RDDSYS,AFIELDS,DBEVAL,DBCLEARFILTER,DBCLOSEALL, ;
            DBCOMMIT,__DBCONTINUE,DBCREATE,DBDELETE,DBFILTER,DBGOBOTTOM,DBGOTO, ;
            DBGOTOP,__DBLOCATE,__DBSETLOCATE,__DBPACK,DBRECALL,DBRLOCK,DBRLOCKLIST,DBRUNLOCK,DBSEEK, ;
            DBSELECTAREA,__DBSETFOUND,DBSKIP,DBSETFILTER,DBSTRUCT,DBTABLEEXT,DBUNLOCK,DBUNLOCKALL,DBUSEAREA, ;
            __DBZAP,DELETED,EOF,FCOUNT,FIELDGET,FIELDNAME,FIELDPOS,FIELDPUT,FLOCK,FOUND,HEADER,INDEXORD, ;
            LASTREC,LOCK,LUPDATE,NETERR,ORDBAGEXT,ORDBAGNAME,ORDCONDSET,ORDCREATE,ORDDESTROY,ORDFOR,ORDKEY, ;
            ORDLISTADD,ORDLISTCLEAR,ORDLISTREBUILD,ORDNAME,ORDNUMBER,ORDSETFOCUS,RDDLIST,RDDNAME,RDDREGISTER, ;
            RECCOUNT,RECNO,RECSIZE,RLOCK,SELECT,USED,RDDSETDEFAULT,RDDSETDEFAULT,DBSETDRIVER
Olha lá ela sendo EVOCADA para ser linkada junto.
Em todo caso basta vc digitar ai xbscript e na linha de comando usar

Código: Selecionar todos

? ordfor()
que vai acusar área não aberta. WORKAREA NOT USE

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por Linguagemclipper »

Na minha pasta não tem /utils/xbscript
Vou tentar o "Request ordfor", hbmk2 ou hbmake mais antigo depois, valeu! A versão 1.2.3 do xHarbour deu um bocado de incompatibilidade com minha biblioteca que compila normal na 1.2.1.
Agradeço a todos!
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

ORDFOR: Função indefinida (xHARBOUR v1.2.1)

Mensagem por Linguagemclipper »

Vlademiro,

Deu certo!!! No xHarbour também funciona desse jeito, apenas coloquei antes do function main como você orientou:

Código: Selecionar todos

Request ordfor
Function Main()
Para quem ficou curioso eu desenvolví uma função TBROWSE ninja que faz tudo pra mim, estou aprimorando o filtro. A função filtra qualquer campo e esses campos já podem estar filtrados antes da função ser chamada. Eu não uso o FILTER eu uso INDEX para fazer minhas filtragens porque fica muito mais rápido e dá melhor experiência para o usuário.

Código: Selecionar todos

// ----------- APLICA FILTRO -------------------
cFILTRO += " .AND. "+ORDFOR()
INDEX ON &(cCAMPO) TAG TEMP TO (fINDEX) ;
		FOR (&(cFILTRO));
		ADDITIVE TEMPORARY						
DBGOTOP()
nTOTAL := OrdKeyCount() 	  
// ---------------------------------------------
Funcionou tudo certinho agora como esperado, graças à Deus!!! Pense numa alegria agora!!! hehehe
Muito obrigado, pessoal!
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Responder