CDX TO NTX y duplicación de registros
Posted: Sun Mar 26, 2006 8:22 pm
Me ocurre algo extraño y se lo otorgo al uso de dbfcdx.
Tengo duplicación de registros idénticos y correlativos en una base de datos, la chequeo en forma externa al programa así elimino el problema de los índices. El código no tiene forma de duplicar el registro ya que no tengo pérdida de datos y si duplicación. Ahora también me ocurre este otro caso, cuando intento abrir una base de datos, ctactev.dbf la cual fue creada con dbfntx tengo este error:
**********************************************************
Application
===========
Path and name: C:\DATASOL\Datasol.Exe (32 bits)
Size: 2,131,456 bytes
Time from start: 0 hours 0 mins 6 secs
Error occurred at: 26/03/2006, 17:10:32
Error description: Error DBFNTX/1001 Open error: E:\PROGRAMA\DATASOL\XHARBOUR\ACTDBF\CTACTEV.fpt
************************************************************
Desde xHarbour no he podido hacer la conversión de cdx a ntx, siempre obtengo bases de datos con formato dbfcdx, o sea nunca veo los archivos de memo dbt y si me sigue creando los fpt.
El mismo código lo hice con clipper y me funcionó de maravillas.
Estoy usando esto dentro de la aplicación de xharbour
*************CODIGO***********************
ANNOUNCE RDDSYS
INIT PROCEDURE INICIO
***********************
REQUEST DBFNTX
REQUEST DBFCDX
REQUEST DBFFPT
RDDSETDEFAULT("DBFCDX")
RETURN
************FIN DE CODIGO**********************
Pero pretendo dejarla a DBFNTX por la duplicación de registros.
****************CODIGO****************************
Local cPath:="\"+CURDIR()+"\",I
Local aBases:=directory(cPath+"DBF\*.dbf"),x,aEst
For x:=1 to len(aBases)
use (cPath+"DBF\"+aBases[x,1]) alias vieja
aEst:=Dbstruct()
//Aquí no me respeta el "DBFNTX" con xharbour y si con clipper
Dbcreate(cPath+"ACTDBF\"+aBases[x,1],aEst,"DBFNTX")
use (cPath+"ACTDBF\"+aBases[x,1]) via "DBFNTX" alias nueva new
DO WHILE VIEJA->( ! EOF () )
NUEVA->( DBAPPEND () )
FOR i := 1 TO VIEJA->( FCOUNT () )
NUEVA->( FIELDPUT ( i, VIEJA->( FIELDGET ( i ) ) ) )
NEXT i
VIEJA->( DBSKIP () )
ENDDO
vieja->(dbclosearea())
nueva->(dbcloseara())
Next
*******************FIN DE CODIGO*************************
Les agradecería su ayuda porque estoy bastante ciego a esta altura y creo que le estoy pasando por arriba al error.
Gracias.
Ricardo.-
Tengo duplicación de registros idénticos y correlativos en una base de datos, la chequeo en forma externa al programa así elimino el problema de los índices. El código no tiene forma de duplicar el registro ya que no tengo pérdida de datos y si duplicación. Ahora también me ocurre este otro caso, cuando intento abrir una base de datos, ctactev.dbf la cual fue creada con dbfntx tengo este error:
**********************************************************
Application
===========
Path and name: C:\DATASOL\Datasol.Exe (32 bits)
Size: 2,131,456 bytes
Time from start: 0 hours 0 mins 6 secs
Error occurred at: 26/03/2006, 17:10:32
Error description: Error DBFNTX/1001 Open error: E:\PROGRAMA\DATASOL\XHARBOUR\ACTDBF\CTACTEV.fpt
************************************************************
Desde xHarbour no he podido hacer la conversión de cdx a ntx, siempre obtengo bases de datos con formato dbfcdx, o sea nunca veo los archivos de memo dbt y si me sigue creando los fpt.
El mismo código lo hice con clipper y me funcionó de maravillas.
Estoy usando esto dentro de la aplicación de xharbour
*************CODIGO***********************
ANNOUNCE RDDSYS
INIT PROCEDURE INICIO
***********************
REQUEST DBFNTX
REQUEST DBFCDX
REQUEST DBFFPT
RDDSETDEFAULT("DBFCDX")
RETURN
************FIN DE CODIGO**********************
Pero pretendo dejarla a DBFNTX por la duplicación de registros.
****************CODIGO****************************
Local cPath:="\"+CURDIR()+"\",I
Local aBases:=directory(cPath+"DBF\*.dbf"),x,aEst
For x:=1 to len(aBases)
use (cPath+"DBF\"+aBases[x,1]) alias vieja
aEst:=Dbstruct()
//Aquí no me respeta el "DBFNTX" con xharbour y si con clipper
Dbcreate(cPath+"ACTDBF\"+aBases[x,1],aEst,"DBFNTX")
use (cPath+"ACTDBF\"+aBases[x,1]) via "DBFNTX" alias nueva new
DO WHILE VIEJA->( ! EOF () )
NUEVA->( DBAPPEND () )
FOR i := 1 TO VIEJA->( FCOUNT () )
NUEVA->( FIELDPUT ( i, VIEJA->( FIELDGET ( i ) ) ) )
NEXT i
VIEJA->( DBSKIP () )
ENDDO
vieja->(dbclosearea())
nueva->(dbcloseara())
Next
*******************FIN DE CODIGO*************************
Les agradecería su ayuda porque estoy bastante ciego a esta altura y creo que le estoy pasando por arriba al error.
Gracias.
Ricardo.-