Главная страница
    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.05 c
2-1184823592
zsergey
2007-07-19 09:39
2007.08.19
Возможности Rave Reports


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


15-1184947203
ProgRAMmer Dimonych
2007-07-20 20:00
2007.08.19
Работодатели жгут "нипадеццки"


15-1185232100
Kostafey
2007-07-24 03:08
2007.08.19
С днем рождения ! 24 июля


15-1184677566
Kerk
2007-07-17 17:06
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский