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
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


0