Clipper On Line • Ver Tópico - SqlRdd

SqlRdd

Discussão sobre SQL

Moderador: Moderadores

 

SqlRdd

Mensagempor nasouza » 26 Mar 2021 15:00

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 :

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.
Nota de Moderação:
JoséQuintas: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
nasouza
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 37
Data de registro: 20 Jul 2009 17:57
Cidade/Estado: Santa Isabel do Ivai - Pr
Curtiu: 2 vezes
Mens.Curtidas: 0 vez

SqlRdd

Mensagempor JoséQuintas » 27 Mar 2021 17:57

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:

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:

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:
IF ! Use_Arq('LOCPROD','LOC',.T.,.F.,.F.)
   Return
ENDIF

IF ! Use_Arq('PEDPEN_','PEN',.T.,.F.,.F.)
   Return
ENDIF


se altera pra isto:
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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

SqlRdd

Mensagempor jmsilva » 15 Jun 2021 20:21

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.
jmsilva
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 5
Data de registro: 29 Mar 2019 14:28
Cidade/Estado: Caraguatatuba/sp
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

SqlRdd

Mensagempor JoséQuintas » 15 Jun 2021 20:31

 //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

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


ou

Sr_SetJoin( Select( "loc" ), "codi_pro", Select(), 1 )


Considerando que 1 é o primeiro índice
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

SqlRdd

Mensagempor nasouza » 25 Jun 2021 13:10

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
nasouza
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 37
Data de registro: 20 Jul 2009 17:57
Cidade/Estado: Santa Isabel do Ivai - Pr
Curtiu: 2 vezes
Mens.Curtidas: 0 vez




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro