FoxPro/Visual FoxPro - Ayuda para buscar diferencias

 
Vista:
sin imagen de perfil

Ayuda para buscar diferencias

Publicado por Javier Pinel (3 intervenciones) el 27/09/2012 16:05:46
Buenas señores,
Yo no soy programador pero necesito una rutinita para sacar diferencias entre dos bases de datos, en el cual tendo codigos, nombres de personas y valores monetarios, y con ello necesito sacar las diferencias existentes, ejemplo, base de dato A, Julio Perez $ 2,000, base de datos B, julio Perez $ 2200.00, entonces se que la diferencia es $ 200, pero el problema es que son muchos datos que tengo que comparar.

Les agradecere al que me pueda ayudar, la rutina podria ser en foxpro o en visualfoxpro9.

Saludos cordiales.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Ayuda para buscar diferencias

Publicado por Fidel (657 intervenciones) el 27/09/2012 16:47:39
Primero veamos un problema de léxico. Las bases de datos son un conjunto de tablas. Supongo que tienes dos tablas con algún valor en coincidencia, por ejemplo, el código.
Suponiendo que la estructura de las tablas son iguales:
Campo 1, Codigo
Campo2 , nombre
Campo 3, importe
Llamemos Tabla1 y Tabla2 a las tablas que tienes.
Para evitar problemas, copiemos las tablas primero y luego veremos la comparación.
* Primero verificamos que no se usen los nombres de las gemelas
IF USED("NWTABLA1")
SELECT NWTABLA1
USE
ENDIF
IF USED("NWTABLA2")
SELECT NWTABLA2
USE
ENDIF

* Abrimos las tablas originales y las copiamos
* Suponiendo que se encuentran en la carpeta actual
* Si no, hay que citar la ruta Para las tablas originales
* Las tablas duplicadas, se pueden generar en la misma carpeta.
* por ejemplo, si la ruta es "C:\Archivos\Datos"
* sería USE C:\Archivos\datos\Tabla1 IN 0 SHARED
**********************************************************
USE TABLA1 IN 0 SHARED
COPY TO nwTabla1
USE
USE TABLA2 IN 0 SHARED
COPY TO nwTabla2
USE
* Modificamos la estructura de NwTabla1
ALTER TABLE nwTabla1 ;
ADD COLUMN "IMPORTE2" N(12,2);
ADD COLUMN "DIFEREN" N(12,2);
ADD COLUMN "EXISTE" L
USE nwTabla2 IN 0 EXLUSIVED && abrimos la copia de Tabla2
SELECT NWTABLA2
* Creamos una etiqueta de indice
INDEX ON CODIGO TAG nw2Cod

* Se agrega en NwTabla1, el importe de NwTAbla2 en el campo Importe2
SELECT NWTABLA1
SCAN
IF INDEXSEEK(NWTABLA1.CODIGO,.F.,"NWTABLA2","NW2COD")
INDEXSEEK(NWTABLA1.CODIGO,.T.,"NWTABLA2","NW2COD")
REPLACE IMPORTE2 WITH NWTABLA2.IMPORTE,;
EXISTE WITH .T.
ENDIF
ENDSCAN

* Calculo de la diferencia
SELECT NWTABLA1
SCAN
REPLACE DIFEREN WITH IMPORTE - IMPORTE2
&& o puede ser a la inversa, IMPORTE2 - IMPORTE
ENDSCAN

* Se muestra el resultado
GO TOP
BROWSE
* puedes pasarla a una hoja de Excel
COPY TO TablaDif XL5

* Cerramos las tablas copia.
SELECT NWTABLA1
USE
SELECT NWTABLA2
USE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda para buscar diferencias

Publicado por Javier Pinel (3 intervenciones) el 27/09/2012 17:12:43
Muchas gracias Fidel, me sera de mucha ayuda la rutina que me envio.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda para buscar diferencias

Publicado por Juan Manuel Cruz (512 intervenciones) el 01/10/2012 12:44:04
O resumiendo, puedes usar UNA SOLA sentencia SQL para ello. Y a lo mejor va hasta más rápido:

Ejemplo:

SELECT NVL(AA.cliente, BB.cliente) as CLIENTE,
NVL(BB.importe,0) - NVL(AA.importe,0) as DIFERENCIA
FROM TablaA as AA
FULL OUTER JOIN TablaB as BB ON AA.cod_art = BB.cod_art
INTO CURSOR Resultados NOCONSOLE

Y voilà.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda para buscar diferencias

Publicado por Juan Manuel Cruz (512 intervenciones) el 01/10/2012 12:46:07
Zas, se me fue el copia-pega de mi ejemplo. Quedaría así,


SELECT NVL(AA.cliente, BB.cliente) as CLIENTE,
NVL(BB.importe,0) - NVL(AA.importe,0) as DIFERENCIA
FROM TablaA as AA
FULL OUTER JOIN TablaB as BB ON AA.cliente = BB.cliente
INTO CURSOR Resultados NOCONSOLE



Espero que sea de utilidad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda para buscar diferencias

Publicado por Javier Pinel (3 intervenciones) el 01/10/2012 16:15:52
Muchas Gracias,

Me sera de mucha utilidad sus ayudas.

Saludos cordiales-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar