Jump to content
Fivewin Brasil

SQLRDD - ordscope


jbinfo

Recommended Posts

Olá à todos,

Estamos tentando usar SQLRDD aqui, porém estamos travando no uso do ordscope.

Quando usamos o ordscope numa tabela mysql ordenada por código do produto para trazer os produtos do cod 101 até 119 , sendo que nesta tabela tem 500 produtos por exemplo:

OrdScope( 0, 101 ); OrdScope( 1, 119 )

ao executar esta função o retorno é de 101 até 500 , trazendo todos produtos após 101, como se o segundo comando do ordscope não funcionasse.

Alguém teria alguma dica quanto isso ao usar SQLRDD, a mesma função usanod DBFCDX funciona perfeitamente.

Abraço, Tiago!

 

Link to comment
Share on other sites

Que eu saiba ORDSCOPE não funciona em SQLRDD, sendo assim não tem como usar desta maneira.

Você terá sim que criar desvios em seus fontes, principalmente para usar o que tem de melhor no SQL quando for o caso e quando não é o caso usar o melhor que a forma convencional (DBSKIP, ETC)

Um detalhe importante é que a funcao SR_SETFILTER faz o filtro lá no SQL então você tem um ganho de performance com relação ao SET FILTER normal

Faça assim mais ou menos assim:

nCodIni := 1
nCodFin := 2

If BdSqlRdd()
   Sr_SetFilter("cod >= "+Sr_cDbValue(nCodIni)+" and cod <= "+Sr_cDbValue(nCodFin))
Else
   OrdScope( 1, 119 ) 
EndIf
  // aqui vc faz se processamento normal
    

      
If BdSqlRdd()
   Sr_SetFilter("")  // esse comando retira o filtro
EndIf      
  
    
     

 

Link to comment
Share on other sites

Tiago

Não serão todos os comando de DBFCDX que irão funcionar diretamente com SQLRDD, a migração de uma RDD para outra nos exige adaptação ao novo RDD, desta forma alguns comandos de consulta e filtros eu tive que alterar.

Outra coisa importante também é a questão de performance, pois utilizando comandos SQL o sistema fica mais rápido.

Ex:

cSql:=" SELECT Cod,Descricao,Valor From TabelaProd Where cod Between 101 and 119"

SR_BeginTransaction()

Try
   oSql   := SR_GetConnection()

   Use (cSql) Alias "TabProd" NEW SHARED VIA "SQLRDD"

   Sr_CommitTransaction()
Catch oErro
    
     SR_RollBackTransaction()
    
     // Retira texto com código do erro
    cError := Memoline(oErro:Description,100,2)
    
     // Grava LOG
    MemoWrit("error.log",pSql+CRLF+cError)

    //Trata códigos de erro
    If Alltrim(Left(cError,At("-",cError)-1)) == "42S22"
       MsgAlert("Nome de campos errado verifique!","Atenção")
     Else 
        Throw( oErro ) 
    Endif
 
End   
 

Att

João Bosco

 

Link to comment
Share on other sites

  • 1 month later...
 

Ola, Boa noite

 

Não uso mais OrderScop(), como ja estou em quase tudo 100% SQL puro, uso o SR_SetFilter(), muito melhor e facil de se usar.

 

Espero ter ajudado.

Também uso desta forma ou abro a workarea direto com o comando SQL. Como uma vez retornado o result set todo processamento fica em memória, fica muito mais rapido e evita transações ao SQL a cada skip, loop, etc...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...