PDA

Ver la Versión Completa : Indice Secundario en Firebird


barrauda
30-01-2004, 21:41:44
Hola a todo el mundo, estoy necesitando si alguien me puede auxiliar, tengo una tabla con alumnos cuya primary key es nroalum, para una búsqueda blanda que estoy haciendo necesito ordenar a los alumnos por su apellido así que utilizando el Worbench creé en la parte de índice uno llamado "Apellido", en una grilla funciona el ordenar a los alumnos por su apellido pero no así la búsqueda blanda. Lo raro es que en Padarox esto funciona lo mas bien. yo creo tener problemas con el índice que cree por eso si ustedes me pueden orientar como crearlo bien se los agradezco.
Nos vemos y muchas gracias

jachguate
30-01-2004, 22:24:44
NO se a que te referis con una busqueda blanda!, pero independientemente de que haya o no indice, al hacer un Order By, el cursor si estará ordenado por el criterio que le pongas. En terminos prácticos, el indice sirve para optimizar la busqueda y que el motor te devuelva mas rápido el resultado.

Hasta luego.

;)

barrauda
01-02-2004, 02:56:09
Hola, ya que o yo lo llamo Busqueda blanda o es un regionalismo pero lo importante es que tengo una base de datos en firebird, me conecto usando un IBtable, lo que quiero hacer es en una Grilla aparecen los datos de la Base de datos, luego tengo un Edit donde escribo el apellido. cuando comienzo a escribir la primer letra el código que tengo escrito va buscando esa letra, si se va posicionando en algún lugar de la Grilla donde conincida la letra, luego sigue por la siguiente, y así hasta coincidir totalmente en este caso el Apellido. En mi tabla la clave primaria se llama NroAlum y creé otra clave llamada Apellido. En las propiedades IndexFieldName de IBtable le pongo Apellido, me lo ordena por el apellido pero la consulta no anda. Yo he hecho esto muchas veces usando Paradox y me funciona perfectamente pero no se porque motivo no puedo hacerlo andar con Firebird.
agrego el código para lo que llamo Búsqueda Blanda:


if (uppercase(edit1.text)<= uppercase(ibtable1.FieldByName('APELLIDO').value)) then
begin
while not ((uppercase(edit1.text)>= uppercase(ibtable1.FieldByName('APELLIDO').value)) or ibtable1.bof) do
begin
ibtable1.prior;
end;

if (uppercase(edit1.text)> uppercase(ibtable1.FieldByName('APELLIDO').value)) then
ibtable1.Next;
ibtable1.refresh;
end
else
while not ((uppercase(edit1.text)<= uppercase(ibtable1.FieldByName('APELLIDO').value)) or ibtable1.Eof) do
begin
ibtable1.next;
end;
if (uppercase(edit1.text)< uppercase(ibtable1.FieldByName('APELLIDO').value)) then
ibtable1.prior;
ibtable1.refresh;

Muchas gracias por su paciencia.

__cadetill
01-02-2004, 10:20:03
Te aconsejo que te mires la función Locate o FindKey de los Datasets

kinobi
01-02-2004, 13:38:32
Hilo movido desde el foro "InterBase y Firebird".

Hola,

después de ver cómo se desarrollaba el hilo, creo que es un tema a tratar en el foro "Conexión con bases de datos". Como hemos comentado otras veces, los asuntos relacionados con componentes de acceso (incluidos los específicos de InterBase) se tratan en aquel foro. Allá lo mando.

Saludos.