Busqueda selectiva por nombre en un DBF

Post Reply
Loren
Posts: 458
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Busqueda selectiva por nombre en un DBF

Post 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.
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Busqueda selectiva por nombre en un DBF

Post by karinha »

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
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Busqueda selectiva por nombre en un DBF

Post by acuellar »

Loren

Tenes que ponerle el Alias de la base
Ej:

Code: Select all

 ALIAS->NOM_CLI
 
Saludos,

Adhemar C.
User avatar
cmsoft
Posts: 653
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Busqueda selectiva por nombre en un DBF

Post 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
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Busqueda selectiva por nombre en un DBF

Post 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,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
AngelSalom
Posts: 664
Joined: Fri Oct 07, 2005 7:38 am
Location: Vinaros (Castellón ) - España
Contact:

Re: Busqueda selectiva por nombre en un DBF

Post 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.
Angel Salom
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
Loren
Posts: 458
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Re: Busqueda selectiva por nombre en un DBF

Post 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.
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Busqueda selectiva por nombre en un DBF

Post 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,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
Post Reply