Crear Indice combinado

216 views
Skip to first unread message

norberto.ma...@gmail.com

unread,
Jul 15, 2020, 1:54:43 PM7/15/20
to Comunidad de Visual Foxpro en Español
Hola Grupo, como siempre apelando a vuestra experiencia. Tengo una tabla donde tengo un campo numerico de 3 (nro_deposito) y otro campo de 20 caracteres (codigo_art), dicha tabla la voy a usar para saber el stock que dispongo de cada articulo y en cada depósito. Siempre hablando de tabla nativa (DBF). en el campo nro_deposito puede haber valores como 1, 20, etc. y en el campo codigo_art el ancho ó len de los mismos pueden ser variables (RO001, XCT002T, etc). Yo hice el indice siguiente: STR(NRO_DEPOSITO,3,0)+CODIGO_ART  y noto que al hacer un seek no lo encuentra. Pregunta como me recomiendan hacer el indice, ya que lo necesito para hacer un SEEK. Gracias por vuestra atención

Norberto Alvarez
Buenos Aires, Argentina

Hendell Mora

unread,
Jul 15, 2020, 2:11:20 PM7/15/20
to publice...@googlegroups.com
Alltrim(STR(NRO_DEPOSITO)) +alltrim(CODIGO_ART) 

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/fee07d9b-be96-4bc0-8fd6-a982ed599d0dn%40googlegroups.com.

Hendell Mora

unread,
Jul 15, 2020, 2:15:27 PM7/15/20
to publice...@googlegroups.com
Seek 20RO001

Zarlu

unread,
Jul 15, 2020, 2:24:36 PM7/15/20
to Comunidad de Visual Foxpro en Español

El dato a buscar debe ser de la misma estructura del índice..trataré de explicarme...
lcDeposito=25
lcCodigo="RO001"

Set order to elindice
Seek STR(lcDeposito,3,0)+lcCodigo

Suerte
zarlu
Chetumal, Quintana Roo, México


norberto.ma...@gmail.com

unread,
Jul 15, 2020, 2:38:43 PM7/15/20
to Comunidad de Visual Foxpro en Español
Gracias, Hendel , probare y te cuento.
Zarlu, tiene la misma estructura y sin embargo no lo encuentra, por ello lo subi, para saber si estaba haciendo algo mal.
Gracias

Norberto Alvarez
Buenos Aires, Argentina


Zarlu

unread,
Jul 15, 2020, 2:41:47 PM7/15/20
to Comunidad de Visual Foxpro en Español

Podrías mostrar el código de busqueda?

Hendell Mora

unread,
Jul 15, 2020, 2:59:25 PM7/15/20
to publice...@googlegroups.com
INDEX ON  ALLTRIM(STR( NRO_DEPOSITO))+ALLTRIM( CODIGO_ART)  TO  BUSCAR

SELECT TABLA
SET ORDER TO BUSCAR
SEEK "20RO001"


--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Eduardo Bustamante

unread,
Jul 15, 2020, 3:59:40 PM7/15/20
to Comunidad de Visual Foxpro en Español

Personalmente, durante muchos años, utilicé ese tipo de índices y búsquedas con Seek, hasta que decidí cambiarlas y no volví a tener ese tipo de problemas.
Ahora evito los índices compuestos, hago uno por cada campo (columna) y realizo la búsqueda con consultas Select-Sql.

Select Existencia from (lcTabla) where NRO_DEPOSITO=12 and CODIGO_ART="RO001" INTO CURSOR TMPPRUEBA

Nota: La solución definitiva es migrar a un gestor tipo MYSQL, pero se que no es fácil ni económico. A mi me tomó 4 años.

Juan Carlos Bustillo Lopez

unread,
Jul 15, 2020, 4:40:34 PM7/15/20
to Comunidad de Visual Foxpro en Español
Estimado colega añadir ALLTRIM al campo carácter tanto al crear el índice como en la búsqueda seek

Listo.

Hugo C.

unread,
Jul 15, 2020, 9:51:45 PM7/15/20
to Comunidad de Visual Foxpro en Español
intenta algo como esto ,
  
 lnDeposito = 20
 lcCodigo = "RO001" 
SEEK ALLTRIM(STR( m_deposito)) + ALLTRIM(m_codigo) 


Saludos



El miércoles, 15 de julio de 2020, 12:59:25 (UTC-6), Hendell Mora escribió:
INDEX ON  ALLTRIM(STR( NRO_DEPOSITO))+ALLTRIM( CODIGO_ART)  TO  BUSCAR

SELECT TABLA
SET ORDER TO BUSCAR
SEEK "20RO001"


El mié., 15 jul. 2020 a las 12:41, Zarlu (<not...@prodigy.net.mx>) escribió:

Podrías mostrar el código de busqueda?

zarlu
Chetumal, Quintana Roo, México

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

Hugo C.

unread,
Jul 15, 2020, 9:53:49 PM7/15/20
to Comunidad de Visual Foxpro en Español
ups
  
 lnDeposito = 20
 lcCodigo = "RO001" 
SEEK ALLTRIM(STR(  lnDeposito )) + ALLTRIM(lcCodigo ) 


Saludos

Jose Antonio Blasco

unread,
Jul 16, 2020, 3:22:31 AM7/16/20
to Comunidad de Visual Foxpro en Español
Pues yo os voy a llevar la contraria.
Tan al crear el índice, como al hacer las búsquedas las longitudes de cada dato han de ser siempre las mismas.
es decir, si el nº de deposito admite hasta 3 digitos y el codigo de artículo hasta 10, yo haría:

 lnDeposito = 20
 lcCodigo = "RO001" 
SEEK STR(  lnDeposito,3 ) +padr(lcCodigo,10,' ') 

y el índice tambien debe montarse igual.
  
Un saludo.
Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2



Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/3dc0f7bd-5fc8-4a97-aad3-8ebbcbf7af96o%40googlegroups.com.

Carlos Miguel FARIAS

unread,
Jul 16, 2020, 8:11:22 AM7/16/20
to Grupo Fox
Iba a plantear lo mismo, en VFP, si creas un índice compuesto, debe usarse la misma fórmula tanto en la creación del índice como al componer una clave para búsqueda. Las claves compuestas en fox, son indefectiblemente cadenas de texto y cuando buscas una clave esta debe ser igual a la que está en el índice. Por lo que hacer ALLTRIM o similar sobre los valores puede acarrear problemas, porque una clave 111RVV, va a estar antes que 2RVV si hacemos alltrim. Osea que además el índice deja de tener un orden previsible.
Además, es horrible ver un comando SEEK en código (en consola fox puede ser) pero en el código de programa se remonta a dbase II.
Es increíble que a 13 años de que el lenguaje no tiene nuevas funcionalidades, se siga usando algo con 30 años de antigüedad. Lo mismo que usar APPEND BLANK.
Saludos: Miguel

Reply all
Reply to author
Forward
0 new messages