parametros index on por referencia

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

Moderador: Moderadores

Minduim
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 06 Abr 2011 13:02
Localização: Santo andré - SP

parametros index on por referencia

Mensagem por Minduim »

boa noite;

por gentileza, existe alguma forma de passar os parametros ( unique, usefilter, descending ) do comando INDEX ON por referencia:

cUnique:= "UNIQUE"
cUseFilter:= "USEFILTER"
cDescending:= "DESCENDING"

index on xxx tag xxx to xxx cUnique cUseFilter cDescending

agradeço a colaboração;
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

parametros index on por referencia

Mensagem por Toledo »

Acho meio difícil fazer isto, mas você poderia usar os comandos abaixo antes do INDEX ON:

SET UNIQUE on | OFF

SET DESCENDING on | OFF

SET FILTER TO

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

parametros index on por referencia

Mensagem por alxsts »

Olá!

Creio não ter entendido bem a questão... de qualquer forma, para passar um parâmetro por referência em xBase, usa-se o operador apropriado: @

Código: Selecionar todos

FUNCTION Main()

   LOCAL nVal

   CLS
   
   MyFunc( @nVal )

   ? nVal

RETURN NIL
//-----------------------------------
STATIC Function MyFunc( nVal )

   FOR nVal := 1 TO 10
   NEXT
   
RETURN NIL
//-----------------------------------
Não sei qual utilidade poderia ter isso mas, você pode criar uma função ou procedure que indexe um arquivo, passando os parâmetros por referência. Desconheço o parâmetro usefilter que você menciona. Para indíces com chaves únicas para uma coluna da tabela, especifica-se com um valor lógico (lUnique := .T.) e para índices descendentes usa-se a função Descend(), após fazer o Request Descend. Forneça mais detalhes...
[]´s
Alexandre Santos (AlxSts)
Minduim
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 06 Abr 2011 13:02
Localização: Santo andré - SP

parametros index on por referencia

Mensagem por Minduim »

agradeço a colaboração de todos;

estou criando uma rotina para centralizar todas as referencias de indexação dos arquivos temporários e ao passar os parametros para a rotina que executará a função de index, não estou conseguindo atribuir a função INDEX ON os parametros extras de indexação;

mas, acredito que encontrei uma solução, as funções ORDCREATE e ORDCONDSET, contem todos os parametros extras e aparentemente posso passar os valores para estas funções;

vou fazer uns testes e posto aqui o resultados;

Código: Selecionar todos

OrdCreate( <cIndexFile> , ;
          [<cIndexName>], ;
           <cIndexExpr> , ;
           <bIndexExpr> , ;
          [<lUnique>]     ) --> NIL

OrdCondSet( [<cForCondition>]  , ;
            [<bForCondition>]  , ;
            [<lAllRecords>]    , ;
            [<bWhileCondition>], ;
            [<bEval>]          , ;
            [<nInterval>]      , ;
            [<nStart>]         , ;
            [<nNext>]          , ;
            [<nRecord>]        , ;
            [<lRest>]          , ;
            [<lDescend>]       , ;
            [<reserved>]       , ;
            [<lAdditive>]      , ;
            [<lCurrent>]       , ;
            [<lCustom>]        , ;
            [<lNoOptimize>]    , ;
            [<cWhileCondition>], ;
            [<lTemporary>]     , ;
            [<lUseFilter>]     , ;
            [<lExclusive>]       ) --> lSucces
Minduim
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 06 Abr 2011 13:02
Localização: Santo andré - SP

parametros index on por referencia

Mensagem por Minduim »

agradeço a colaboração de todos;

as funções ORDCREATE e ORDCONDSET resolveram o problema;

mais um problema resolvido

observação.: o uso da função rddSetDefault() no lugar da rddName(), esta posicionado corretamente na rotina;

Código: Selecionar todos

********************************
function GER_INDE(npa)

   * npa - [1] - nome do banco de dados
   *       [2] - campos de index
   *       [3] - parametros de index (opcional)
  * nfile() - rotina que retorna um nome valido conforme parametro
   * kvetor1[114] - variavel publica com o caminho para arquivos temporarios
   * kvetor1[147] - variavel publica com a extencao do rdd default
 
   local wainde:= {}, watag, wacont, waarqu, wapara:= {}, wauniq

   for wacont:= 1 to len(npa)
      if rddSetDefault() = "DBFNTX"
         watag:= nfile("NTX")
         waarqu:= watag
      elseif rddSetDefault() = "DBFCDX"
         watag:= npa[wacont][1] + chr(64 + wacont)
         waarqu:= npa[wacont][1]
      endif
      waarqu:= kvetor1[114] + waarqu + kvetor1[147] 

      if len(npa[wacont]) > 2
         asize(wapara, 20)

         wauniq:= .F.
         if at("UNIQUE", npa[wacont][3]) > 0
            wauniq:= .T.
         endif
         if at("DESCENDING", npa[wacont][3]) > 0
            wapara[11]:= .T.
         endif
         if at("USEFILTER", npa[wacont][3]) > 0
            wapara[19]:= .T.
         endif

         while !ordCondSet( wapara )
         end
      endif

      aadd(wainde, {waarqu, watag})

      ordCreate( waarqu, watag, (npa[wacont][2]),, wauniq)
      
   next

   ordListClear()

   for wacont:= 1 to len(wainde)
      ordListAdd(wainde[wacont][1], wainde[wacont][2])
   next

   return wainde
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

parametros index on por referencia

Mensagem por alxsts »

Olá!

Como suspeitei ao ler o tópico pela primeira vez, a sua necessidade não tem nada a ver com passagem de parâmetros por referência (pass by reference, operador @).

Só para ficar claro: quando se usa este operador, é passado o endereço de memória da variável referenciada, como parâmetro para a função chamada e as modificações feitas nesta variável pela função chamada refletem na função chamadora - veja exemplo que postei acima. Já no comportamento padrão das linguagens xBase (pass by val), ao invés do endereço de memória, é passada uma cópia do valor da variável e as modificações feitas nela pela função chamada nesta cópia não se refletem no valor original armazenado na função chamadora. A exceção é quando a variável é declarada pública ou privada na função chamadora.
[]´s
Alexandre Santos (AlxSts)
Responder