Page 1 of 1

funcion FW_CdxCreate() (SOLUCIONADO)

Posted: Sun Apr 11, 2021 3:07 pm
by jvtecheto
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


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.

Re: funcion FW_CdxCreate()

Posted: Sun Apr 11, 2021 3:55 pm
by FranciscoA
José, intenta asi: (a mi me funciona con fwh1709)

Agrega esto:

Code: Select all | Expand

 local  aIndexCols := {"FIRST","STATE"}
  FW_CdxCreate(aIndexCols)


Cambia esto:

Code: Select all | Expand

     //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.

Re: funcion FW_CdxCreate()

Posted: Sun Apr 11, 2021 7:33 pm
by jvtecheto
FranciscoA wrote:José, intenta asi: (a mi me funciona con fwh1709)

Agrega esto:

Code: Select all | Expand

 local  aIndexCols := {"FIRST","STATE"}
  FW_CdxCreate(aIndexCols)


Cambia esto:

Code: Select all | Expand

     //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


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.

Re: funcion FW_CdxCreate()

Posted: Mon Apr 12, 2021 5:15 pm
by jvtecheto
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


 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.

Re: funcion FW_CdxCreate() (SOLUCIONADO)

Posted: Tue Apr 13, 2021 12:19 pm
by nageswaragunupudi
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


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.