PDA

Просмотр полной версии : Разбитие на страницы


Dmitry P.
23.01.2002, 19:55
Привет!
Я работаю с ASP и MSSQL
Мне надо, чтобы кокда я делаю выборку из базы, на странице можно было вибирать количество записей на странице, ну там 10, 15, 50
Как это сделать?

Crazy
23.01.2002, 20:07
Простейший способ:

1. Строишь выборку, которая возвращает только первичные ключи . Загружаешь ее целиком.

2. Находишь в списке ключей нужный кусок из N записей и выполняешь запрос, который извлекает эти N записей по явно заданным первичным ключам.

Типа такого:

1. select customerID from customers where city="Moscow"

2. select * from customers where customerID in (103423, 2342, 2343, 6456, 2645, 3554 )

Dmitry P.
23.01.2002, 22:45
Но у меня 7000 строк в базе!
Представь сколько такая база будет грузиться по модему!!!
Каждая строка по 16 полей и запрос я делаю не по 1 параметру, а по 12!!!!!

Что мне нужно сделать в данном случае?

Сформировать отдельный запрос и по этому запрсу формировать ключевые поля?

http://monitor.kippk.kolomna.ru

рользователь: user
пароль: gjkmpjdfntkm (пользователь) - только латинскими как на примере!!!

evalex
24.01.2002, 01:06
та же проблемма, а нормального решения так и не нашёл

Gossip
24.01.2002, 10:50
Как я понял, тебе надо, например тут:
http://monitor.kippk.kolomna.ru/selected/select_cat_id.asp?id={18080A49-3180-41EE-B664-37EC424DB05C}
Выводить по 10,15,20 записей на страницу?

Dmitry P.
24.01.2002, 11:10
Да! Да!

Если не трудно, то ответьте пожалуйста!!!

Или ссылочки по теме дайте!!!

Заранее спасибо!

Crazy
24.01.2002, 11:30
Оригинал написал(а) Dmitry P.
Что мне нужно сделать в данном случае?


Медитировать над текстом моего предыдущего письма. Там все написано.

Gossip
24.01.2002, 12:01
предлагаю на выбор два способа разбивать выборку постранично:

1. Используя RecordSet
2. Используя GetRows

Первый удобнее, но сервер грузит..
Второй работает быстрее, но нельзя обратится к полю по имени

evalex
24.01.2002, 17:23
2Crazy - ne nujno meditirovat' - eto ne samiy luchshiy sposob.
Da ya mogu dobavit' pervichniy kluchik(etche i sdlat' ego uporyadochenim po odnomu) i zatem igrat'sya s zapsosami tipa:

SELECT TOP intPagesToGet * FROM customers where (customerId BETWEEN lastID AND lastID+intPagesToGet)

no ne vsegda mozhno kluchi dobavlyat'...(db u menya chuzhaya ne mogu ya ee menyat')

Ispol'zuya RecordSet? v smisle .AbsolutePage??? - performance suicide

GetRows i zatem brat' kuski arraya po chastyam? ne proboval... no somnevaus' chto budet bistree...

Crazy
24.01.2002, 17:32
Оригинал написал(а) evalex
2Crazy - ne nujno meditirovat' - eto ne samiy luchshiy sposob.

Никто и не просил лучший. Но он гарантированно работающий.


SELECT TOP intPagesToGet * FROM customers where (customerId BETWEEN lastID AND lastID+intPagesToGet)


Только в простейших случаях. Даже элементарное условие в where убивает эту идею напрочь.

Gossip
24.01.2002, 19:59
Оригинал написал(а) evalex
GetRows i zatem brat' kuski arraya po chastyam? ne proboval... no somnevaus' chto budet bistree...

Быстрее и намного, чем .AbsolutePage

findman
30.01.2002, 20:35
Dmitry P, используйте метод Move() и свойство RecordCount.
Это проще всего, хотя и будет тянуть все записи в рекордсет.
Собственно будет работать как и с AbsolutePage, только возни с кодом на мой взгляд меньше.

Написать попробуйте сами, там нет ничего сложного. Если найду у себя готовый пример, то кину. Писать его простите заново, лень.

Для того что бы спихнуть в рекордсет только записи на конкретной странице придется написать хранимую процедуру на SQL сервере с курсором внутри. Будет ли это работать быстрее возможно, но не на много.

Crazy
30.01.2002, 22:31
Оригинал написал(а) findman
Будет ли это работать быстрее возможно, но не на много.

Это будет быстрее. И намного. Но только при прямых руках. :)