FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Busqueda selectiva por nombre en un DBF
Posts: 479
Joined: Fri Feb 16, 2007 10:29 AM
Busqueda selectiva por nombre en un DBF
Posted: Fri Oct 07, 2016 11:23 AM
Buenos días:

Tengo un sistema con indices DBF-CDX, en red local, funcionando bien. Sin embargo, algunas vez, NO siempre, en la opción de poder filtrar una DBF por nombres, me genera el siguiente error:

Error: NO existe la variable "nom_cli"

... cuando realmente SI existe, y de hecho de probado incluso por declararla pública.

Code (fw): Select all Collapse
index on nombre tag &(camino+"tempofac") to &(camino+"tempofac") ADDITIVE for upper(alltrim(nom_cli)) $ upper(factura->nombre)
&& camino = ruta del PC local
&& nom_cli = texto o cadena a buscar y que teclea el usuario


La cuestión es que genera error algunas vez, NO siempre. Por cierto, las búsquedas me las hace rapidísimas y por cualquier cadena que escriba el usuario.

¿Qué estoy haciendo mal?

Gracias.
Un saludo.
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Busqueda selectiva por nombre en un DBF
Posted: Fri Oct 07, 2016 01:06 PM
Error: NO existe la variable "nom_cli"


Declare:

FIELD NOM_CLI en el modulo, si realmente ejiste en el .DBF.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Busqueda selectiva por nombre en un DBF
Posted: Fri Oct 07, 2016 01:20 PM
Loren

Tenes que ponerle el Alias de la base
Ej:
Code (fw): Select all Collapse
 ALIAS->NOM_CLI
Saludos,



Adhemar C.
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Busqueda selectiva por nombre en un DBF
Posted: Fri Oct 07, 2016 02:07 PM

Por lo que entiendo la variable nom_cli es una variable de memoria, no es un campo de la DBF.
Asegurate de que la variable es accesible desde el modulo que llama a la funcion, sino declarala como MEMVAR y hacer referencia a ella como M->nom_cli

Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: Busqueda selectiva por nombre en un DBF
Posted: Fri Oct 07, 2016 04:07 PM
Hola,
Debes quitar el ALIAS de la creación del TAG. Ya que ponerlo no debería generar error, pero si te obliga a que siempre la tabla sea abierta con el alias facturas.

Ya que si por ejemplo abres la tabla así:

Code (fw): Select all Collapse
USE TABLA NEW ALIAS OTROALIAS // Al querer indexar va a generar error ya que el alias "factura" no va a existir en esa instancia.


Y si abres la tabla como:

Code (fw): Select all Collapse
USE TABLA NEW ALIAS OTROALIAS // Al poner seleccionar el SET ORDER que corresponde a ese TAG tambien va a generar error.


Siempre es recomendable al momendo de generar un índice no usar ALIAS ni en la apertura ni en la creación del TAG

Code (fw): Select all Collapse
USE TABLA NEW
INDEX ON Campo1 + Campo2 + etc   TAG TuTag TO "TABLA" 
CLOSE


Luego de crear el índice y cerrar la tabla vuelve a abrirla y ahí si pone el alias que quieras.

En fin... prueba quitar el ALIAS en la apertura de la tabla y el alias-> de la creación del tag y luego comenta los resultados.

Saludos,
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Busqueda selectiva por nombre en un DBF
Posted: Sun Oct 09, 2016 07:37 AM

Cuando he obtenido este tipo de error casi siempre ha coincidido con un error al crear el fichero temporal (falta de espacio, pérdida de conexión en red, fichero existente, etc..) Comprueba cuando obtengas el error si se conseguido crear el índice temporal.

Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 479
Joined: Fri Feb 16, 2007 10:29 AM
Re: Busqueda selectiva por nombre en un DBF
Posted: Tue Oct 11, 2016 07:08 PM
compañeros, buenas noches:

- Quité el ALIAS de la creación del TAG
- nom_cli es una variable de memoria que incluso la declaro como PUBLICA y la variable es accesible desde el modulo que llama a la funcion
- Cuando genera el error es imposible comprobar si genera el indice temporal porque siempre que genera el error lo hace desde los equipos del cliente. Nunca desde el mío, a pesar de las mil pruebas que hago. El error es aleatorio y nunca es fijo.

Creo que solución pasa por cambiar la forma de indexar y el entorno de RED local, aunque el indice lo genera en el PC local (NO en el servidor).

Code (fw): Select all Collapse
index on nombre tag &(camino+"tempofac") to &(camino+"tempofac") ADDITIVE for upper(alltrim(nom_cli)) $ upper(nombre)


Sigo sin solución.
Saludos.
LORENZO.
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: Busqueda selectiva por nombre en un DBF
Posted: Thu Oct 13, 2016 02:55 PM

Otro tip...
Teniendo en cuenta que es un índice temporal, podrías antes de generar tu índice asegurarte que no existe ya índice con ese nombre, ya que en caso de existir, lo que estás haciendo va a agregar el TAG al índice existente.
Podrías antes de generar el índice, agregar un FErase( camino+"tempofac" ) así en caso de existir lo borra. Y el que tu creas luego es otro CDX nuevo.
Saludos,

Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda

Continue the discussion