Uso de paréntesis en la clave del índice
- 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
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
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
- 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
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
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
- 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
Angel,
Usas Harbour ó xHarbour ?
Nosotros recomendamos Harbour
Usas Harbour ó xHarbour ?
Nosotros recomendamos Harbour
- 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
Harbour desde el primer día
Angel Salom
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
Re: Uso de paréntesis en la clave del índice
Buenos dias Ing. Antonio, esperando que se encuentre bien , le envio cordial saludos.AngelSalom wrote:Harbour desde el primer día
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.
Re: Uso de paréntesis en la clave del índice
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"
- Harbour 32 y 64
- xHarbour
Abrazos.
Re: Uso de paréntesis en la clave del índice
hoy mismo estoy probando un index. con dbfcdx,
con xharbour
todo funciona de maravillas.
Que diferencia hay con harbour ?
saludos.
Code: Select all
INDEX ON field->nss+dtos(fecha)+str(mov,1) TAG "nss_fecha"
todo funciona de maravillas.
Que diferencia hay con harbour ?
saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
- 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
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:
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:
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
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.>] )
Re: Uso de paréntesis en la clave del índice
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
Conclusión ... adios a las macro expansión.
Un abrazo. Miguel
- 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
Miguel,
Si, es lo más inteligente
Si, es lo más inteligente
- albeiroval
- Posts: 323
- Joined: Tue Oct 16, 2007 5:51 pm
- Location: Barquisimeto - Venezuela
Re: Uso de paréntesis en la clave del índice
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 :
Aqui el codigo de la funcion indexarFileNtx :
Para no usar la macro expresion "&" en el comando INDEX ON podrias indicarme como hacerlo Por Favor.
Gracias,
Saludos Cordiales,
Albeiro.
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" )
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
Gracias,
Saludos Cordiales,
Albeiro.
- albeiroval
- Posts: 323
- Joined: Tue Oct 16, 2007 5:51 pm
- Location: Barquisimeto - Venezuela
Re: Uso de paréntesis en la clave del índice
Se me olvidaba; Uso Harbour
Albeiro.
Albeiro.