La unica manera que tenes para chequear si un dbf posee un memo asociado es
leyendo el header del dbf en cuestion.
Esto es, abrir el dbf a bajo nivel (fopen) y leer el primer byte (fread). Si
este valor es 03 significa que el dbf no tiene campo memo.
GB
----- Original Message -----
From: "fabian.giraldo" <fabian.giraldo@...>
To: <guvoaII@...>
Sent: Friday, June 02, 2006 8:30 PM
Subject: [guvoaII] Cambiando de formato de archivos dbase NTX a CDX
> Buenas tardes,
>
> Estoy empezando con Visual Object y tengo el siguiente problema
>
> Estoy utilizando la clase DBFileSpec para cambiar de driver (de NTX a
> CDX) para archivos DBASe.
>
> el problema es el siguiente:
>
> Cuando el archivo DBASE tiene un campo MEMO y el archivo del campo
> MEMO existe la conversion a CDX es correcta.
>
> sin embargo tengo archivos dbase los cuales se han perdido los
> archivos de los campos memos, entonces se presenta un problema cuando
> hago el llamado y aborda la operacion.
>
> yo necesito saber como chequar la integridad del archivo DBASE para
> poder luego hacer la conversion al CDX y el programa no aborde.
>
> El codigo es el siguiente
> CONVIERTE UN DIRECTORIO DE ARCHIVOS CON DRIVER NTX A DRIVER 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
>
> 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'
>
>
> 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]
> *EL PROBLEMA SE PRESENTA AQUI CUANDO
> *ENTRA UN ARCHIVO DBASE QUE TIENE MEMO PERO EL ARCHIVO DEL MEMO NO
> *EXISTE, NECESITO LA FORMA DE QUE ME DIGA QUE LA INTEGRIDAD DEL
> *FICHERO ESTA INCORRECTAM, PARA QUE ASI EL PROGRAMA NO ME ABORTE
>
> 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
>
>
> NEXT
>
>
>
>
>
>
>
>
>
>
>
> Enlaces de Yahoo! Grupos
>
>
>
>
>
>