Page 1 of 1

SET INDEX TO (problemas)-SOLUCIONADO

Posted: Mon Jul 12, 2010 10:17 am
by Andrés González
Hola Antonio y compañeros. Os planteo un problema que me ha surgido con las nuevas versiones de fivewin. Con xHarbour y las versiones del 2010, no me carga mas de 7 indices seguidos. Si cargo el 8 me da error, pero si este lo cargo en el numero 7 va bien. Si miráis el codigo lo entendereis mejor:

Code: Select all

 

   *    Abre los INDEX          *
   ******************************

   store "" to x_ind1,x_ind2,x_ind3,x_ind4,x_ind5,x_ind6,x_ind7,x_ind8,x_ind9,x_ind10,x_ind11, ;
               x_ind12,x_ind13,x_ind14,x_ind15    // Pone todos los indices en blanco
   x = ascan(v_conf,"[INDEX]",x + y)     // Localiza la palabra [INDEX]
   y = ascan(v_conf,"[",x + 1) - x - 1   // Localiza el proximo [...]
   n_ind = y
 
  for n = 1 to n_ind step 1
      x_temp = "x_ind" + str(n,1)
      M->&X_TEMP = x_path + alltrim(strextract(v_conf[x + n],";",1)) // Rellena los indices que tenemos definidos
     //? M->&X_TEMP Tod correcto veo todos los indices y _ dentro su variable correspondiente
   next

if netuse(x_path + x_base,x_mod,0,v_alias) //Abro la base de datos
    
      //Cargo todos los indices      
      set index to (x_ind1),(x_ind2),(x_ind3),(x_ind4),(x_ind5),(x_ind6),(x_ind7),(x_ind8), ; 
                   (x_ind9),(x_ind10),(x_ind11),(x_ind12),(x_ind13),(x_ind14),(x_ind15)
                    
      set order to v_orden //Hasta aqui todo correcto mientras no sean mas de 7 indices (el 8 no funciona y siguientes no funcionan)
        ? Select()
        ? indexord() //v_orden = indexord() menos cuando llega al 8 que me pone 0
 
Parece que xharbour tiene problemas en las nuevas versiones para cargar todos los indices que tengo por defecto a 15, pero normalmente no cargo mas de 6 o 7. Pero cuando cargo una base de datos com mas de 8 indices, cuando llega al 8 el indexord() me retorna un 0, cuando me tendría que devolver el numero 8. Si en vez de cargarlo en el numero 8 lo cargo en el 7 funciona correctamente. Para versiones antiguas del xharbour funciona bien, pero no con las nuevas. Parece que estas versiones tienen un error en el indice, o algun otro motivo para que no funcione y no cargue ese indice.

Alguien sabe por donde ir para encontrar la solución?

Re: SET INDEX TO (problemas)

Posted: Mon Jul 12, 2010 10:34 am
by QAZWSX2K
uyy amigo 15 indices y porque tantos, creo que lo maximo que yo llegue a usar serian 4 o 5 cuando usaba NTX, te recomiendo te cambies a CDX y uses los scopes, entiendo que _ dan miedo pero no es uno muy grande y vale la pena, yo a su momento estuve reacio a hacerlo ya que segun la maxima "para que cambiar lo que sirve..." sin embargo lo hice en un par de dias y funciono tal cual antes y ahora estoy en un cambio mas temible que es de CDX a SQL

el cambio es asi, al principio del programa agregas

Request DbfCdx
rddSetDefault( "DBFCDX" )

al momento de crear indices seria
index on campo1 TAG "etiqueta1",
en vez de
index on campo1 TO indice1

y al momento de abrir la tabla solo haces y suponiendo uses esta funcion
DO WHILE .T.
IF NET_USE(SS62,.F.,.1)
DBSETORDER("ETIQUETA1") //O LA ETIQUETAS QUE NECESITES, TODAS SE ACTUALIZAN
DATABASE DOBJ
EXIT
ELSE
LOOP
ENDIF
ENDDO

en vez de
DO WHILE .T.
IF NET_USE(SS62,.F.,.1)
index on &indice1,&indice2,&indice3,&indice4,&indice5,&indice6,&indice7,.....,&indice15
set order to 3 //o el que sea
DATABASE DOBJ
EXIT
ELSE
LOOP
ENDIF
ENDDO

Re: SET INDEX TO (problemas)

Posted: Mon Jul 12, 2010 10:48 am
by Andrés González
Gracias por tu respuesta, creo que de momento es imposible realizar el cambio, puesto que son 60 programas que funcionan igual, y supone un esfuerzo muy grande y sobre todo porqué funcionan bien. Ya estoy mirando el tema del sql pero eso lo dejo para después del verano ya que no quiero romperme mucho la cabeza. De todas formas lo extraño es que con las versiones antiguas y el mismo código funciona con todas los indices que quieras. Por cierto con ntx tambien utilizo los escopes y van de maravilla. Por otra parte que haya 15 indices no significa que carge 15 indices, carga solo los indices que no tienen contenido vacío.

Si se te ocurre por donde van los tiros dime cosas, ahora no sé que más investigar o donde poner el problema para saber la respuesta?

Re: SET INDEX TO (problemas)

Posted: Mon Jul 12, 2010 11:23 am
by Antonio Linares
Andrés,

Necesitamos un ejemplo muy simple y autocontenido que demuestre el problema (código Harbour, sin FWH) para enviarlo a la lista de desarrollo de Harbour.

Cuanto antes tengamos el ejemplo, antes se puede enviar y antes nos pondremos todos a solucionarlo :-)

A ver si nosotros podemos reproducirlo aqui,

Re: SET INDEX TO (problemas)

Posted: Mon Jul 12, 2010 11:32 am
by mmercado
Hola Andrés:

Prueba editando el archivo \Windows\System32\Config.nt

Aumenta el valor mostrado en la línea:

Files=nnn

Luego reinicias Windows.

Es solo una idea, un abrazo.

Manuel Mercado Gómez.

Re: SET INDEX TO (problemas)

Posted: Mon Jul 12, 2010 9:37 pm
by Andrés González
Gracias Antonio mañana miro de intentar reproducir el error, he intentado hoy compilar con la versión harbour, pero me ha dado muchos errores con el ole y lo he dejado para cuando tenga mas tiempo. Igalmente Don Manuel, mañana miro de aumentar el files por si ayuda.

Re: SET INDEX TO (problemas)

Posted: Tue Jul 13, 2010 12:32 pm
by Andrés González
Acabo de encontrar el problema, resulta que en el código de las versiones nuevas dos de los indices tenían el mismo nombre. O sea, el indice 2 y el 7 tenían el mismo nombre con distinta indexación. Al realizar el SET ORDER TO 8 y siguientes me daba siempre cero, ya que el programa devuelve siempre 0 una vez que cargaba el indice repetido. Gracias por vuestra ayuda y gracias Antonio, ya que al intentar reproducir el error me he dado cuenta de la duplicación del nombre de los indices. Muchas veces lo más trivial es lo que te trae de cabeza.

Re: SET INDEX TO (problemas)-SOLUCIONADO

Posted: Tue Jul 13, 2010 12:53 pm
by Antonio Linares
Andrés,

Me alegro de que haya quedado solucionado :-)