CONSULTA COMPARAR ESTRUCTURAS DE DOS TABLAS

722 views
Skip to first unread message

Roberto Tello & Asoc. - Estudio Informatico

unread,
Nov 17, 2010, 2:50:48 PM11/17/10
to publice...@googlegroups.com
Estimados amigos
Consulto lo siguiente...
Tengo dos carpetas con cerca de 300 tablas cada una... tablas que en muchos casos sus estructuras son diferentes.
Se podra... a partir de leer una carpeta ir modificando la estructura de cada tabla y dejarla idem a la de la otra carpeta...?
Pense en armar dos arreglos con las tablas de cada carpeta... e ir recorriendolos... lo que no se si se puede es modificar la estructura por codigo sin tener que ir verificando una por una.... Tener en cuenta que las tablas tienen datos que debo mantener. El resultado deberia ser que ambas carpetas deben quedar con la misma cantidad de tablas y con las mismas estructuras.
Espero alguna sugerencia.
Saludos.

Roberto H. Tello

Hugo C.

unread,
Nov 17, 2010, 4:32:10 PM11/17/10
to Comunidad de Visual Foxpro en Español
Checa el comando ALTER TABLE ... y
las funciones FCOUNT() y FIELD()

Saludos.

On 17 nov, 12:50, "Roberto Tello & Asoc. - Estudio Informatico"

ricardo peña

unread,
Nov 17, 2010, 4:32:53 PM11/17/10
to publice...@googlegroups.com
Prueba con la función AFIELDS
 
Ricardo Luis Peña
Analista de Sistemas
BA - Argentina
 

Date: Wed, 17 Nov 2010 17:50:48 -0200
From: rl...@uolsinectis.com.ar
To: publice...@googlegroups.com
Subject: [vfp] CONSULTA COMPARAR ESTRUCTURAS DE DOS TABLAS

marcelobuenosaires

unread,
Nov 17, 2010, 4:34:57 PM11/17/10
to publice...@googlegroups.com
Hola

Cuando queres guardar la estructura de una tabla, haces...

use miTabla
copy to estructura extended with cdx

De la misma forma podes crear tablas utilizando esa
estructura almacenada en la tabla "estructura"

create tabla2 from estructura

Saludos
MarceloBuenosAires
_________________

El 17/11/2010 04:50 p.m., Roberto Tello & Asoc. - Estudio Informatico
escribió:

Manuel Zevallos

unread,
Nov 17, 2010, 4:37:18 PM11/17/10
to publice...@googlegroups.com
Yo seria de la idea de identificar cual de las dos carpetas tendrá la original. Luego en esta hacer un programita que lea y copie las estructuras de cada una inclusive con sus indices.
Luego, hago otro programa para que apendice toda la data de la segunda carpeta a estas nuevas tablas y listo.
Tendras todo con la misma estructura y con los mismos datos.
 
Saludos.


 
2010/11/17 ricardo peña <rl...@hotmail.com>



--

Atte.,

Manuel Zevallos

marcelobuenosaires

unread,
Nov 17, 2010, 4:39:16 PM11/17/10
to publice...@googlegroups.com
Corrijo...

"with cdx" no va
Se utiliza cuando quiero copiar una tabla entera con el cdx

Entonces...

use miTabla
copy to estructura extended

Luego...
create tabla2 from estructura

Saludos
MarceloBuenosAires
_________________


El 17/11/2010 04:50 p.m., Roberto Tello & Asoc. - Estudio Informatico
escribió:

Roberto Tello & Asoc. - Estudio Informatico

unread,
Nov 17, 2010, 3:48:15 PM11/17/10
to publice...@googlegroups.com
Pero deberia analizar que datos debo ir agregando por cada tabla.... Me parece el procedmiento seria armar dos arreglos con el contenido de ambas carpetas... partiendo del arreglo de las tablas que quiero copiar... primero leer si existe esa tabla en el segundo arreglo, si no esta la copia con toda su estructura, pero si existe, leer los campos de la tabla e ir viendo campo por campo si existe en la tabla que sufrira la actualizacion... No se si les parece correcto forma de hacerlo... creo que con lo que me aportaron de investigar las funciones AFILES, FCOUNT, FIELD podria armar el procedimiento....
Cualquier sugerencia agradecido.
Saludos.-

Roberto H. Tello

IVAN MARTINEZ

unread,
Nov 17, 2010, 6:09:30 PM11/17/10
to publice...@googlegroups.com
Envio el archivo dw4.zip el cual contiene un utilitario para cambiar las estructuras de bases de datos libres no en contenedor.
 
Yo utilice y utilizo este programa porque aun tengo aplicaciones que trabajan con tables libres.
 
La idea es que uno tiene el directorio llamemos base_nueva corre alli el dw y este crea un prg llama do dbf.prg el cual al correrlo en el directorio a modidicar hace los cambios.
 
