Gracias por tu respuesta.
=?iso-8859-1?Q?Jos=E9_Ram=F3n_Castro?= <
jrcpoli@terra.es> wrote:
>Saludos:
>
>Según la ayuda de Xailer la función equvalente a las dos funciones OrdConSet
>y OrdCreate es TDbfDataSet:AddTag.
>
>Por si te sirve de orientación y empleando otra forma de hacerlo te adjunto
>parte de un metodo, se basa en un fichero de base de datos que contiene
>todos los indices a utilizar en una aplicación y que se llama Indices.dbf.
>
>METHOD Crear_ind(bases_dbf, cDirBases) CLASS TFormCompdbf
> *
> LOCAL nombre_dbf := ALLTRIM(UPPER(bases_dbf))
> LOCAL nombre_ind := ""
> LOCAL fichero_ind:= ""
> LOCAL fichero_tag:= ""
> LOCAL clave_ind := ""
> LOCAL nVeces := 0
> LOCAL n := 0
> LOCAL estruc_ind := {}
> LOCAL oDSLocal
> *
> ** Cursor reloj arena
> Application:lBusy := .T.
> *
> ** Trabajar con la base de datos de Indices
> WITH OBJECT ::oDSIndices := TDbfDataSet():Create()
> IF (:lOpen == .T.)
> :lOpen := .F.
> ENDIF
> *
> :cName := "INDICES.DBF"
> :lShared := .F.
> :oDataSource := ::oDataSource
> *
> IF (:lOpen := .T.)
> *
> ** Selecciona el indice
> :OrdSetFocus("INDICES")
> *
> ** Recorrer la base de datos indices
> :Seek(ALLTRIM(UPPER(nombre_dbf)))
> DO WHILE ALLTRIM(UPPER(:NOMB_DBF)) == nombre_dbf .AND. !:EoF()
> *
> ** Comprobar que existe el indice "CDX"
> nombre_ind := cDirBases + Alltrim(:NOMB_DBF) + ".CDX"
> IF FILE(nombre_ind) .AND. nVeces = 0
> ** Borrar el indice
> FERASE(nombre_ind)
> *
> ENDIF
> *
> ** Aumentar el contador para no borrarlo
> nVeces++
> *
> ** Crear un array con los datos de los indices a crear
> AADD(estruc_ind, { ALLTRIM(:NOMB_DBF), ALLTRIM(:NOMB_IND),;
> ALLTRIM(:EXPR_IND), :UNICO, :DESCEND })
> *
> :Skip()
> *
> END DO
> *
> ENDIF
> *
> :End()
> END
> *
> ** Si el array contine datos
> IF Len(estruc_ind) > 0
> *
> nombre_dbf := cDirBases + bases_dbf + ".DBF"
> *
> ** Abrir base de datos que estamos procesando
> WITH OBJECT oDSLocal := TDbfDataSet():Create(Self, ::oDataSource,
>nombre_dbf)
> IF (:lOpen == .T.)
> :lOpen := .F.
> ENDIF
> *
> :lShared := .F.
> *
> IF (:lOpen := .T.)
> *
> FOR n := 1 TO LEN(estruc_ind)
> *
> fichero_ind := estruc_ind[ n, 1]
> Fichero_ind := cDirBases + fichero_ind
> fichero_tag := estruc_ind[ n, 2]
> clave_ind := estruc_ind[ n, 3]
> *
> DO CASE
> ** La clave es UNICO = .T. y DESCEND = .F.
> CASE estruc_ind[ n, 4] == .T. .AND. estruc_ind[ n, 5]
==
>.F.
> *
> INDEX ON &clave_ind TAG &fichero_tag ;
> TO &fichero_ind UNIQUE
> *
> ** La Clave es UNICO = .F. y DESCEND = .F.
> CASE estruc_ind[ n, 4] == .F. .AND. estruc_ind[ n, 5]
==
>.F.
> *
> INDEX ON &clave_ind TAG &fichero_tag ;
> TO &fichero_ind
> *
> ** La clave es UNICO = .T. y DESCEND = .T.
> CASE estruc_ind[ n, 4] == .T. .AND. estruc_ind[ n, 5]
==
>.T.
> *
> INDEX ON &clave_ind TAG &fichero_tag ;
> TO &fichero_ind UNIQUE DESCENDING
> *
> ** La clave es unico = .F. y DESCEND = .T.
> CASE estruc_ind[ n, 4] == .F. .AND. estruc_ind[ n, 5]
==
>.T.
> *
> INDEX ON &clave_ind TAG &fichero_tag ;
> TO &fichero_ind DESCENDING
> *
> END CASE
> NEXT
> ENDIF
> :End()
> END
> *
> ENDIF
> *
> ** Cursor Normal
> Application:lBusy := .F.
> *
>RETURN Nil
>
>José Ramón Castro
>
>"Andrade" <
tecnicom_2000@yahoo.com> escribió en el mensaje de noticias
>news:4917ea50$[email=
1@ozsrv2.ozlan.local...]
1@ozsrv2.ozlan.local...[/email]
>>
>> Saludos a todos
>>
>> Alguien podría indicarme como crear en archivo índice con
>> TDbfDataSet, utilizo archivos Dbf con índices Cdx y MultiTags.
>> Lo que quiero es crear una rutina para reindexar los archivos índices
>> que utilizo en la aplicación, que los que existan los elimine antes de
>> volver a crearlo. En Clipper utilizaba algo así:
>>
>> IF FILE( cPath + "Invoic.Cdx" )
>> FERASE( cPath + "Invoic.Cdx" )
>> ENDIF
>>
>> IF !NET_USE( "Invoic.Dbf" , FALSE, 5, "Invoic", cPath )
>> BREAK
>> ENDIF
>>
>> EVAL( bStartGauge, "Invoic.Cdx", "1", "5" )
>> ORDCONDSET( 'Invoic->Invo_Stat == "F"', {|| Invoic->Invo_Stat == "F" },,,
>> {|| Gauge() },, RECNO(),,,, )
>> ORDCREATE( "Invoic.Cdx", "Facturas", "Invoic->Invoic_Id", { ||
>> Invoic->Invoic_Id
>> } )
>> EVAL( bEndGauge )
>> ...
>> ...
>> ...
>>
>> Como hago lo mismo con TDbfDataSet ?????
>>
>> De antemano Gracias.
>>
>