Usar DBF

72 views
Skip to first unread message

Arnaldo Toledano

unread,
Jul 5, 2015, 10:01:55 PM7/5/15
to publice...@googlegroups.com, arnaldo....@gmail.com
Gente,
Sepan disculpar mi ignorancia, pero como nunca trabaje en VFP con DBF, me
encuentro con el siguiente problema.
Tengo que seleccionar ciertos registros, (por ejemplo 2500), de una tabla que contiene un millón de
registro y solo necesito 15 "columnas" sobre un total de 45.
Lo que hago es lo siguiente.
1.- Creo el Cursor con las 15 columnas

2.- Abro la DBF
SCAN
    If Condicion
          Appen BLanck
          Replace campo1 with Dbf.Campo1, ....., campo15 with dbf.campo15
   endif
endscan

Existe alguna otra manera de realizarlo ?????

3.- He intentado con
cSelect="select * From DBF where Condicion1 and condicio2...... and condicionn Into Cursor DBFDos readwrite "
&cSelect
Pero me da error.
Gracias
 
--
Arnaldo Toledano
Tesys Informática
Córdoba
Argentina

Grisson Gil

unread,
Jul 5, 2015, 10:17:45 PM7/5/15
to publice...@googlegroups.com

VFOX con DBF acepta instrucciones SQL Estandar/ANSI, puedes usar lo siguiente:

 

1.       Primero generas la tabla a partir de la condicion

 

Select campo1, campo2, campo3…campo15 from nombretabla where condicion1 = x1 and condicon2 = x2 into table table1

 

2.       Luego de esa tabla

 

Puedes hacer el scan o la condición que aplicaras

 

Saludos

 

Grisson




Avast logo

El software de antivirus Avast ha analizado este correo electrónico en busca de virus.
www.avast.com


Carlos Alfaro

unread,
Jul 5, 2015, 10:34:13 PM7/5/15
to publice...@googlegroups.com

Después de la condición, debes seleccionar el cursor y después del replace, seleccionar la tabla.

 

Bendiciones.

 

Carlos Alfaro

Antonio Meza

unread,
Jul 5, 2015, 11:18:34 PM7/5/15
to publice...@googlegroups.com, arnaldo....@gmail.com, arnaldo....@gmail.com
Es muy facil

* Abres tu archivo DBF
Use tabla.dbf alias listado
* Luego vas a realizar una consulta SQL como lo haces en cualquier servidor de base de datos.

Select Campo1, Campo2, CampoN From Listado where campoX = y INTO CURSOR resultado

el INTO CURSOR te va a crear un cursor temporal llamado en este ejemplo "Resultado" el cual ya tienes los datos en memoria filtrados y listos para usar en lo que necesites.

Si ya no vas a usar la tabla Dbf es recomendable después de ejecutar el SELECT cerrarla

Use in ("listado")

saludos
Antonio Meza

Carlos Miguel FARIAS

unread,
Jul 6, 2015, 8:37:51 AM7/6/15
to Grupo Fox
USE tuTablaDBF IN 0
select [la lista de tus 15 campos];
   From tuTablaDBF where Condicion1 and condicion2...... and condicion N
   Into Cursor DBFDos readwrite

No tiene sentido poner * para que te traiga todos tus campos, cuando solo necesitas 15.
No hace falta utilizar una macro, ya que es lenta y VFP soporta SQL directo (el SELECT desde FoxDOS 2.0)

Si usas VFP 9, la otra que tienes es:
Crear Cursor (como haces en 1)
INSERT INTO tuCursor ([tus quince campos]);
   select [la lista de tus 15 campos] From tuTablaDBF where Condicion1 and condicion2...... and condicion N

En caso de error, deberías pasar tu código real, ya que probablemente tengas un error de sintaxis que se pasa desapercibido
Saludos: Miguel, La Pampa (RA)

Arnaldo Toledano

unread,
Jul 6, 2015, 10:07:06 AM7/6/15
to publice...@googlegroups.com, arnaldo....@gmail.com
Pase  de Clipper a VFP.
En clipper nunca llegue a desarrollar consultas SQL.

En VFP empece directamente con MySQL, de allí mi falta de experiencia.
Ahora tengo que volver a DBF por nuestra bendita AFIP, (aunque tengo que confesar que en mi oficina tengo un cuadrito
de la AFIP y le prendo una vela todos los días......).

Con respecto a las macros. el problema que tengo es que las condiciones las armo en
función de las elecciones del usuario.
Entonces los Where son
If  Condicion1
      cWhere = cWhere + Codigo
endif
if condicion2
    cWhere= cWhere mas codigo
endif

Sera cuestión de escribir mas código y realizar la consulta directamente.

Gracias Miguel,
Gracias Antonio.


Arnaldo Toledano

El 06/07/2015 a las 09:37 a.m., Carlos Miguel FARIAS escibió:

Qsoft

unread,
Jul 6, 2015, 11:05:47 AM7/6/15
to publice...@googlegroups.com
si tienes que crear una condicion compuesta en tiempo de ejecucion, entonces usa la combinacion de TEXT / ENDTEXT y luego ejecutalo con EXECSCRIPT()



Enrique Vasquez B.

Carlos Miguel FARIAS

unread,
Jul 6, 2015, 11:39:56 AM7/6/15
to Grupo Fox
La solución de Enrique es +mejor que usar macrosustitución.
En el where del SELECT dentro fox, podrías estar invocando una función que analice las condiciones y te devuelva verdadero falso.

SELECT [lista campos requeridos] FROM unaTabla WHERE EsteCorrende(campo1, campo2, campo3) AND [otras condiciones fijas] .bla. .bla.

FUNCTION EsteCorresponde(campo1, campo2, campo3) && actua como procedimiento almacenado
    * logica para determinar si selecciona o no
    RETURN bCampoLogico && aca responde si pasa o no pasa

Saludos: Miguel, La Pampa (RA)
Reply all
Reply to author
Forward
0 new messages