Comparación de dos tablas en VFP 6.0

Quisiera que me pudiera ayudar con algún ejemplo o como le puedo hacer para realizar comparaciones de todos los registros de una tabla A los registros que estén en esa comparar con la tabla B si un campo del registro no es igual al de la tabla B entonces guardar el registro de la Tabla A a una nueva tabla C, es algo complicado lo que deseo pero en realiddad estoy batallando muchísimo con la sintaxis no me sale, de antemano le agradecería su valiosa ayuda... Si tiene dudas de lo que quiero hacer este es mi correo [email protected]

1 Respuesta

Respuesta
2
Suponiendo que quieres comparar las tablas por el campo campo_id, y que la tablaB está indexada por ese campo:
Select TablaA
GoTop
Do While !Eof()
    Select TablaB
    Seek TablaA.campo_id
    If Eof()
       Select TablaC
       Append Blank
       Replace TablaC.campo_id With TablaA.campo_id, ;
                    TablaC.campo_01 With TablaA.campo_01;
                    TablaC.campo_02 With TablaA.campo_02;
                    TablaC.campo_03 With TablaA.campo_03;
                    TablaC.campo_04 With TablaA.campo_04;
                    TablaC. campo_05 With TablaA. campo_05
    EndIf
    Select TablaA
    Skip
EndDo
Hola le agradezco su enorme ayuda la verdad si me esta sirviendo de mucho es que nunca había usado el foxpro y no se como usarlo bien.. ahora ya hice lo que me puso de ejemplo lo malo es que yo tengo mibase de datos que tiene la tabla pólizas y la tabla agentedif y la tabla cartera es una tabla externa que la usan en otro sistema por lo tanto no la tengo indexada es necesario que lo hago o sin eso como le puedo hacer yo creo que es el motivo que también me marca que el alias cartera no existe... otra que si el campo de la tabla pólizas lo encuentra en cartera hago comparación el que más me interesa es el campo agente si no es igual quiero que se guarde en la tabla agentedif.. esot es lo que intento hacer sorry estoy muy desorientada..
SELECT tblpolizas
go top
do while !eof()
select cartera &&marca que el alias no se encuentra es una tabla externa que se ocupa en otro sistema
seek tblpolizas.poliza &&no tiene indice establecido
if found()
*obtener los datos de tabla polizas
a=tblpolizas.agente
b=tblpolizas.poliza
c=tblpolizas.fechemision
d=tblpolizas.prima
*obtener los datos de tabla cartera
w=cartera.agente
x=cartera.numsolmex
y=cartera.feemision
z=cartera.primser
endif
if eof()
IF (alltrim(x=b).AND.alltrim(y=c).AND.alltrim(z=d).AND.alltrim(w<>a)) &&las variables las marca como falso no se si este bien la sintaxis asi m funcionaba en un ejemplo sencillito q hice...
select tblAgentedif
append blank
replace tblAgentedif.poliza with b,tblAgentedif.agente with a,tblAgentedif.fechemision with c,tblAgentedif.prima with d
else
*que pase al siguiente registro
Endif
Endif
select tblpolizas
skip
enddo
Intenta:
If !Used("tblpolizas")
    Use tblpolizas In 0
EndIf
If !Used("cartera")
    Use cartera In 0
EndIf
If !Used("tblAgentedif")
    Use tblAgentedif In 0
EndIf
Select tblpolizas
Go Top
Do While !Eof()
    Select cartera
    Locate For cartera.poliza = tblpolizas.poliza
    If Found()
        If tblpolizas.agente <> cartera.agente Or ;
             tblpolizas.poliza <> cartera.numsolmex Or ;
             tblpolizas.fechemision <> cartera.feemision Or ;
             tblpolizas.prima <> cartera.primser
            Select tblAgentedif
            Append Blank
            Replace tblAgentedif.poliza With tblpolizas.poliza, ;
                            tblAgentedif.agente With tblpolizas.agente, ;
                            tblAgentedif.fechemision With tblpolizas.fechemision, ;
                            TblAgentedif. prima With tblpolizas. Prima
        EndIf
    EndIf
    Select tblpolizas
    Skip
EndDo
Hola .. disculpe tanta molestia y la verdad le agradezco mucho que me ayude con mis dudas pero sabe forzosamente todos los campos debe den coincidir por que en la tabla cartera hay muchos registro repetidos con la misma póliza pero los campos en algiunos son diferentes es decir que debe de ser así solo si en caso que no coincida la clave de agente entonces si que me guarde el registro si es igual entonces si que se pase al siguiente, pero me sale error "incompatibilidad entre el tipo de operador y tipo de operando", y disculpe que le haga tantas preguntas es que todo esto se lo preguntaba a un prof. y no me sabia decir... o andaba muy ocupadito...
IF tblpolizas.poliza = cartera.numsolmex and;
tblpolizas.fechemision = cartera.feemision and;
tblpolizas.prima = cartera.primser and;
tblpolizas.agente <> cartera.agente
select tblAgentedif
append blank
replace tblAgentedif.poliza with tblpolizas.poliza,tblAgentedif.agente with tblpolizas.agente,tblAgentedif.fechemision with tblpolizas.fechemision,tblAgentedif.prima with tblpolizas.prima
endif
Verifica que los tipos de datos sean los mismos en ambas tablas
Hola que tenga buen día! Le agradezco enormemente su ayuda, es un excelente experto.. ya si me surge alguna otra duda ya lo estaré molestando, muchas gracias por su apoyo...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas