Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
ВнизСлучайная запись из БД Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.048 c