Indices CDX y DataSets
Publicado: Lun Jun 18, 2007 9:18 am
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.
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.