FoxPro/Visual FoxPro - Error comando SEEK

   
Vista:

Error comando SEEK

Publicado por ANA GABRIELA  (5 intervenciones) el 16/08/2010 22:58:19
Hola atodos en el foro espero me puedan ayudar tengo el sig. problema

En una tabla he creado un index

STR(certificado,8,0)+STR(ot,6,0)+idecam

hago mi busqueda de la sig manera

SEEK alltrim(STR(thisformset.mineragrafia.pageframe1.page1.txtCertificado.Value ))+ALLTRIM(STR(thisformset.mineragrafia.pageframe1.page1.txtot.Value))+ALLTRIM(thisformset.mineragrafia.pageframe1.page1.txtidecam.Value)


pero me marca este error
# table has no index order set

nos e si mi sintaxis este mal espero que alguien me pueda ayudar .
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error comando SEEK

Publicado por zurcaled (22 intervenciones) el 16/08/2010 23:23:19
Prueba con el thisform nada mas. o en todo caso tambien al darle str a tus textos tambien dale con ",8,0". La verdad veo bien la sintaxis o bueno a mi me funciona
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error comando SEEK

Publicado por ana gabriela  (5 intervenciones) el 16/08/2010 23:41:19
pero al consultar la ayuda sobre el error me dice esto

The records in the table have no order.

An index for the table file was not selected when an UPDATE command using the RANDOM clause was encountered.
Select an index for the table file.

A FIND or SEEK was attempted against a table with no index ordering.
Use SET ORDER TO to specify an index order.

SET RELATION was issued with a non-numeric expression.
Provide a numeric expression.

pero yo tengo una duda si mis campos que son numericos al crear un indice los paso a string pero se supone que es solo el indice a los campos no los cambio de formato, y al hacer la busqueda con el seek me hace la busqueda al index o a los campos porque si es a los campos no deveria convertir a string.
y ya probe tambien poniendo los valores 8, 0 y me manda el mismo error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio

Error comando SEEK

Publicado por Mauricio (1368 intervenciones) el 17/08/2010 00:41:28
Sucede que me parece que has creado el indice pero en el INIT o donde abres la tabla debes decirle que indice usara, ejemplo:
* Se ha creado un indice llamado certificado
Luego cuando abres la tabla debes decirle el indice que vas a usar:
USE mi_tabla IN 0 ORDER certificado
Asi ya no te dara error de:
# table has no index order set
Prueba y lo comentas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error comando SEEK

Publicado por anagabriela (5 intervenciones) el 17/08/2010 19:30:53
Hola mauricio he probado de la manera que me dices utilizando use
pero al correr la aplicacion me marca error me dice "file is in use"

probe de esta manera

SELECT petrografia1
SET ORDER TO 1 && STR(CERTIFICADO,8,0)+STR(OT,6,0)+IDECAM

SEEK alltrim(STR(thisformset.mineragrafia.pageframe1.page1.txtCertificado.Value,8,0 ))+ALLTRIM(STR(thisformset.mineragrafia.pageframe1.page1.txtot.Value,6,0))+ALLTRIM(thisformset.mineragrafia.pageframe1.page1.txtidecam.Value)
WAIT WINDOW "llego despues del seek"

if !found()
SET ORDER TO 1
Select petrografia
tableupdate()

pero me marca un error me dice "fuction requires row or table buffering mode"
y me dice que es en la linea que tengo update()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio

Error comando SEEK

Publicado por Mauricio (1368 intervenciones) el 17/08/2010 21:57:08
file is in use, este error te dice que intentas abrir un archivo que ya esta abierto, revisa bien, luego comentas.....
Prueba esto y verificalo con los datos en tu tabla:
? alltrim(STR(thisformset.mineragrafia.pageframe1.page1.txtCertificado.Value,8,0 ))
*
? ALLTRIM(STR(thisformset.mineragrafia.pageframe1.page1.txtot.Value,6,0))
*
? ALLTRIM(thisformset.mineragrafia.pageframe1.page1.txtidecam.Value)
Verifica esto tambien:
wait wind 'valor de indice ' + alltrim(STR(thisformset.mineragrafia.pageframe1.page1.txtCertificado.Value,8,0 ))+ALLTRIM(STR(thisformset.mineragrafia.pageframe1.page1.txtot.Value,6,0))+ALLTRIM(thisformset.mineragrafia.pageframe1.page1.txtidecam.Value)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error comando SEEK

