Uso de paréntesis en la clave del índice

Post Reply
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Uso de paréntesis en la clave del índice

Post by Antonio Linares »

Hay alguien que esté usando "(" ")" en la definición de la clave del índice ?

En caso afirmativo:

1. Que RDD usas ?

2. Cual es la expresión (clave del índice) que usas ?

3. Estás usando harbour ó xharbour ?

gracias :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
AngelSalom
Posts: 664
Joined: Fri Oct 07, 2005 7:38 am
Location: Vinaros (Castellón ) - España
Contact:

Re: Uso de paréntesis en la clave del índice

Post by AngelSalom »

Yo mismo con DBFCDX uso esta definición

Code: Select all

INDEX Str(SERIE,4)+Str(NUMERO,6) TO temp
Angel Salom
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Uso de paréntesis en la clave del índice

Post by Antonio Linares »

Angel,

Usas Harbour ó xHarbour ?

Nosotros recomendamos Harbour :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
AngelSalom
Posts: 664
Joined: Fri Oct 07, 2005 7:38 am
Location: Vinaros (Castellón ) - España
Contact:

Re: Uso de paréntesis en la clave del índice

Post by AngelSalom »

Harbour desde el primer día ;-)
Angel Salom
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Uso de paréntesis en la clave del índice

Post by ACC69 »

AngelSalom wrote:Harbour desde el primer día ;-)
Buenos dias Ing. Antonio, esperando que se encuentre bien , le envio cordial saludos.

Yo siempre he usado indices, entre paretensis, como estos ejemplos

INDEX ON STR(NUMEMP,4) TO TAG ....
INDEX ON UPPER(NOMBRE) TO TAG ....
INDEX ON DTOS(FECHMOV) TO TAG...

Bajo plataforma cdx y xHarbour, nunca he usado Harbour, ya que no logre integrar todas mis prgs a Harbour en VerCE 5.0 que utilizo, que dizque parametros falta, y con los ejemplos tampoco he logrado adaptarlo a VeRCE con harbour, unas ha de ser por ser librerias de terceros, que me marca algunos errorcillos no compatible con Harbour, siempre he usado xHarbour.

Saludos y buen dia.!

Atte: Adrian C. C.
El Loco
Posts: 220
Joined: Fri May 19, 2006 4:08 pm

Re: Uso de paréntesis en la clave del índice

Post by El Loco »

Code: Select all

Use TabCPost Alias FCPost
       Index On StrZero(FCPost->PV) + StrZero(FCPost->CodPost) Tag CPostal
...
...
Index On SubS(Base102->Dato1, 1,6) + SubS(Base102->Dato1,7,1) Tag Ind01
....
....
Index On SubS(CGral->TDato,1, 2) + Decrypt(SubS(CGral->TDato,14,30) , "CLAVE") Tag Tag02 for Decrypt(SubS(CGral->TDato,1,2) , "CLAVE") == "01"
 
- DBFCDX
- Harbour 32 y 64
- xHarbour

Abrazos.
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Re: Uso de paréntesis en la clave del índice

Post by sysctrl2 »

hoy mismo estoy probando un index. con dbfcdx,

Code: Select all

INDEX ON field->nss+dtos(fecha)+str(mov,1)   TAG "nss_fecha"
con xharbour

todo funciona de maravillas.

Que diferencia hay con harbour ?

saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Uso de paréntesis en la clave del índice

Post by Antonio Linares »

Todo parece estar correcto, lo que ocurre es que ayer un usuario nos comentaba que le fallaba un índice cuando contenía "(" y ")" lo cual me parece imposible.

Pero revisando su código he encontrado esto:

Code: Select all

if empty(indfile->cond)
      index on &(indfile->key) TAG (indfile->tagname) TO (cPath + alltrim(indfile->datafile))
   else
      index on &(indfile->key) TAG (indfile->tagname) TO (cPath + alltrim(indfile->datafile)) FOR &(indfile->cond)
   endif
 
El usa un diccionario en donde tiene los nombres de las DBFs a usar, la expresión del indice, claúsula FOR, etc...

Pienso que el problema viene por usar una macro "&" aqui: &(indfile->key) y que la solución sería llamar directamente a las funciones a las que llama INDEX ON y asi evitar la macro expansión:

Code: Select all

#command INDEX ON <key> [TAG <(tag)>] TO <(bag)> ;
               [FOR <for>] [WHILE <while>] [NEXT <next>] ;
               [RECORD <rec>] [<rest:REST>] [<all:ALL>] ;
               [EVAL <eval>] [EVERY <every>] [<unique: UNIQUE>] ;
               [<ascend: ASCENDING>] [<descend: DESCENDING>] ;
               [<add: ADDITIVE>] [<cur: USECURRENT>] [<cust: CUSTOM>] ;
               [<noopt: NOOPTIMIZE>] [<mem: MEMORY, TEMPORARY>] ;
               [<filter: USEFILTER>] [<ex: EXCLUSIVE>] => ;
         ordCondSet( <"for">, <{for}>, [<.all.>], <{while}>, ;
                     <{eval}>, <every>, RECNO(), <next>, <rec>, ;
                     [<.rest.>], [<.descend.>],, ;
                     [<.add.>], [<.cur.>], [<.cust.>], [<.noopt.>], ;
                     <"while">, [<.mem.>], [<.filter.>], [<.ex.>] ) ;;
         ordCreate( <(bag)>, <(tag)>, <"key">, <{key}>, [<.unique.>] )
