CA-Visual Objects - Como chequer la integridad de un dbase

 
Vista:

Como chequer la integridad de un dbase

Publicado por Fabian (1 intervención) el 03/06/2006 17:38:36
Buenos dias,

Tengo el siguiente problema, estoy tratando de cambiar el driver de los archivos dbase de NTX a CDX.
existe un clase (DBFileSpec) que posee un metodo (DBFileSpec:CopyTo()) que permite hacer esto directamente.

pero me sucede lo siguiente si yo tengo un archivo dbase que tiene un campo MEMO y por alguna razon el archivo del campo MEMO no existe. la aplicacion termina la operacion.

el codigo es el siguiente, pasa un directorio completo de NTX a CDX,

FUNCTION dbf2dbf(pathOrigen,fmtOrigen,pathDestino,fmtDestino)

LOCAL aDir AS ARRAY
LOCAL i AS WORD
LOCAL wLen AS WORD
LOCAL dbfOrigen
LOCAL dbfName
LOCAL oTB
LOCAL archivo AS STRING

*CHEQUEAR LOS CAMPOS MEMO
LOCAL oDBFileSpec AS DBFileSpec
LOCAL aDBStruct AS ARRAY
LOCAL aDBStruct2 AS ARRAY
LOCAL campos AS ARRAY
LOCAL longitud AS INT
LOCAL j AS INT
LOCAL indicador AS INT
LOCAL existencia AS LOGIC
LOCAL ptrHandle
LOCAL oDBCust AS DBServer
LOCAL aStruct AS ARRAY
LOCAL oError AS USUAL

DirChange(pathOrigen)
DirMake(pathDestino)

aDir := Directory("*",'D')
wLen := ALen(aDir)


FOR i := 1 UPTO wLen

IF aDir[i][F_NAME]!="." .AND. aDir[i][F_NAME]!=".."

* Pregunta si es directorio.
IF ADir[i][F_ATTR] == 'D'

*oTB := TextBox{NIL, "Quit",pathOrigen+"\"+aDir[i][F_NAME]+"\"}
*oTB:Type := BOXICONQUESTIONMARK + BUTTONYESNO
*oTB:Show()

dbf2dbf(pathOrigen+"\"+aDir[i][F_NAME]+"\",fmtOrigen,pathDestino+"\"+aDir[i][F_NAME],fmtDestino)

* Pregunta si es archivo
ELSEIF ADir[i][F_ATTR] == 'A'

IF SLen(aDir[i][F_NAME]) > 4

IF Upper(Right(aDir[i][F_NAME],4)) == ".DBF"
? pathOrigen,aDir[i][F_NAME]

dbfName := aDir[i][F_NAME]


*eEL PROBLEMA ESTA ACA, SI EL ARCHIVO TIENE CAMPO MEMO Y N OEXISTE EL ARCHIVO, EL PROGRAMA ABORDA, Y NO PUEDO SEGUIR PROCESANDO LOS DEMAS ARCHIVOS dbfOrigen := DBFileSpec{ pathOrigen + dbfName}

indicador:=0

IF dbfOrigen:Find()
aDBStruct := dbfOrigen:DBStruct
longitud:= ALen(aDBStruct)


FOR j=1 TO longitud

campos:=aDBStruct[j]

IF campos[DBS_TYPE]=='M'

indicador:=1
existencia:=File(pathOrigen+"\"+ Left(dbfName,SLen(dbfName)-4) +".DBT")

IF existencia==.T.

dbfOrigen:CopyTo( pathDestino+"\"+dbfName, fmtDestino)

ENDIF

ENDIF


NEXT

END IF




END IF

END IF

END IF

END IF
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder