Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Случайный отбор


Автор: kovalenko123 2.7.2009, 13:58
Привет всем!!!
база Microsoft Access технология Ado , delphi 
Ребят помогите отобрать случайным образом 40 записей в базе 900 
есть такой код 

Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SELECT TOP 40 Вопросы.Номер, Вопросы.Вопрос, Вопросы.Вар1, Вопросы.Вар2, Вопросы.Вар3, Вопросы.Вар4, Вопросы.Вар5, Вопросы.Img, Вопросы.Прав, Вопросы.Комент, Вопросы.Код');
Query.SQL.Add('FROM Вопросы');
Query.SQL.Add('ORDER BY RND(Rnd)');
Query.Open;

где Rnd это счетчик в таблице 

код рабочий но ужасно медленный может кто нить подскажет какое нибудь другое решение ?

и еще вопрос при работе проги с этим запросом у оперативы она ест 150 метров )) что можно предпринять?  smile 

Автор: Romikgy 2.7.2009, 15:10
может проще сделать выборку только Rnd поля ,
в дельфи выбрать случаныйм образом 40 записей, и послать запрос используя WHERE Rnd=..... и перечислить все 40 rnd ?

Автор: Akella 2.7.2009, 15:38
Цитата(kovalenko123 @  2.7.2009,  13:58 Найти цитируемый пост)
код рабочий но ужасно медленный

а индексы есть?

Добавлено через 43 секунды
Цитата(kovalenko123 @  2.7.2009,  13:58 Найти цитируемый пост)

и еще вопрос при работе проги с этим запросом у оперативы она ест 150 метров )) что можно предпринять?

ну....... нам-то откель знать про архитектуру твоего приложения???

Добавлено через 2 минуты и 26 секунд
Может у тебя НД одновременно открытых дофига, может ты тянешь сразу мульён записей на клиента или записи слишком тяжелые, может у тебя много форм сразу создаётся (создавай по необходимости и сразу уничтожай при ненадобности), может у тебя комонент много очень на формах, а если ещё и юникодная прога....

Автор: Данкинг 2.7.2009, 15:54
Код

for i:=1 to 40 do
 begin
  r:=random(900);
  adotable.recno:=r;
 end;

 smile 
Только ещё добавить проверку, не выпадало ли уже данное число.

Автор: kovalenko123 2.7.2009, 18:56
Akella
Цитата

а индексы есть?

не индексов нет.

Все дело в базе потому как када ставлю на query активе в фальш то прога весит 16 метров как тока труе то все 150  smile 

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

Romikgy
Цитата

может проще сделать выборку только Rnd поля

не может это проще но не подойдет

я думал может есть в скл еще какие нить фичи для этого...

Данкинг
 smile 

Автор: Akella 2.7.2009, 20:33
Цитата(kovalenko123 @  2.7.2009,  13:58 Найти цитируемый пост)
Вопросы.Img, 

Это изображение? Может дело в нём?

Автор: kovalenko123 2.7.2009, 20:40
Akella
Это блоб поле с изображениями... 
Цитата

(Может дело в нём?) 

может быть, но мне ни как не обойтись без них ((

Автор: Akella 3.7.2009, 18:08
А что, сразу все картинки нужно тянуть на клиента? Может можно по одной?

Автор: kovalenko123 4.7.2009, 07:27
Это же по сути запись в базе.

У меня 2 таблици 1 это типа раздел а вторая вопросы к разделу соеденены 1 ко многим

так вот пользователь выбирает сначала раздел потом отвечает на вопросы. поэтому профильтровать 2 таблицу я врялти смогу (чтобы тянуть записи по 1)

А вообше картинки много ресурсов требуют в Microsoft Access ??? 

Автор: Akella 4.7.2009, 13:16
Дело не в акцессе, как ты не поймёшь? Картинка(и) что, места в памяти не занимает?

Автор: kovalenko123 4.7.2009, 16:27
ммм просто разные мысли есть.

Но знаю сто проц что прога занимает 150 метров тока после активации запроса (на соединение 2 таблиц).

В общем идея с фильтрами прокатила у меня теперь в базе тока что что пользователь выбрал остальное все профильтрвываеться.

Автор: kovalenko123 7.7.2009, 07:47
Всем спасибо,  добавил фильтр, прога полетела  smile  и рандом оказался нормальный.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)