FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour clase para indexar
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
clase para indexar
Posted: Wed Oct 08, 2008 02:26 AM

recientemente publicaron un tema sobre una funcion para indexar, y se me ocurrio compartir con la comunidad una pequena clase que ahorra un poco de tiempo en esa tarea, aunque sencilla algunas veces hasta fastidiosa.
solo hay que indicar los archivos a indexar con los campos y tag para generar los indices, realmente lo he probrado solo para los NTX y CDX, esta configurada para trabajar solo con esos dos, pero facilmete se puede incluir otros, mirando las clase se daran cuenta que es muy facil hacerlo.
aqui les dejo un link para la descarga si hay alguno que le interese, si no solo serviria que la probaran y hasta les podria servir de arranque para generar algo mejor (siempre hay algo mejor) las sugerencias tambien estan abiertas...
el link incluye, la clase, el archivo .CH, un programa ejemplo y varias dbfs para probar

http://www.box.net/shared/asbfjyh6ic

Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
clase para indexar
Posted: Wed Oct 08, 2008 05:34 AM
Hola McFox,

tu aporte es muy interesante, yo hago algo bastante parecido.

Si me permites una sugerencia, yo haría un pequeño cambio en el comando que define el indice. Lo que escribes como :
		ADD TAG oCdx DBF "part003" TAG { {"codigo","partno"} }


lo escribiría como
           ADD INDEX  TO DBF "part003" TAG "Codigo" KEY partno FOR !deleted() OF oCdx


es decir:
1) añadir la posibilidad de poner filtros en los índices
2) La razón de ser de los comandos es ocultar la complejidad de la implementación de una solución, por lo que habría que evitar el uso de arrays en la declaración y buscar que el comando sea lo mas IMPERATIVO y lo menos DECLARATIVO posible. Creo que es una de las cosas más importante que tenemos en el lenguaje xBase y en Harbour en particular.

Coménta cualquier novedad así vamos puliendo nuestros propios diseños. Hace tiempo que vengo pensando en hacer lo que en Delphi es un DataModule, que es un modulo donde estan definidos todas las tablas, indices y relaciones del programa.

Un saludo,

Carlos.

PD: Alguien vendrá a la Simo en noviembre?
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
clase para indexar
Posted: Wed Oct 08, 2008 11:26 AM

lo escribiría como
Código:

ADD INDEX TO DBF "part003" TAG "Codigo" KEY partno FOR !deleted() OF oCdx



Muchas gracias, es una muy buena suguerencia, realmente es lo que quiero, leer opiniones, pense en hacer algo muy parecido (casi igual), el problema que me encontre, fue que tendria que hacer un comando ADD INDEX por cada TAG por cada DBF, mientras que de la forma que lo coloque con un solo comando puedo agregar todos los TAG para 1 DBFs, es decir, si tengo una DBF con 5 TAG tengo que utilizar 5 ADD INDEX, pero tienes razon igual tendria que poner todos los TAG, seria mas comprensible hacerlo uno por uno lo que podria hacer es que aceptara ARRAY o LITERALES en los TAG y en los KEY.

añadir la posibilidad de poner filtros en los índices


perfecto, hoy hacemos esos cambios...
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
clase para indexar
Posted: Wed Oct 08, 2008 12:05 PM
Si quieres poner en una sola línea todos los TAGS se podría hacer:

   ADD INDEX TO DBF "part003" ;
      TAG "Codigo" KEY partno FOR !deleted() , ;
      TAG "Nombre" KEY partdesc FOR !deleted() , ;
      TAG "FecAlta" KEY partAdded FOR !deleted() ;
      OF oCdx


lo que mantiene la legibilidad. Eso se puede hacer, mira como está definido el comando 'SET RELATION'

Un saludo,

Carlos.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
clase para indexar
Posted: Wed Oct 08, 2008 12:35 PM
Hola, porque me genera este erro?

Aplicacao: 
===========
   Caminho(Path): C:\LIXO\cdxmeter\EJEMPLO.exe (32 bits)
   Tamanho: 1,468,928 bytes
   Hora Inicial: 0 hours 0 mins 4 secs 
   Ocorrencia de Erro: 10/08/08, 09:32:23
   Descricao do Erro: Error BASE/1005  Message not found: TBUTTONBMP:_CPOSTEXT

Chamada da Pilha: 
================= 
   Chamada De: TBUTTONBMP:ERROR(175)
   Chamada De: (b)HBOBJECT:HBOBJECT(105)
   Chamada De: TBUTTONBMP:MSGNOTFOUND(0)
   Chamada De: TBUTTONBMP:_CPOSTEXT(167)
   Chamada De: CDXMETER:COMPUESTO(432)
   Chamada De: CDXMETER:ACTIVATE(251)
   Chamada De: EJEMPLO2(96)
   Chamada De: (b)INICIO(14)
   Chamada De: TMENU:COMMAND(407)
   Chamada De: TWINDOW:COMMAND(932)
   Chamada De: TWINDOW:HANDLEEVENT(0)
   Chamada De: _FWH(3128)
   Chamada De: WINRUN(0)
   Chamada De: TWINDOW:ACTIVATE(881)
   Chamada De: INICIO(24)


Estoy usando FIVEWIN 2.7 FOR XHARBOUR.

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
clase para indexar
Posted: Wed Oct 08, 2008 01:25 PM

la version de FWH que tienes no soporta la posicion del texto en los botones, ya tengo la solucion a tu problema, estoy añadiendo los cambios que recomendo Carlos y ya publico la nueva version

Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
clase para indexar
Posted: Wed Oct 08, 2008 02:12 PM
mcfox wrote:la version de FWH que tienes no soporta la posicion del texto en los botones, ya tengo la solucion a tu problema, estoy añadiendo los cambios que recomendo Carlos y ya publico la nueva version


Gracias, mcfox.

En la espera.

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
clase para indexar
Posted: Thu Oct 09, 2008 05:59 AM

Ya esta disponible la clase nuevamente con los cambios suguerios por CARLOS MORA, disculpen la demora... :wink:
Gracias Carlos por las sugerencias, espero cumpla las espectativas de las personas, es una clase sencilla pero hace lo suyo
el link de descargas...

http://www.box.net/shared/asbfjyh6ic

Continue the discussion