funcion FW_CdxCreate() (SOLUCIONADO)

funcion FW_CdxCreate() (SOLUCIONADO)

Postby jvtecheto » Sun Apr 11, 2021 3:07 pm

Hola:

Mr. Rao, como siempre tan amable, me ha facilitado codigo en el que he visto esta
funcion indocumentada, como tantas (deberiamos hacer algun grupo de trabajo para documentar funciones, es una barbaridad lo que facilita la vida Fivewin y la mayoria de cosas no se que existen).

Usandola sin parametros crea un indice (sea ntx o cdx segun tengas por defecto ) de cada campo de tu database.
Pero como esto normalmente no es lo que queremos hacer he ido al codigo fuente de la misma y
he visto en el codigo fuente, que admite 2 parametros.
Code: Select all  Expand view  RUN

FW_CdxCreate( caTagList, lMemory )
 


entediendo que esto funcionaria

FW_CdxCreate( {"codigo","nombre"})

no funciona, como podriamos usar esta funcion para crear solo indices de los campos que nos interesen.

Muchisimas gracias por vuestra ayuda.

Jose.
Last edited by jvtecheto on Mon Apr 12, 2021 5:15 pm, edited 1 time in total.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: funcion FW_CdxCreate()

Postby FranciscoA » Sun Apr 11, 2021 3:55 pm

José, intenta asi: (a mi me funciona con fwh1709)

Agrega esto:
Code: Select all  Expand view  RUN
 local  aIndexCols := {"FIRST","STATE"}
  FW_CdxCreate(aIndexCols)


Cambia esto:
Code: Select all  Expand view  RUN
     //AEval( oBrw:aCols, { |o| AAdd( aOrders, o:cSortOrder ), AAdd( aCols, o ) } )

        AEval( oBrw:aCols, { |o| if(AScan(aIndexCols,o:cHeader)>0, ( AAdd( aOrders, o:cSortOrder ), AAdd( aCols, o ) ),) } )
 


Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: funcion FW_CdxCreate()

Postby jvtecheto » Sun Apr 11, 2021 7:33 pm

FranciscoA wrote:José, intenta asi: (a mi me funciona con fwh1709)

Agrega esto:
Code: Select all  Expand view  RUN
 local  aIndexCols := {"FIRST","STATE"}
  FW_CdxCreate(aIndexCols)


Cambia esto:
Code: Select all  Expand view  RUN
     //AEval( oBrw:aCols, { |o| AAdd( aOrders, o:cSortOrder ), AAdd( aCols, o ) } )

        AEval( oBrw:aCols, { |o| if(AScan(aIndexCols,o:cHeader)>0, ( AAdd( aOrders, o:cSortOrder ), AAdd( aCols, o ) ),) } )
 


Saludos.


Muchisimas gracias por tu interes Francisco.

La funcion que comento si funciona bien como tu dices y tambien de la forma que yo indicaba , crea el indice, yo me confundi porque al no ejecutarse la aplicacion que probaba este
tema deduci (mal por supuesto) que no funcionaba.

El otro tema respecto al codigo que me sugieres no me funciona, me da error al compilar pero en esta linea.

Code: Select all  Expand view  RUN

oCombo:Set( aOrders[ 1 ] )
 


Por lo que creo que el combo no se carga con los correspondientes indices, y al tratar de mostrar el primero como no existe da
error, pero en tiempo de compilacion, tambien lo veo raro la verdad. :roll:

Voy a ver el mensaje original que me ha contestado Mr. Rao y comento como va el asunto.

Ayer no se que me paso con el mensaje que solo me salio tu respuesta, ahora lo he modificado.

Saludos.

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: funcion FW_CdxCreate()

Postby jvtecheto » Mon Apr 12, 2021 5:15 pm

Estimado Francisco.

Como te comentaba en el mensaje anterior. Mr. Rao ha solucionado con nota , como siempre el problema

con esta modificacion

Code: Select all  Expand view  RUN

 aOrders     := {}
   aCols       := {}
   AEval( oBrw:aCols, { |o| If( Empty( o:cSortOrder ),,( AAdd( aOrders, o:cSortOrder ), AAdd( aCols, o ) ) ) } )
   cOrder      := ( cAlias )->( OrdSetFocus() )
 


Ahora se carga el combo sin problemas y usa el fichero .CDX con los indices que tu tengas.
Es un ejemplo magnifico.
Mira el codigo completo aqui.
[url]
viewtopic.php?f=6&t=40236
[/url]

Doy el tema de la funcion FW_CdxCreate() por solucionado tambien, repito muchas gracias por tu ayuda.

Un abrazo.

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: funcion FW_CdxCreate() (SOLUCIONADO)

Postby nageswaragunupudi » Tue Apr 13, 2021 12:19 pm

Whenever FWH introduces a new functionality or enhances, it is explained in whatsnew.txt:

Extracts from Whatsnew.txt:
FWH1409:
* New: database.prg: New functions:
1)FW_FieldsPut( caFields, aValues, [nLockWaitSecs], [lAppend] ) --> nRecNo ( 0 if failure)
...
2)FW_CdxCreate( [caTagList] )
3)FW_DBFSTRUCT( cDbfFile ) --> dbstruct() // without USEing the DBF

FWH1709:
* function FW_CdxCreate( [caTagList], [lMemory] ). Added new optional
parameter lMemory to create indexes in memory.

FWH1906:
* function FW_CdxCreate() now restores the previous order after indexing.


FW_CdxCreate( "FIRST,LAST,CITY" ) creates indexes on fields "FIRST", "LAST" and "CITY".
If the field is a character field, the expression "UPPER(FIELDNAME)" is used.

Let us assume that we keep index on FIRST,LAST and CITY for customer.dbf in the customer.cdx on the disk.

Now, we want to browse fields FIRST,CITY,STATE,AGE,SALARY. Out of the 5 columns we have index on FIRST and CITY only. But we like the browse to autosort on STATE and
AGE also. Then we can do:
Code: Select all  Expand view  RUN

USE CUSTOMER NEW SHARED VIA "DBFCDX"
FW_CdxCreate( "STATE,AGE", .t. )
SET ORDER TO TAG FIRST
GO TOP

@ r,c XBROWSE .....
 


XBrowse will pick up all required index tags from both customer.cdx and also the memory index.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 70 guests