Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.082 c
15-1185259056
jack128_
2007-07-24 10:37
2007.08.19
Демки


15-1184349114
ССергей
2007-07-13 21:51
2007.08.19
Гугль и mail.ru


15-1184648259
vajo
2007-07-17 08:57
2007.08.19
DVD-RW перестал читать не DVD диски


5-1160287104
o_serg
2006-10-08 09:58
2007.08.19
Компонент для распаковку/упаковки *.JAR


2-1185427023
Inearthed
2007-07-26 09:17
2007.08.19
Одинаковая обработка разных событий. Как?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский