Entrar
¿Nuevo usuario? Inscribirme
guvoaII · GUVOA Visual Object Español
? ¿Ya estás suscrito? Entra a Yahoo!

Consejos

¿Sabías que...?
Podés cambiar el orden de los mensajes. Simplemente hacé clic en el enlace de columna fecha. Tus preferencias se guardarán, por lo tanto no necesitarás hacerlo otra vez cuando vuelvas a entrar.

Mensajes

  Mensajes Ayuda
Avanzado
Cambiando de formato de archivos dbase NTX a CDX   Lista de mensajes  
Responder | Reenviar Mensaje #843 de 2799 |
Re: [guvoaII] Cambiando de formato de archivos dbase NTX a CDX

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




Sáb, 3 de Jun, 2006 5:04 pm

Gustavo_S_B
Sin conexión Sin conexión
Enviar correo Enviar correo

Reenviar Mensaje #843 de 2799 |
Desplegar mensajes Autor Ordenar por fecha

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...
fabian.giraldo
Sin conexión Enviar correo
2 de Jun, 2006
11:31 pm

Hola Fabián. Me parece que te convendría más generar las bases con el editor DBServer y luego importarle los datos con el DBALite o cualquier Editor de...
Gerardo J. Biagiotti
gjbiagiotti
Sin conexión Enviar correo
3 de Jun, 2006
12:25 am

Hola Gerardo, Gracias por tu respuesta. La cuestion es que yo tengo digamamos 100 archivos dbase o incluso mas... yo lo que quiero hacer es en tiempo de...
fabian giraldo
fabian.giraldo
Sin conexión Enviar correo
3 de Jun, 2006
3:01 pm

En ese caso dentro de tu programa de conversión deberías armar un manejador de error: M_ERROR := {|OBJERROR| MANEJA_ERROR(OBJERROR)} UM_ERROR :=...
Gerardo J. Biagiotti
gjbiagiotti
Sin conexión Enviar correo
3 de Jun, 2006
5:08 pm

gerardo gracias por tu respuesta, pero no he sido capaz de realizar la captura de errores. estuv leyendo, y observe como utilizan sin embargo no pude capturar...
fabian giraldo
fabian.giraldo
Sin conexión Enviar correo
5 de Jun, 2006
11:08 pm

No tengo el código que enviaste en mails anteriores, pero deberías hacerlo de la siguiente manera: Antes de crear la instancia: cbErrorPrevious :=...
Gerardo J. Biagiotti
gjbiagiotti
Sin conexión Enviar correo
6 de Jun, 2006
12:14 pm

Esto se realiza con DBFileSpec. Fijate la función CSACopyDB que precisamente analiza esto y copia los archivos necesarios. Claudio Torrillo www.xcsa.com.ar ...
[CSA] Claudio Torrillo
clipsupp
Sin conexión Enviar correo
5 de Jun, 2006
2:23 am

claudio, estuve mirando el codigo, y la funcion puede recibir una ruta donde se encuentre el DBASE origen, y posteriormente el analiza si es un string y me...
fabian giraldo
fabian.giraldo
Sin conexión Enviar correo
5 de Jun, 2006
11:08 pm

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...
Gustavo Biasone
Gustavo_S_B
Sin conexión Enviar correo
3 de Jun, 2006
5:05 pm

gracias gustavo, solucione el problema de los campos memos de esa manera... la cuestion es que encontre algunos archivos corruptos, implica que el programa me...
fabian giraldo
fabian.giraldo
Sin conexión Enviar correo
5 de Jun, 2006
11:11 pm
Avanzado

Copyright © 2009 Yahoo! de Argentina S.R.L. Todos los derechos reservados.
Política de privacidad - Condiciones del Servicio - Reglas de la comunidad de Yahoo! - Ayuda