No se puede utilizar con las nuevas basesde datos, pero da una idea de la estrategia a seguir.
 
La cuestion es que la tablas libres eran mucho mas sencillas en cambio los contenedores tienen mucha mas informacion que hay que considerar.
 
El programa gendbc y gendbcx (generan un esquema completo de una basede datos dbc)  dan una idea de las cuestiones que habria que tomar en cuenta para hacer un programa semejante al dw4 pero para dbc.
 
Ivan Martinez von Halle


De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Manuel Zevallos
Enviado el: Miércoles, 17 de Noviembre de 2010 05:07 p.m.
Para: publice...@googlegroups.com
Asunto: Re: [vfp] CONSULTA COMPARAR ESTRUCTURAS DE DOS TABLAS

dw4_zip.dat

Walter R. Ojeda Valiente

unread,
Nov 17, 2010, 6:22:22 PM11/17/10
to publice...@googlegroups.com
Yo tengo una rutina que compara la estructura de dos tablas. Una de ellas, la que se supone está bien, se encuentra en la carpeta INICIAL. La otra tabla puede estar en cualquier carpeta de la aplicación. Por ejemplo, las carpetas pueden ser:

C:\SISTEMAS\CONTA\ARCHIVOS\DEMO\
C:\SISTEMAS\CONTA\ARCHIVOS\ELENA\
C:\SISTEMAS\CONTA\ARCHIVOS\INICIAL\
C:\SISTEMAS\CONTA\ARCHIVOS\PRUEBAS\
C:\SISTEMAS\CONTA\ARCHIVOS\SILVIA\

Cuando un usuario quiere usar las tablas de la carpeta SILVIA (por ejemplo), lo primero que hace la rutina es verificar si las estructuras de cada una de las tablas coincide. Si hay alguna diferencia, entonces actualiza la estructura de la tabla desactualizada.

Lo mismo hago con los índices.

El usuario nunca puede elegir la carpeta INICIAL, solamente puede elegir una de las otras carpetas.

Saludos.

Walter.

Roberto Tello & Asoc. - Estudio Informatico

unread,
Nov 17, 2010, 7:03:24 PM11/17/10
to publice...@googlegroups.com
Amigos asi quedo el codigo y funciono a la perfeccion... verificó la estructura de 318 tablas de las cuales mas de la mitad se actualizaron.
Los datos se mantuvieron sin errores. No está muy ordenado pero funciono.
Muchas Gracias a todos por las ideas y sugerencias.
Saludos.-


SET DEFA TO C:\SISTEMAS1

clear all
close all

local cuantos1,cuantos2,ln,arch,archi,uni,uni2,archi2,auxnom,auxtipo,auxtama,auxdeci,auxtipito

cuantos1 = ADIR(mfile, 'C:\SISTEMAS1\*.dbf') && Levanto las tablas Originales

ln = 0
FOR ln = 1 TO cuantos1

uni = 'C:\SISTEMAS2'
arch = juststem(mfile(ln,1))
archi = uni+arch+'.DBF'
uni2 = 'C:\SISTEMAS1\'
archi2 = uni2+arch+'.DBF'

IF FILE(archi)  && ¿Existe el archivo?
use &archi excl
gnFieldcount2 = AFIELDS(gaMiMatriz2)  && Campos tabla secundaria a corregir

use &archi2 exc l
gn Fieldcount = AFIELDS(gaMiMatriz)  && Crea la matriz Campos Tabla Principal

FOR nCount = 1 TO gnFieldcount
FOR nCount2 = 1 TO gnFieldcount2
if ALLT(gaMiMatriz(nCount,1)) == ALLT(gaMiMatriz2(nCount2,1))  && EVALUA los nombres de campo.
AUXSI =  'SI - '+ALLT(gaMiMatriz(nCount,1))
nCount2 = gnFieldcount2
else
AUXSI = 'NO'
auxnom = ALLT(gaMiMatriz(nCount,1)) &&nombre
auxtipo = ALLT(gaMiMatriz(nCount,2)) && tipo
auxtama = gaMiMatriz(nCount,3) && longitud
auxdeci = gaMiMatriz(nCount,4) && decimales
endif
ENDFOR

if  AUXSI = 'NO'
wait wind archi nowait timeout 2
if auxtipo = 'N'
auxtipito = auxtipo+'('+allt(str(auxtama))+','+allt(str(auxdeci))+')'
ALTER TABLE &archi ADD COLUMN &auxnom &auxtipito &&MODIFICA ESTRUCTURA
else
auxtipito = auxtipo+'('+allt(str(auxtama))+')'
ALTER T ABLE &am p;archi ADD COLUMN &auxnom &auxtipito &&MODIFICA ESTRUCTURA
endif           
endif
ENDFOR
endif
ENDFOR
return


Roberto H. Tello & Asoc.
Estudio Informático
Msn: robertote...@hotmail.com
Skype: robertotellomoreno



Reply all
Reply to author
Forward
0 new messages