¿Como importar DBF a VFP9?

Hola, es la primera vez que pregunto algo a usted experto, quisiera saber si es posible importar DBF al mismo VFP 9. Resulta que estoy haciendo un sistema, pero en el lugar donde trabajo tienen uno hecho en VFP y necesito vincular mi sistema con el que ya esta en uso. Puede ser eso posible?
Gracias de antemano.
Saludos.

1 respuesta

Respuesta
1

Es un place saludarte y bienvenido al foro, al ser su primera vez! Un saludo de parte de todos los expertos de VFP. Soy el experto Ravenn y Espero poder ayudarte.

Imagino que lo que deseas es migrar de alguna version anterior (6 o 7) a la version 9 de VFP. Claro que se puede. Incluso.. ¿por qué no usar las mismas tablas? Bueno.. tus razones tendrás. Hay varias formas de hacerlo y depende de lo que deseas mover.

Te lo explicare: no ay solo una forma pero esta puede serte muy útil.

Imagina que tienes una tabla llamada tabla1 con los campos código, nombre, teléfono. Esos datos los quieres migrar a una tabla de tu proyecto nuevo que se llama tabla2 y que tiene los campos código, nombre, teléfono, dirección, apartado, email, ciudad, contacto. Como ves... la tabla 2 que es la nueva, tiene más campos que en el futuro usaras y por tanto debes migrar... dado que la tabla vieja (tabla1) solo tiene 3 campos. Entonces... para extraer los datos de tu tabla1 (tabla vieja) a tu nueva tabla, podes usar un código como este: REALIZAREMOS UN escaneo sobre la tabla vieja y por cada registro que recorra, lo enviaremos a la tabla nueva con el COMANDO INSERT SQL.

LOCAL lcCodigo, lcNombre, lcTelef

**--Abrimos la tabla vieja 

USE tabla1

**Abrimos la tabla nueva

USE tabla2

SELECT tabla1

GO TOP 

**--Iniciamos escaneo

SCAN 

       **Cargamos los datos 

      lcCodigo = tabla1.codigo

      lcNombre = tabla1.nombre

      lcTelef = tabla1.telefono

              **--Insertamos en la tabla nueva

             SELECT tabla2

                         INSERT INTO tabla2(codigo, nombre, telefono) VALUES(lcCodigo, lcNombre, lcTelef)

                             TABLEUPDATE(.F.)

ENDSCAN 

**--//

Si usas un form para colocar este código... asegurate que en las propiedades del form, estableces en la pestaña DATA: Buffermode = 2. Datasession = 2

Esta es una forma detallada... más que todo para cuando no deseas copiar todos los datos de la tabla vieja.. sino más bien algunos! Toma un poco más de tiempo pero da buenos resultados.

Si lo que deseas es copiar todos los datos de una tabla a otra, en cuyo caso ambas tablas tienen exactamente la misma estructura (IGUAL EXACTAMENTE), podes usar append from, así:

**--

USE tabla1

USE tabla2

SELECT tabla2

APPEND FROM tabla1 FOR alguncampo = algunacondicion

SELECT tabla2

TABLEUPDATE(.T.)

**--//

Bien.. si quieres me explicas más a detalle lo que deseas.. para ayudarte mejor. Pero acá tienes ya un apéndice para empezar a divertirte.

Espero tus comentarios y nuevamente, bienvenido. Cualquier cosa, puedes escribir al tablón de la categoría de visual foxpro o directamente hacerme la pregunta a ravenn que es mi nombre de experto.

Desde Managua, NIcaragua!

Ravenn

Gracias Experto Ravenn, me ayudó a despejar otras dudas que también tenía sobre el proyecto que estoy elaborando je je, pero creo que no supe explicarme bien, el detalle es que, donde trabajo, ya manejan un sistema son sus diferentes módulos y cada módulo con sus respectivas bases de datos, entonces lo que necesito hacer es el sistema que estoy elaborando, vincularlo con las bases de datos de POR módulo del sistema que ya usan aquí, por ejemplo en un POR módulo manejan una DBF para registro de clientes, entonces en el sistema que estoy elaborando quiero tener esa tabla pero que se actualice cuando haya cambios en la otra... no se si me de a entender je je. Gracias por su cordial bienvenida.
Mando un saludo desde Caborca, Sonora, México.

Hasta Sonora. México... gran nación!

En ese caso... si deseas usar la misma base de datos... debes configurar que dicha base y las tablas se abran en modo compartido. Si lo que deseas es solo usar la base de datos con un nuevo proyecto de VFP, entonces debes direccionar la BD a la ubicación actual. Imagino que usas una red local!

Lo ideal... seria usar un string de conexión aunque no se como es la arquietectura de ambas aplicaciones.

Algo más sencillo... abre la base de datos especificando la ruta física donde esta ubicada.. algo así:

SET EXCLUSIVE OFF

SET MULTILOCKS ON

OPEN DATABASE C:\FarmaciaX\DATO\data1.dbc SHARED

Y listo. Con eso abrís la base de datos. Ahora. Por caad transacción que involucre una tabla de dicha base de datos... debes abrir la tabla también desde su ubicación física:

USE C:\FarmaciaX\DATO\mitabla.DBF SHARED

Y listo. Ahora... esto trae algunas complicaciones porque debes configurar bien la arquitectura.

Por ejemplo... debes quitar el modo exclusivo de la BD para poder abrirla desde tu programa sin afectar el programa original.

Debes asegurarte cerrar las tablas al terminar la sesión de datos actual. Al abrir la tabla... debes asegurarte que no se abra 2 veces o te dará el error "file is already open"!

Por ejemplo... para abrir una tabla... podes hacer así:

IF NOT USED('C:\FarmaciaX\DATO\mitabla.DBF')

USE C:\FarmaciaX\DATO\mitabla.DBF IN 0 SHARED

ELSE

USE C:\FarmaciaX\DATO\mitabla.DBF AGAIN IN 0

ENDIF

Y para cerrar la tabla... en el evento RELEASE del form... podes colocar algo asi

IF USED('C:\FarmaciaX\DATO\mitabla.DBF')

USE IN C:\FarmaciaX\DATO\mitabla.DBF

ENDIF

**--//

Proba y me avisas!

Que tal experto Ravenn, ¡MUCHAS! Gracias por la explicación, tenía la idea de que era algo así, y ahora con lo que me dice lo confirmo :), cualquier otra duda, no pensare mas de dos veces en preguntarle je je.
Saludos a Managua, Nicaragua!

Un placer. Cualquier cosa, estoy a la orden.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas