Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2012, 21:11   #1
kelod
Пользователь
 
Регистрация: 05.07.2010
Сообщений: 33
По умолчанию поиск в поле

есть подключение к базе через ADOConnection, в базу отправляется через ADOQuery sql запрос на выборку, всё замечательно...
получаю массив из значений, по которому можно перемещаться с помощью pred и next
а как быть если мне нужно выбрать случайное значение из поля? может можно как нибудь запрос организовать, который случайным образом будет выбирать запись в поле?
kelod вне форума Ответить с цитированием
Старый 19.09.2012, 21:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну раз уж ты используешь для навигации методы компонента, почему бы тебе не перемещаться с помошью метода MoveBy, где указывается позиция относительно текущей? Становись в начало и рандомом перемещайся на случайную запись )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2012, 01:47   #3
kelod
Пользователь
 
Регистрация: 05.07.2010
Сообщений: 33
По умолчанию

я тут подумал и понял что могу избавиться запроса на всю таблицу, мне всего навсего нужно получить из таблицы в несколько сот(может будет и больше) записей одну и получить нужно случайным образом, сразу говорю записи упорядочить не почему и id присвоить тоже не выход, ещё проблема в том что база в access (((((
kelod вне форума Ответить с цитированием
Старый 20.09.2012, 05:45   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
ещё проблема в том что база в access
И в чем же проблема?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 20.09.2012, 07:37   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
мне всего навсего нужно получить из таблицы в несколько сот
Это не много. Можно конечно и без запроса.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2012, 10:14   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Код:
  DataSet.First;
  DataSet.MoveBy(Random(DataSet.RecordCount));
_SERGEYX_ вне форума Ответить с цитированием
Старый 20.09.2012, 12:47   #7
kelod
Пользователь
 
Регистрация: 05.07.2010
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
И в чем же проблема?
ну например в том что в аксессе limit не работает

Цитата:
Сообщение от Stilet
Это не много. Можно конечно и без запроса.
это пока не много, а что делать когда записей станет миллионы? переписывать всё?

Цитата:
Сообщение от _SERGEYX_
DataSet.First;
DataSet.MoveBy(Random(DataSet.Recor dCount));
я ущёл от этого решения, я же написал выше
kelod вне форума Ответить с цитированием
Старый 20.09.2012, 13:53   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
записи упорядочить не почему и id присвоить тоже не выход
Без id или аналога, к которому можно привязаться, как запросом собираетесь выдергивать записи? По какому условию? Если уж выдернули и больше одной, то 1-ую можно взять используя TOP
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.09.2012, 15:06   #9
kelod
Пользователь
 
Регистрация: 05.07.2010
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Без id или аналога, к которому можно привязаться, как запросом собираетесь выдергивать записи? По какому условию? Если уж выдернули и больше одной, то 1-ую можно взять используя TOP
без id записи выдёргиваются элементарно и причём даже случайные, например что бы получить в mysql случайную запись совершенно не обязательно знать id нужно сделать всего два запроса:
1 узнаём общее число записей SELECT COUNT([поле]) from [таблица] , затем выбираем случайное число от 0 до общего количества записей
2 выбираем случайную запись SELECT [поле] FROM [таблица] LIMIT [выбраное число], 1

и эта конструкция работает на порядок быстрее чем стандартный RAND(), но в аксессе нету такого слова как LIMIT

ещё раз повторяю , да простят меня модераторы , но для слепых напишу капсом, МНЕ НЕ НУЖНО ВСЮ ТАБЛИЦУ В ДЕЛФИ ПЕРЕГОНЯТЬ МНЕ НУЖНА 1 СЛУЧАЙНАЯ СТРОКА
kelod вне форума Ответить с цитированием
Старый 20.09.2012, 15:24   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но для слепых напишу капсом
Т.е. для себя )
Аватар тебе сказал
Цитата:
можно взять используя TOP
Имеется ввиду запрос:
Код:
query.sql.text:='select top '+IntToStr(Random(кол-во))+' *... from... order by id desc'
Даст тебе набор, первая запись которая и есть та что ты хочешь получить.

А вообще тебе стоило раскрыть секрет - зачем это нужно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск записей (поле со списком) Megatron1 Microsoft Office Access 1 13.02.2012 12:06
Поиск в поле со списком Glender Microsoft Office Access 1 06.02.2012 11:14
Не могу сделать поле поиск в 2010 Sagdas Microsoft Office Access 2 08.12.2010 20:01
Поиск записи в поле со списком Swatch Microsoft Office Access 1 23.12.2009 19:09
Поиск в поле Memo omi БД в Delphi 6 01.03.2007 18:39