regards, saludos

Antonio Linares
www.fivetechsoft.com
El Loco
Posts: 220
Joined: Fri May 19, 2006 4:08 pm

Re: Uso de paréntesis en la clave del índice

Post by El Loco »

Antonio, nunca, pero nunca pude hacer funcionar en la generación de un indice una macro expansión; y la vez que la genero, era un desastre la búsqueda, traía cualquier cosa...
Conclusión ... adios a las macro expansión.

Un abrazo. Miguel
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Uso de paréntesis en la clave del índice

Post by Antonio Linares »

Miguel,

Si, es lo más inteligente :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
albeiroval
Posts: 323
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

Re: Uso de paréntesis en la clave del índice

Post by albeiroval »

Antonio,

Yo uso el rdd DBFNTX, tambien uso el operador macro "&" ( esto porque uso el INDEX ON combinado con METEREX ),
es un poco lento cuando lo trabajo con windows server 2003, hasta ahora el unico problema que tengo es la
corrupcion de indices.

Aqui el codigo que uso para crear los indices :

Code: Select all

IndexarFileNtx( _Inv+ovarsis:COTURLIN+_Dbf, _Inv+ovarsis:ACTLCODIGO+_Ntx, "ACTL_Codi" )
 
Aqui el codigo de la funcion indexarFileNtx :

Code: Select all

#include "fivewin.ch"

//-------------------------------------------//

#define FALSE  .F.
#define TRUE   .T.

//-------------------------------------------//

function IndexarFileNtx( cFile, cIndex, cKey )
  
  if File( cIndex )
     if FErase( cIndex ) != 0
        MsgStop("No Se Pudo Borrar "+cIndex, "AVC/Sistemas")
     endif
  endif
  
  if OpenExclusive( cFile, "ordenar" )
     IndexBarShow( cFile, cIndex, cKey )
     dbClearIndex() 
     dbCloseArea()
  endif  
  
Return Nil

//-------------------------------------------//

static function IndexBarShow( cFile, cIndex, cKey )
  local oDlg
  local oMtr
  local oSay:= Array(7)
  local oFont
  local nPos
  local nTotRecs:= RecCount()
  local lExit:= FALSE
  
  cIndex := UPPER( cIndex ) 
  
  DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12 BOLD
  
  DEFINE DIALOG oDlg RESOURCE "INDICE_NTX" TITLE "Creando Indice" ICON "ICONAVC" FONT oFont
  
  REDEFINE SAY oSay[1] ID 100 OF oDlg PROMPT "Unidad  : " + SubStr( cIndex, 1, 3 ) 
  REDEFINE SAY oSay[2] ID 101 OF oDlg PROMPT "Path    : " + FilePath( cIndex ) 
    REDEFINE SAY oSay[3] ID 102 OF oDlg PROMPT "Archivo : " + FileDbfNtx( cFile ) 
  REDEFINE SAY oSay[4] ID 103 OF oDlg PROMPT "Indice  : " + FileDbfNtx( cIndex ) 
  REDEFINE SAY oSay[5] ID 104 OF oDlg PROMPT "Registros Indexados: "  
  REDEFINE SAY oSay[6] ID 105 OF oDlg PROMPT Transform(0,"99,999,999") 
  REDEFINE SAY oSay[7] ID 106 OF oDlg PROMPT "DE " + Transform(nTotRecs,"99,999,999")  
                                                                           
  REDEFINE METEREX oMtr VAR nPos TOTAL nTotRecs ID 200 OF oDlg;
    GRADIENT CHUNK { { 1/2, nRGB( 255, 251, 229 ), nRGB( 250, 223, 143 ) } , ;
                     { 1/2, nRGB( 244, 194,  51 ), nRGB( 252, 235,  173 ) } }  
  
  oDlg:lHelpIcon:= .F.
  oDlg:bStart:= {|| StartIndex( cIndex, cKey, oMtr, oSay, nTotRecs ), lExit := TRUE, oDlg:End()}

  ACTIVATE DIALOG oDlg;
    CENTER;
    VALID lExit
        
Return Nil
  
//-------------------------------------------//  

static function StartIndex( cIndex, cKey, oMtr, oSay, nTotRecs )
  INDEX ON &cKey TO &cIndex EVAL ( oMtr:Set( RecNo() ), oSay[6]:SetText( Transform(RecNo(),"99,999,999") ), SysRefresh(), TRUE )
Return Nil

//-------------------------------------------//

function FilePath( cFile )
  local nPos, cFilePath

  if ( nPos := RAT( "\", cFile )) != 0
     cFilePath := SubStr( cFile, 1, nPos )
  else
     cFilePath := ""
  endif
Return cFilePath

//-------------------------------------------//

function FileDbfNtx( cFile )
  local nPos, cNomFile

  if ( nPos := RAT( "\", cFile )) != 0
     cNomFile := SubStr( cFile, nPos+1, LEN( cFile ) )
  else
     cNomFile := ""
  endif
Return cNomFile

// FINAL
Para no usar la macro expresion "&" en el comando INDEX ON podrias indicarme como hacerlo Por Favor.

Gracias,

Saludos Cordiales,

Albeiro.
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
User avatar
albeiroval
Posts: 323
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

Re: Uso de paréntesis en la clave del índice

Post by albeiroval »

Se me olvidaba; Uso Harbour

Albeiro.
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
Post Reply