Главная страница
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.025 c
15-1184744504
stone
2007-07-18 11:41
2007.08.19
Мысли вслух или найдено на просторах интернета


15-1184790822
Kerk
2007-07-19 00:33
2007.08.19
Смотрел женский футбол


15-1184845462
db2admin
2007-07-19 15:44
2007.08.19
Помогите составить список литературы пожалуйста, для начинающих


3-1178186695
Slider007
2007-05-03 14:04
2007.08.19
Интерфейс для создания документа


15-1184297566
макк
2007-07-13 07:32
2007.08.19
Как узнать откуда территориально такой-то ай-пи адрес?