Page 1 of 1

Busqueda selectiva por nombre en un DBF

Posted: Fri Oct 07, 2016 11:23 am
by Loren
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: Select all

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.

Re: Busqueda selectiva por nombre en un DBF

Posted: Fri Oct 07, 2016 1:06 pm
by karinha
Error: NO existe la variable "nom_cli"
Declare:

FIELD NOM_CLI en el modulo, si realmente ejiste en el .DBF.

Re: Busqueda selectiva por nombre en un DBF

Posted: Fri Oct 07, 2016 1:20 pm
by acuellar
Loren

Tenes que ponerle el Alias de la base
Ej:

Code: Select all

 ALIAS->NOM_CLI
 

Re: Busqueda selectiva por nombre en un DBF

Posted: Fri Oct 07, 2016 2:07 pm
by cmsoft
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

Re: Busqueda selectiva por nombre en un DBF

Posted: Fri Oct 07, 2016 4:07 pm
by jrestojeda
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: Select all

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: Select all

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: Select all

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,

Re: Busqueda selectiva por nombre en un DBF

Posted: Sun Oct 09, 2016 7:37 am
by AngelSalom
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.

Re: Busqueda selectiva por nombre en un DBF

Posted: Tue Oct 11, 2016 7:08 pm
by Loren
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: Select all

index on nombre tag &(camino+"tempofac") to &(camino+"tempofac") ADDITIVE for upper(alltrim(nom_cli)) $ upper(nombre)
Sigo sin solución.
Saludos.
LORENZO.

Re: Busqueda selectiva por nombre en un DBF

Posted: Thu Oct 13, 2016 2:55 pm
by jrestojeda
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,