¿Cómo puedo realizar una consulta utilizando el seek?

Tengo una base de datos con un campo de tipo carácter lamado idalumno y oto campo de tipo numérico llamado grado..
Indexe la base con los dos campos.. Pero quiero hacer un consulta utilizando el seek de tal forma que me permita buscarlo por el idalumno y el grado al mismo tiempo... Como le puedo hacer...
Gracias...

5 Respuestas

Respuesta
1
Lo que tienes que hacer es crear un indice con ambos campos, por ejemplo:
Index on idalumno+str(grado, 2) to indicecompuesto
* -- suponiendo que el campo "grado" tiene un ancho de dos decimales
Luego, para buscar en la tabla, lees los datos a buscar en dos variables del mismo tipo que los campos, por ejemplo:
M_idalumno=space(10)
M_grado=0
luego de leer los valores, creas una variable de la siguiente forma:
M_llave=M_idalumno+str(m_grado,2)
seek M_llave
Ojalá te sea de utilidad, si tienes algún problema me cuentas. Suerte !
Respuesta
1
Por lo que veo lo que estas necesitando es crear una tabla que por lo que me decís ya lo hiciste y tendrías que crear un indice estructural llamado por ejemplo "indice1" en el que ordenas la base por "alumno+alltrim(str(grado))", después cuando haces la búsqueda pones por ejemplo "use tabla1" (que es el nombre de tu base), "set order to indice1" (que es el nombre del indice que creamos) y ahora si tienes tu nombre de alumno en una variable a y el grabo en una variable g solo resta hacer "seek a+alltrim(str(g))" pero si lo que realmente estas queriendo buscar es por ejemplo los alumnos pero ordenados por su respectivo grado el indice tendría que ser al revez o sea seria "alltrim(str(grado))+alumno", bueno espero que te sirva, cualquier cosa preguntame nuevamente que si esta a mi alcance con gusto te lo responderé. Saludos. Marcelo
Respuesta
1
personalmente nunca usé el seek. Cuando necesito recuperar información uso un SELECT ... INTO Cursor XX. Vos podrías, por ej., hacer un SELECT * FROM Alumnos WHERE idalumno = ... AND grado = ... INTO CURSOR Alumno
De esta forma te quedan todos los datos en el cursor temporal "Alumno", al que le podes consultar cualquier campo: Alumno. Nombre, Alumno. Apellido, etc.
Si querés actualizar datos usá el UPDATE:
UPDATE Alumnos SET campox = nuevovalor, campoy = nuevo VALOR WHERE idalumno = ... AND grado = ...
Estas sentencias SQL son bastante rápidas, especialmente si los campos están indexados.
Con respecto a un índice compuesto lo podes crear usando por ej. la expresión para el índice: idalumno+ALLTRIM(STR(curso)), y si al índice le das el nombre, por ej., IDALYCUR, podes abrir la tabla con USE Alumnos INDEX IDALYCUR. Creo que el seek también te deja usar el índice que quieras (buscá la ayuda del seek).
Espero haberte ayudado.
Suerte,
Diego.
Respuesta
1
Anexo un pequeño Bloque de código, espero que te sirva.
****************************
Ngrado = Strtran(Str(Grado,3)," ","0")
* Esta Linea Transformara el Grado de un Valor Numerico a Caracter y en los Espacios en Blanco les Agregara el valor cero(0)
Use Alumno Index Alumno
Seek(Idalumno+Ngrado)
If Found()
Wait Window "El Alumno Existe"
Else
Wait Window "El Alumno NO EXISTE"
Endif
******************************
Respuesta
1
Por lo que logro interpretar estas trabajando en fox o foxpro,, o algo parecido. Para lograr hacer esto deberías deberías generar el indice convirtiendo el campo numérico a carácter. Para hacer el seek deberías sumar ambos campos o sea
seek idalumno+str(grado)
Jugando con esto podrás resolver tu problema, esto es algo normal en el trabajo con indices

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas