Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.19;
Скачать: CL | DM;

Вниз

Случайная запись из БД   Найти похожие ветки 

 
vasIZmax ©   (2007-07-23 22:13) [0]

Подскажите, может есть способ реализовать по другому следующую задачу.
В общем есть БД(Paradox), состоящая из полей ID (счетчик), Author, Book, Theme,Gift(Boolean).
И необходимо выбирать случайную запись из таблицы. После выбора записи проверить что записано в Gift:
если False, то значит выполняем дальнейшие действия, если же True - то берем следующую случайгую запись.


r:=0;
repeat
form2.Table1.First;
form2.Table1.MoveBy(Random(form2.Table1.RecordCount));
if form2.Table1.FieldValues["Gift"]=false then
begin
Edit1.Text := form2.Table1.FieldValues["Book"];
label1.Caption:="ID: "+inttostr(form2.Table1.FieldValues["ID"])+";     Author: "+form2.Table1.FieldValues["Author"];
r:=1;
end;
until r=1
form2.table1.Edit;
form2.Table1.Fields[4].AsBoolean:=true;
form2.table1.Post;;


Приведенный код это все выполняет вот только медленно работает(((.
Как можно увеличить скорость?
Я уже думал может быть выбранные (т.е. записи ставшие уже True) переносить в другую БД?
Ну, как выход, но заморачиваться не хочется с этим, имхо, должен быть другой способ, или же нет?


 
Anatoly Podgoretsky ©   (2007-07-23 22:34) [1]

> vasIZmax  (23.07.2007 22:13:00)  [0]

Используй TQuery и запрос с ограничением по true/false


 
Loginov Dmitry ©   (2007-07-24 00:15) [2]

> form2.Table1.FieldValues["Gift"]=


> form2.Table1.FieldValues["Book"];


Будь поаккуратнее с такими вещами. В левой части оператора присвоения использовать это можно, а вот в правой - только если гарантируешь, что "Gift" и "Book" всегда заполнены. С Парадоксом такой гарантии быть не может.


 
vasIZmax ©   (2007-07-24 00:36) [3]


> Anatoly Podgoretsky ©   (23.07.07 22:34) [1]

Сделал так

form2.Query1.First;
form2.Query1.MoveBy(Random(form2.Query1.RecordCount));
edit1.Text:=form2.Query1.FieldValues["Book"];
label1.Caption:="ID: "+inttostr(form2.Query1.FieldValues["ID"])+";     Author: "+form2.Query1.FieldValues["Author"];
form2.table1.Edit;
form2.Table1.Fields[4].AsBoolean:=true;
form2.table1.Post;


и в SQL прописал
SELECT ID, Author, Theme, Book, gift FROM BookGifts
WHERE gift=false


не могу сообразить как обновить Query1? Т.е. после выполнения этого кода в table1 записывается true в нужное место, а вот Query1 отображается как будто в записи по-прежнему false. Как это обойти?


> Loginov Dmitry ©   (24.07.07 00:15) [2]

А если у меня все поля - Required Field? Проблем не должно же возникнуть, правильно? И после добавления записи в gift автоматом записывается false.


 
Loginov Dmitry ©   (2007-07-24 00:41) [4]

Можно открыть SQL Explorer и сбросить что угодно в NULL. Тут Required Field бессильно :)
Ну да ладно, мое дело - обозначить возможность возникновения описанной ситуации.


 
vasIZmax ©   (2007-07-24 00:54) [5]

Вопрос об обновлении снимается:)
Заменил
form2.table1.Edit;
form2.Table1.Fields[4].AsBoolean:=true;
form2.table1.Post;

на
form2.Query1.Edit;
form2.Query1.Fields[4].AsBoolean:=true;
form2.Query1.Post;

и установил requestlive=true;
но корректно ли это?
сюрпризов-то не хочется потом


> Loginov Dmitry ©   (24.07.07 00:41) [4]

ок, буду иметь ввиду:). спс.


 
Anatoly Podgoretsky ©   (2007-07-24 01:10) [6]

> vasIZmax  (24.07.2007 00:54:05)  [5]

Корректно и правильно, только при многопользовательской работе могут быть проблемы.



Страницы: 1 вся ветка

Текущий архив: 2007.08.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
15-1184767312
Kolan
2007-07-18 18:01
2007.08.19
Крег Ларман. А есть ли Case средстава для описаного в его книге?


2-1185358225
ari_9
2007-07-25 14:10
2007.08.19
FIBPlus - как предотвратить действие (создать исключение) ?


2-1185113973
Гость_1
2007-07-22 18:19
2007.08.19
проблема с числами или у меня :)


15-1184743148
Александр Иванов
2007-07-18 11:19
2007.08.19
Дизайн страниц SharePoint


2-1185390951
Мануха
2007-07-25 23:15
2007.08.19
желтая сетка в StringGrid