Page 1 of 1

CDX TO NTX y duplicación de registros

PostPosted: Sun Mar 26, 2006 8:22 pm
by riesrovi
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.-

CDX TO NTX y duplicación de registros

PostPosted: Sun Mar 26, 2006 8:36 pm
by riesrovi
Me faltó anexar que noté que la duplicación se me hizo luego de hacer un pack, por lo que estoy haciendo una función propia de pack en donde copio a otra base de datos auxiliar todos los registros que no estan marcados para borra y después hago un zap a la base, luego le importo los campos de la base de datos auxiliar.