Page 1 of 1
PROBLEMA PARA BUSCAR PRIMEROS REGISTROS CON SEEK
Posted: Fri Mar 23, 2007 2:11 pm
by rbecares
Amigos:
Antes de escribir esto les aseguro que hice todas las pruebas posibles, ya que en 17 años de clipper jamas me paso algo parecido y parece que fuera un principiante por esta consulta.
Trabajando con clipper / fivewin / dbfcdx tengo el siguiente problema:
si hago un gotop y un seek a una determinada clave que queda entre los primeros registros de ese orden de clave encuentra el dato y se posiciona bien.
si hago lo mismo con el puntero abajo en la tabla NO LO ENCUENTRA.
si hago lo mismo, con un gotop o con el puntero abajo en la tabla y busco un registro que esta luego de ese grupo inicial de registros, lo encuentra siempre bien.
Al encontrar esto, lo repeti en distintas tablas, indices, etc y pasa lo mismo, tablas grandes y chicas, la clave es una clave normal, compuesta de 4 o 5 campos todos pasados llevados a string, etc, todo normal.
Es decir encuentro que el seek no esta encontrando registros de los primeros en el orden cuando el seek no se hace desde arriba en la tabla.
Todas las cosas posibles ya estan hechas, borrar los indices, regenerarlos, revisar todo, etc.
LA CONSULTA ES SI ALGUNO SABE DE ALGUN PROBLEMA CON ALGUNA VERSION DE LA LIBRERIA DBFCDX Y ME ORIENTA DONDE CONSEGUIR LA QUE FUNCIONA BIEN.
Posted: Fri Mar 23, 2007 8:00 pm
by A&C
Amigo,, yo siempre he esado el seek ,, con un gotop antes,,,, ya q sino no encuentra nada.... q este arriba del puntero de la DBF
La realidad no se si esto sera una anomalia,,, como te digo aprendi a usarlo asi...y considero q es lo correcto de hacer
no se q opinan los demas ???
Posted: Mon Mar 26, 2007 1:01 pm
by rbecares
Gracias, pero si es una anomalía, tiene que haber una libreria DBFCDX que funcione bien, esa es mi búsqueda.
Posted: Tue Mar 27, 2007 6:45 pm
by manuramos
Es la primera véz que escucho esto. Siempre usé SEEK desde cualquier lugar y siempre trabajó perfectamente. Tanto con NTX como ultimamente con CDX.
¿Qué utilizas SEEk o DBSEEK?
¿Qué clave has creado? El problema debe de andar por ahí.
¿Utilizas SOFTSEEK? a lo mejor ese es el problema.
En el ejemplo siguiente, busco el primer registro válido de una base de datos para listarlos (desde cualquier posición de la base de datos):
METHOD ExtremoS() CLASS NEOLIST
LOCAL lASeek := SET(_SET_SOFTSEEK,.T.)
*
IF ::uVal1 = NIL
(::cAlias)->( DbGoTop() )
ELSE
(::cAlias)->( DbSeek(::uVal1,.T.) )
ENDIF
IF (::cAlias) -> (EOF())
::PRIM_REG := 0
::ULTM_REG := 0
RETURN NIL
ENDIF
....
Como verás, si no hay valor de búsqueda (::uVal1) se va al GOTOP sino busca el primer registro ::uVal1 (suele estar al principio.
Nunca me falló.
Posted: Thu Mar 29, 2007 2:00 pm
by Armando Picon
Esa particularidad siempre estuvo en Clipper. Por eso los gurús de Clipper antiguamente aconsejaban que para hacer una búsqueda era necesario hacer un previo gotop(). En dBase esto no ocurría (acuerdense que Clipper fue el compilador del codigo dBase).
Posted: Thu Mar 29, 2007 9:12 pm
by manuramos
Bueno, empecé con el Summer 87, y no recuerdo esa particularidad. A lo mejor es que ya no me acuerdo. Juraría que no. Aunque si recuerdo algo de mover el puntero trás un reindexado o algo así (nunca utilicé ese comando, prefería reconstruir los indices) o tras un filtraje (que tampoco utilizo, demasiado lento).
De hecho, como el DBEDIT() era demasiado cuadriculado, creé mi propio Browse, que estuve utilizando durante años sin problemas de SEEK. Aun hoy utlizo, básicamente, ese mismo motor para mi propio Listbox, y sigue sin fallar. El trozo de código que mostré en mi post anterior forma parte de dicha CLASS.
Pieno que el problema de nuestro amigo está por otro lado, el Softseek quizá. O algún tipo de filtro. Con CDX a lo mejor el AUTOORDER o algo así. O a lo mejor teneis razón y hay que utilizar el GOTOP(), pero no le veo la lógica, ¿porqué para los primeros registros SÍ y para los demás NO? ¿No resulta ilógico y extraño?
Posted: Thu Mar 29, 2007 10:27 pm
by Armando Picon
Tampoco supee a que se debia, en ese entonces y aún ahora me sigo preguntando el porque de lo que aconsejaban.
Posted: Fri Mar 30, 2007 4:53 pm
by rbecares
AMIGOS:
Gracias por preocuparse y contestar. Les hago una pregunta, ¿que sistema de archivos están usando? y ¿como hicieron en caso de algun sql tipo mysql el uso de los comandos? ¿con algun driver de rdd y utilizando comandos xbase o sql embebido?
Esto lo consulto ya que como no tengo transacciones disponibles y los sistemas crecen en datos, tablas, complejidad, creo que aprovecho el momento para iniciar el lento y penoso proceso de cambio de sistema de archivos.
Cualquier consejo u observación son bienvenidos.
Gracias.
Posted: Fri Mar 30, 2007 6:40 pm
by Armando Picon
Hasta el presente sigo utilizando los dbf (no estoy preocupado por la cantidad de registros que pueden caber en las tablas) ni la cantidad de tablas que puedan manejar xHarbour porque no creo que pueda llegar al limite de manejo.
Esto no significa que no estè atento a la posibilidad de utilizar mysql, sql, postgres, etc. sino que hasta el presente no ha sido necesario que los utilice.
Posted: Fri Mar 30, 2007 6:45 pm
by Armando Picon
Me falto indicar que en caso del Clipper 5.3b (última versión que utilice con FW2.0) con el apoyo de la libreria DBFCDX puede manejar hasta 4 billones de registros y creo... que sería muuuy dificil llegar a manejar esa cantidad de datos.
Posted: Sat Mar 31, 2007 12:28 pm
by manuramos
Yo también utilizo el DBF de toda la vida. Un taller aun utiliza un programa mio que le regalé en 1995 sin haber borrado un sólo registro (ordenes de trabajo, albaranes y facturas) con DBF/NTX y sigue contento. Hace poco conseguí el Clipper 5.3b y me pasé a DBF/CDX. Y no lo hice antes porque no me hgizo falta tanta seguridad en los índices.
Posted: Sun Apr 01, 2007 12:43 pm
by rbecares
Manu y Armando:
Mil gracias.
Un abrazo.