Inicio > Visual Fox Pro > chavomix > Como establecer entre dos tablas Coincidentes y No

Como establecer entre dos tablas Coincidentes y No

Experto:
Usuario:
Fecha: 30/05/2008
Valoración: (4,00 sobre 5) Categoría: Visual Fox Pro
23/05/2008
riky2002, usuario preguntando en Visual Fox Pro
Usuario
Me gustaria conocer el codigo en Visual FoxPro para establecer entre dos tablas registros coincidentes y no coincidentes y marcar los registros repetidos en una tabla.
23/05/2008
riky2002, experto respondiendo en Visual Fox Pro
Experto
bueno para saber los registros coincidentes entre dos tablas prueba esto
tabla1 y tabla2
select * form tabla1, tabla2 where tabla1.referencia =  tabla2.referencia into cursor tbcoincidentes
lo anterior es si deseas obtener los campos de la tabla1 y 2.. si quieres algunos campos especificos, nombras la tbla y el campo de la tabla que quieres... referencia es el punto de comparacion...
para los no coincidente solo pregunstas si son diferente, ose...
 tabla1.referencia != tabla2.referencia y listo
 
para marcar los registros repetidos en una tabla... imagino te refieres a marcar para eliminar..
primero listas los registros sin que se repitan...
select distinct * from tabla1 into cursor datosdistintos
ahora
a marcar cada registro que se repita
num_regis = 1
select datosdistintos
go top
limite = reccount()
scand for num_regis <= limite
  cant = 0
  select tabla1
  go top
  n_regis1 = 0 
  scand n_resgis2 < = reccount()
    if datosdistintos.referencia = tabla1.referencia then
      cant = cant + 1
      if cant > 1 then
       aplicas la linea de elimnar...
      endif
    endif
  endscan
ensdcan
.......
que pena no terminarte el ejemplo... pero me surgio una urgencia,,, debo ireme...
23/05/2008
riky2002, usuario preguntando en Visual Fox Pro
Usuario
Muy bien esto es lo que buscaba...me puedes enviar el resto del codigo del ejemplo.....gracias.
28/05/2008
riky2002, experto respondiendo en Visual Fox Pro
Experto
retomando la parte de la eliminacion... que pena no responder antes.. estaba bastante ocupado
select distinct * from tabla1 into cursor datosdistintos
ahora
marcar cada registro que se repita
num_regis = 1
select datosdistintos
go top
limite = reccount()
scand for num_regis <= limite
  cant = 0
  select tabla1
  go top 
  n_regis1 = 0
  scand n_resgis2 < = reccount()
    if datosdistintos.referencia = tabla1.referencia then
      cant = cant + 1
      if cant > 1 then 
          replace tabla1.referencia with -1
          && cambia la referencia por (-1) parea saber cuales eliminar
      endif
    endif
  endscan
ensdcan
.....una ves definidos los registros a eliminar... se aplica
delet from mitabla1 where mitabla1.referencia = -1
select mitabla1
pack
...
listo... para aplicar el pack debes abrir la tabla en modo exclusivo...
30/05/2008
riky2002, usuario preguntando en Visual Fox Pro
Usuario
Muy bien era lo que necesitba.
Enlaces patrocinados