La Web del Programador: Comunidad de Programadores
 
    Pregunta:  478 - FILTRAR BD EN CLIPPER
Autor:  Mauro
Necesito filtrar datos de una Base de Datos DBF en Clipper que me origine una nueva Base de Datos. El filtro se realiza sobre el campo fecha, ingresando la fecha por teclado. Lo he intentado de muchas formas y lo unico que me filtra el el primer registro que cumple con la condicion ...
Gracias de antemano a quien me pueda ayudar !!

  Respuesta:  Angel Blanco
Recomiendo que no utilicen la instrucción set filter to, ya que pone el sistema Mucho más lento, es preferible elaborar un indice temporal para cada usuario con la clausula 'FOR', Por supuesto, si vas a actualizar algún dato debes tener los otros indices invocados.

DIRTMP:='C:\WINDOWS\'

SELECT(ARCHIVO)

INDEX ON [CLAUSULA] TO &DIRTMP.TEMPORAL FOR [FILTRO]
SET INDEX TO &DIRTMP.TEMPORAL
GO TOP
* VOALA! YA TIENES TU FILTRO Y CON MEJOR TIEMPO DE ACCESO
IF FILE(NUEVA_BASE)
DELFILE(NUEVA_BASE)
ENDIF
COPY TO NUEVA_BASE

*TAMBIEN LO PUEDES HACER DE LA FORMA ANTÍGUA

USE ARCHIVO INDEX INDICES SHARED NEW
COPY STRU TO NUEVA_BASE
CLOSE
USE NUEVA_BASE EXCLUSIVE NEW
APPEND FROM ARCHIVO FOR CONDICION

  Respuesta:  Eduardo Lopez
Te voy a dar una clave, los codigo que te pasan son exactos, todos estan correctos pero te cuento que para que sea mas rapido el filtro NO debes de usar los indices, Clipper o Dbase cuando haces un filtro trabaja muchisimo mas rapido sin el uso de indices.

  Respuesta:  Pablo Alberto Vidal
Solo tienes que usar un DbGotop() despues que filtars el archivo y listo. eso es todo... suerte.. Pablo Alberto Vidal. Desde La Vega, Republica Dominicana

  Respuesta:  Arturito
Como ya se menciono tienes que irte al inicio de la base de datos te pongo un ejemplo:
declarando bases de datos
sele 0
use clientes <<<----base de donde filtrare
sele 0
use facturas

sele clientes

*Suponiendo que el campo fecha es donde traes la *fecha y que tu variable donde capturaron la *fecha es vFecha
set filter to fecha=vFecha
go top
copy to temclie <<<----temclie es mi nueva base
Obviamente se supone que el dato capturado en vFecha y el campo fecha sean del mismo tipo y que tu base de datos no este dañada que aveces sucede.

Espero haber servido de algo y si tienes mas dudas escríbeme


  Respuesta:  juan M. Feria
LOCAL fFecha:= CTOD(´´)

SELECT 0
USE ALIAS ORIGEN

@ 10,10 SAY "FECHA A FILTRAR"
@ 10,ROW()+1 GET fFecha
READ

SELECT ORIGEN
COPY TO FOR ORIGEN->[CAMPO_FECHA] = fFecha


  Respuesta:  Christian
set century on
set date format to ¨dd/mm/yyyy¨
set epoch to 1998

vFecha1 := space(10) / variable de ingreso

@ 15,15 say ¨Ingrese fecha : ¨
@ 15,31 get vFecha pict¨99/99/9999¨
read

vFecha2 := ctod(vFecha) / variable para filtar

use ventas.dbf
set filter to FECHA=vFecha2
reindex
browse()
use

Nota : Si ingresan una fecha no valida, el browse te mostrará toda la base de datos, esto te sirve para ingresar una opción como por ejemplo :

--- 99/99/999 = Mostrar todos los registros ---

o puedes incluirle al get alguna condición a algun valid

Espero te sirva.


  Respuesta:  Arteaga
No se si aun este en tiempo de ofrecerte una respuesta pero si tu problema es con el despliegue de datos por pantalla tal vez sea conveniente utilizar el TBrowse() con algunas condiciones de control.

De ser así cuento con algunas funciones que puedo compartir (igual comparto desarrollo en FiveWin).
Interesados enviar correo.