Página 1 de 1
parametros index on por referencia
Enviado: 28 Mai 2014 18:25
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;
parametros index on por referencia
Enviado: 28 Mai 2014 19:16
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,
parametros index on por referencia
Enviado: 28 Mai 2014 19:20
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...
parametros index on por referencia
Enviado: 29 Mai 2014 08:11
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
parametros index on por referencia
Enviado: 29 Mai 2014 10:02
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
parametros index on por referencia
Enviado: 29 Mai 2014 12:26
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.