Página 1 de 1

Indices CDX y DataSets

Publicado: Lun Jun 18, 2007 9:18 am
por Angel
Saludos!
Trabajando con datasets, e í­ndices CDX me he encontrado con una serie de
problemas. En principio, he seguido los pasos que he visto en el foro
para crear í­ndices CDX, y "aparentemente" los crea. Digo aparentemente,
porque aunque los í­ndices fí­sicos son .CDX, el RDD de la base de datos
es ¿DBFNTX?. Si intento abrir la base de datos desde Bases de
datos->Explorar DBF, me muestra el error que en la imagen adjunto.
En cambio, si la abro con el RDD DBFNTX, abre la base de datos y no da
ese error, algo que no me explico pues la cree de esta manera; adjunto
codigo.
METHOD FormInitialize( oSender ) CLASS FrmCreaBd
REQUEST DBFFPT
REQUEST DBFCDX
RddSetDefault( "DBFCDX" )
RETURN Nil
METHOD CreaGastos( oSender) CLASS FrmCreaBd
DBCreate( "Gastos.Dbf" , ;
{{"MATRICULA" , "C", 8, 0} ,;
{"CONCEPTO" , "C", 30, 0} ,;
{"FECHA" , "D", 8, 0} ,;
{"BASEIMP" , "N", 8, 2} ,;
{"IVA" , "N", 8, 0} ,;
{"TOTAL" , "N", 8, 2} ,;
{"FACTURAR" , "L", 1, 0} }, "DBFCDX" )
MSGINFO("Creación de GASTOS terminada")
USE("GASTOS.DBF") VIA "DBFCDX" EXCLUSIVE NEW
INDEX ON GASTOS->MATRICULA TAG IGastosMatricula
DBCLOSEALL()
RETURN NIL
Aqui os adjunto el evento OnCreate del dataset:
METHOD DataSetGastos( oSender ) CLASS FRMVoEdit
//Propiedades que vamos a asignar al dataset, cuando
//vaya a ser creado.
oSender:cName:="GASTOS.DBF"
oSender:oDataSource:=::oDataSource
oSender:lShared:=.F.
IF (FILE(".DATAGASTOS.CDX"))
FERASE(".DATAGASTOS.CDX") //Borro fí­sicamente los í­ndices.
END IF
IF (::oDataSetGastos:lOpen := .T.)
::oDatasetGastos:Pack() //Se eliminan registros borrados.
INDEX ON ::oDataSetGastos:MATRICULA TAG iGastosMat FOR !DELETED()
ELSE
MSGINFO("Error abriendo base de datos")
END IF
RETURN NIL
Justo después de crear la base de datos, si intento verla con Bases de
datos->Explorar DBF, me permite abrirla con el RDD DBFCDX ¡una vez!
pero si cierro la aplicación y la vuelvo a abrir, me da el error que en
la imagen adjunto, ¿¿¿¿y me obliga a abrirla via RDD DBFNTX???. Llevo
bastante tiempo intentando solucionar este error, pero no doy pie con
bola. ¿Que estoy haciendo mal? Gracias por adelantado.

Indices CDX y DataSets

Publicado: Lun Jun 18, 2007 10:33 am
por ignacio
Angel,
Su error esté posiblemente en el uso del ALIAS de la DBF en la expresión del
índice:
> INDEX ON GASTOS->MATRICULA TAG IGastosMatricula
Cambielo por:
INDEX ON MATRICULA TAG IGastosMatricula
Y arriba del método o función escriba:
FIELD MATRICULA
Si lo prefiere también puede escribir:
INDEX ON _FIELD->MATRICULA TAG IGastosMatricula
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Ángel Fernández" <angel@agelso.com> escribió en el mensaje
news:467631ad$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Saludos!
>
> Trabajando con datasets, e índices CDX me he encontrado con una serie de
> problemas. En principio, he seguido los pasos que he visto en el foro para
> crear índices CDX, y "aparentemente" los crea. Digo aparentemente, porque
> aunque los índices físicos son .CDX, el RDD de la base de datos es
> ¿DBFNTX?. Si intento abrir la base de datos desde Bases de datos->Explorar
> DBF, me muestra el error que en la imagen adjunto.
>
> En cambio, si la abro con el RDD DBFNTX, abre la base de datos y no da ese
> error, algo que no me explico pues la cree de esta manera; adjunto codigo.
>
> METHOD FormInitialize( oSender ) CLASS FrmCreaBd
> REQUEST DBFFPT
> REQUEST DBFCDX
> RddSetDefault( "DBFCDX" )
> RETURN Nil
>
>
> METHOD CreaGastos( oSender) CLASS FrmCreaBd
>
> DBCreate( "Gastos.Dbf" , ;
> {{"MATRICULA" , "C", 8, 0} ,;
> {"CONCEPTO" , "C", 30, 0} ,;
> {"FECHA" , "D", 8, 0} ,;
> {"BASEIMP" , "N", 8, 2} ,;
> {"IVA" , "N", 8, 0} ,;
> {"TOTAL" , "N", 8, 2} ,;
> {"FACTURAR" , "L", 1, 0} }, "DBFCDX" )
>
> MSGINFO("Creación de GASTOS terminada")
> USE("GASTOS.DBF") VIA "DBFCDX" EXCLUSIVE NEW
> INDEX ON GASTOS->MATRICULA TAG IGastosMatricula
> DBCLOSEALL()
>
> RETURN NIL
>
>
> Aqui os adjunto el evento OnCreate del dataset:
>
> METHOD DataSetGastos( oSender ) CLASS FRMVoEdit
> //Propiedades que vamos a asignar al dataset, cuando
> //vaya a ser creado.
>
> oSender:cName:="GASTOS.DBF"
> oSender:oDataSource:=::oDataSource
> oSender:lShared:=.F.
>
> IF (FILE(".DATAGASTOS.CDX"))
> FERASE(".DATAGASTOS.CDX") //Borro físicamente los índices.
> END IF
>
> IF (::oDataSetGastos:lOpen := .T.)
> ::oDatasetGastos:Pack() //Se eliminan registros borrados.
> INDEX ON ::oDataSetGastos:MATRICULA TAG iGastosMat FOR !DELETED()
> ELSE
> MSGINFO("Error abriendo base de datos")
> END IF
> RETURN NIL
>
>
> Justo después de crear la base de datos, si intento verla con Bases de
> datos->Explorar DBF, me permite abrirla con el RDD DBFCDX ¡una vez!
> pero si cierro la aplicación y la vuelvo a abrir, me da el error que en la
> imagen adjunto, ¿¿¿¿y me obliga a abrirla via RDD DBFNTX???. Llevo
> bastante tiempo intentando solucionar este error, pero no doy pie con
> bola. ¿Que estoy haciendo mal? Gracias por adelantado.