Moverme por los registros con Proc. Almac

Tengo una inquietud y espero puedan ayudarme..
Trabajo con una Base de datos Creada en Sql Server 7 y las pantallas los creo en Visual Basic 6, en donde estoy implementándolo con Procedimientos almacenados. Pero la tabla principal, que es la de Historias Clínicas (HISCLI) posee 98000 registros y que tiende a incrementarse considerablemente con el tiempo, los cuales si paso todos los registros a un Datagrid, como saben ustedes, ralentiza el sistema, por lo que opte por pasar de 100 a 100 registros, esto es fácil para los 100 primeros registros (con un select top 100 * from tabla) pero mi problema surge al querer desplazarme hacia el registro 101 y de ahí contar 100 registros más. Lo que veo es posible desde Visual Basic (registro.move (101) ) pero lo que deseo hacer es que esta operación se realize en el servidor (con Procedimiento Almacenado) y que me envíe de 100 a 100 registros.
Espero puedan ayudarme, y todo tipo de ayuda será bien venido..

3 respuestas

Respuesta
1
Fredy:
Te pongo un ejemplo de un sp que tiene el concepto de lo que quieres lo demás manéjalo en vb con variables.
CREATE PROCEDURE registros
@@autor varchar(40) = null ,
@@autors varchar(40) OUTPUT
AS
SELECT top 5 *, au_lname=@@autors
FROM authors
WHERE au_lname > @@autor
Exec registros 'bz',''
Drop proc registros
Lamento la demora estuve de vacaciones.
Jorge Reyes
Guatemala.
Respuesta
1
Lamento contestar tan tarde.
Podrías probar dos cosa:
1. Y suponiendo que tu tabla tiene un campo indice autonumérico podrías devolver los registro de la siguiente forma :
Suponemos que el campo indice se llama IDTABLA, y tu stored procedure recibe un parámetro más a parte de los que lleva que seria el numero de página a lista, es decir, la página 1 serán los 100 primeros, la página 2 serian del 101 al 200 y así sucesivamente y otro parámetro que seria el numero de registros a devolver (numreg), si quieres de 10 en 10, de 100 en 100
Create Procedure Pruebas_Paginacion
@pagina numeric, - numerero de página
@MaxRow numeric - numero de registros a devolver
As
Declare @MinRow numeric
Declare @Tope numeric
Select @Tope = @MaxRow
Select @MaxRow = @MaxRow * @Pagina
Select @MinRow = (@MaxRow - @Tope)
Select * From Tabla
Where IDTABLA, Between @MinRow and @MaxRow
order by IDTABLA,
Esto te devolvería entre el numero mínimo y máximo, es decir, si llamas a la página uno serias del 1 al 10, página 2 del 11 al 20 y así sucesivamente.
2. Si no tienes el campo autonumérico o quieres hacer la consulta con JOIN entre diferentes tablas, puedes hacer esto mismo pero primo deberás crear un select normal de la tabla o tablas e insértalo en una tabla temporal después aplicas el SP de arriba a la tabla temporal.
Respuesta
La forma de solucionar el problema que nosotros usamos (en Delphi) no es cargar de 100 en 100, sino cargar solo los indices (por ejemplo código de empresa, código de historia) en un dataset y después ir rellenando los datos de cada registro según nos haga falta, normalmente durante el repintado de la rejilla que usemos.
Suerte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas