Página 1 de 1

SqlRdd

Enviado: 26 Mar 2021 15:00
por nasouza
Boa Tarde,

Como substituir o arquivo dbsetrelation(), pela ajuda vi que seria o SR_SETJOIN(), mas nao estou conseguindo acertar a sintaxe.
Esta seria a estrutura :

Código: Selecionar todos

IF Use_Arq('LOCPROD','LOC',.T.,.F.,.F.)=.F.
   Return
END

IF Use_Arq('PEDPEN_','PEN',.T.,.F.,.F.)=.F.
   Return
else
   //dbsetrelation("loc",{||codi_pro},"codi_pro")
   SR_SetJoin( <nTargetArea>, <cField>, [<nOrignArea>], [<nTargetOrder>] )
END
usando o dbsetrelation() funciona, mas gostaria de poder utilizar o SR_SETJOIN().

Agradeço.

SqlRdd

Enviado: 27 Mar 2021 17:57
por JoséQuintas
Não sei a resposta à sua pergunta, mas por coincidência estou alterando um aplicativo que usa muito abre_Arq() no mesmo estilo desse use_arq()

Sugestão básica para o fonte:

Código: Selecionar todos

IF ! Use_Arq('LOCPROD','LOC',.T.,.F.,.F.)
   Return
ENDIF

IF ! Use_Arq('PEDPEN_','PEN',.T.,.F.,.F.)
   Return
ENDIF
//dbsetrelation("loc",{||codi_pro},"codi_pro")
SR_SetJoin( , , [], [] )
E sugestão não tão básica, pra uso geral no aplicativo:

Código: Selecionar todos

IF ! AbreArquivos( "locprod", "pedpen" )
   RETURN
ENDIF
SELECT pen
//dbsetrelation("loc",{||codi_pro},"codi_pro")
SR_SetJoin( , , [], [] )
...
FUNCTION AbreArquivos( ... )
   LOCAL aList

   aList := hb_AParams()
   FOR EACH cFile IN aList
       IF ! AbreDBF( cFile )
          CLOSE DATABASES
         MsgStop( "Arquivo " + cFile + " não pode ser aberto" )
          RETURN .F.
      ENDIF
   NEXT
   RETURN .T.

FUNCTION AbreDBF( cFile )

   cFile := Lower( cFile )
   DO CASE
   CASE cFile == "locprod"
      IF ! Use_Arq('LOCPROD','LOC',.T.,.F.,.F.)
         Return .F.
      ENDIF
   CASE cFile == "pedpen"
      IF ! Use_Arq('PEDPEN_','PEN',.T.,.F.,.F.)
         Return .F.
      ENDIF
   ENDCASE

   RETURN .T.
A vantagem em trocar para o aplicativo inteiro seria reduzir fonte repetido, e evitar que cada fonte abra o mesmo arquivo com índices diferentes, por exemplo.
No aplicativo que estou mexendo tem muito disso, e com índice errado.
Conforme a opção aberta pela primeira vez, o índice vai ser diferente.

Também facilita futuras mudanças de DBF/NTX pra DBF/CDX ou HBNETIO ou outras.

No fonte em questão, isto:

Código: Selecionar todos

IF ! Use_Arq('LOCPROD','LOC',.T.,.F.,.F.)
   Return
ENDIF

IF ! Use_Arq('PEDPEN_','PEN',.T.,.F.,.F.)
   Return
ENDIF
se altera pra isto:

Código: Selecionar todos

IF ! AbreArquivos( "locprod", "pedpen" )
   RETURN
ENDIF
E quanto mais arquivos, mais economia de fonte, o que se traduz em fonte mais limpo e aplicativo mais fácil de gerenciar.
E cuidado com essa abreviação de ALIAS. procurar LOC e PEN nos fontes do aplicativo vai ser complicado.

SqlRdd

Enviado: 15 Jun 2021 20:21
por jmsilva
Eu fiz vários testes e pesquisa sobre a Sr_Setjoin, não funcionou, acredito que a lib que uso ela está com bug.
Set relation funciona bem, porém faz muita requisições no banco de dados.

SqlRdd

Enviado: 15 Jun 2021 20:31
por JoséQuintas

Código: Selecionar todos

 //dbsetrelation("loc",{||codi_pro},"codi_pro")
	   SR_SetJoin( <nTargetArea>, <cField>, [<nOrignArea>], [<nTargetOrder>] )
Olhando os parâmetros de SR_SetJoin, são:

<nTargetArea> número da área destino
<cField> caractere, campo

opcionais
<nOrignArea> número da área origem
<nTargetOrder> número da ordem destino

Isso sugere

Código: Selecionar todos

SR_SetJoin( Select( "loc" ), "codi_pro" )
ou

Código: Selecionar todos

Sr_SetJoin( Select( "loc" ), "codi_pro", Select(), 1 )
Considerando que 1 é o primeiro índice

SqlRdd

Enviado: 25 Jun 2021 13:10
por nasouza
SELE PE_
//dbsetrelation("loc",{||codi_pro},"codi_pro")
SR_SetJoin( "LOC", "CODI_PRO","PE_",1)
SELE CLI
cAlias := Select()
OrdSetFocus(2)
dbgotop()

ERRO:
Error SQLRDD/0 SR_SetJoin() is no longer supported - RollBack executed.: SQLRDD
Called from ->THROW(0)
Called from ..\source\utils.prg->SR_RUNTIMEERR(1241)
Called from ..\source\utils.prg->SR_SETJOIN(811)
Called from CLIPED.PRG->CLIPED1(20)
Called from GERENC.PRG->(b)MAIN(98)
Called from source\hwindow.prg->ONCOMMAND(883)
Called from source\hwindow.prg->(b)HMAINWINDOW(250)
Called from source\hwindow.prg->HMAINWINDOW:ONEVENT(474)
Called from ->HWG_ACTIVATEMAINWINDOW(0)
Called from source\hwindow.prg->HMAINWINDOW:ACTIVATE(430)
Called from GERENC.PRG->MAIN(196)

HwGUI 2.17 xHarbour 1.2.3 Intl. (SimpLex) (Build 20140807)
Date:25/06/2021
Time:13:09:58