Publicado por xx (378 intervenciones) el 17/08/2010 16:42:49
Bueno primero el error que te marca es que la tabla no tiene asociado o activo ningun orden o indice especifico, esto puede deberse a muchas cosas quizas creas el indice y luego lo cierras en otro evento o metodo con CLOSE INDEX, quizas el orden es desactivado en algun metodo u evento con SET ORDER TO 0 o quizas la tabla en la que pretendes buscar no este seleccionada en ese momento o sea esta en otro area de trabajo, si pegas tu codigo quizas podriamos encontrarte el problema.

Cuando tu ordenas una tabla con campos numericos ej:
STR(certificado,8,0)+STR(ot,6,0)+idecam, se crea un indice un indice es como una tabla en la que tiene el campo y al lado el registro al que apunta.
suponiendo que certificado=4, ot=5,idecam="006" la clave seria:
" 4 5006" y esto quiere decir que para que encuentre este registro debes hacer un
SEEK( " 4 5006" ) de lo contrario nunca lo encontrara.

espero haber ayudado!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error comando SEEK

Publicado por ana gabriela  (5 intervenciones) el 17/08/2010 21:17:26
mi codigo es el siguiente

SELECT petrografia1
SET ORDER TO 1 && STR(CERTIFICADO,8,0)+STR(OT,6,0)+IDECAM
SEEK alltrim(STR(thisformset.mineragrafia.pageframe1.page1.txtCertificado.Value))+ALLTRIM(STR(thisformset.mineragrafia.pageframe1.page1.txtot.Value))+ALLTRIM(thisformset.mineragrafia.pageframe1.page1.txtidecam.Value)
WAIT WINDOW "llego despues del seek"
if !found()
WAIT WINDOW "no encontro registro en petrografia lo va a crear "
SET ORDER TO 1
Select petrografia
tableupdate()
ELSE
IF FOUND()and wband=0
SET ORDER TO 1
SELECT petrografia
WAIT WINDOW "si encontro registro en petrografia y lo va a actualizar"
TABLEUPDATE()
ELSE
WAIT WINDOW "El No. de certificado ya fue dado de alta dar de alta otro"
ENDIF
ENDIF

al perecer no me esta haciendo la busqueda porque estoy probando con u n registro que ya existe y tengo como resultado el mensaje de que no encuentra registro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error comando SEEK

Publicado por xx (378 intervenciones) el 18/08/2010 15:10:18
Creo que aca esta el problema:

****SELECT petrografia1
****SET ORDER TO 1 && STR(CERTIFICADO,8,0)+STR(OT,6,0)+IDECAM
*******************************************************************
SEEK alltrim(STR(thisformset.mineragrafia.pageframe1.page1.txtCertificado.Value))+ALLTRIM(STR(thisformset.mineragrafia.pageframe1.page1.txtot.Value))+ALLTRIM(thisformset.mineragrafia.pageframe1.page1.txtidecam.Value)
***************************************************************

reemplazalo por este:
SEEK alltrim(STR(thisformset.mineragrafia.pageframe1.page1.txtCertificado.Value,8,0))+ALLTRIM(STR(thisformset.mineragrafia.pageframe1.page1.txtot.Value,6,0))+... ver mas abajo para lo que sigue aqui;

* observación especial
ALLTRIM(thisformset.mineragrafia.pageframe1.page1.txtidecam.Value)

Te cuento que debes prestar atencion especial a IDECAM, si es un campo por ejemplo de 8 caracteres y la clave que buscas por ejemplo es "0001" debes agregar los espacios a la derecha para que tenga los 8 caracteres ej PADR( "0001", 8 ).

PD: te recomiendo uses esta esta codificacion:
IF SEEK( ... ) &&seek() devuelve .t. si localiza el registro .f. si no!!
...
ELSE
...
ENDIF
* debes respetar los espacios en blanco que generaste en la clave de los indices
*sin FOUND()!!, cualquier cosa vuelve a postear!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error comando SEEK

Publicado por ana gabriela  (5 intervenciones) el 18/08/2010 20:58:49
Hola XX gracias por responder ya solucione el problema te muestro la solucion y cual fue el problema


indice
&& STR(CERTIFICADO,8,0)+STR(OT,6,0)+IDECAM

aqui no le digo que me quiete los espacios solo que mis numeros los comvierta a estring y al idecam tambien no le digo que me rrellene los espacios
entonces al hacer la busqueda lo debo hacer igual sin quitar espacios y si en el indice le digo que los quiete o rrelene los espacios tambien lo tendia que hacer en la busqueda.

busqueda
SEEK (STR(thisformset.mineragrafia.pageframe1.page1.txtcertificado.Value,8,0)+STR(Thisformset.mineragrafia.pageframe1.page1.txtot.Value,6,0)+Thisformset.mineragrafia.pageframe1.page1.txtidecam.Value)


gracias por la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar