Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.06.2010, 13:18
SnowLeopard SnowLeopard вне форума
Прохожий
 
Регистрация: 28.05.2010
Сообщения: 12
Репутация: 10
Восклицание Срочно! Хитрый запрос))

Добрый день!
Суть проблемы - необходимо сделать так, чтобы из БД типа .mdb из одного столбца бралось два рандомных не повторяющихся значения и чтобы они записывались в две переменные, которые будут нужны в дальнейшем.
Ответить с цитированием
  #2  
Старый 08.06.2010, 13:26
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

В чем проблема то?
Код:
ClientDataSet.RecNo:=random(ClientDataSet1.RecordCount+1);
k:=ClientDataSet1.fieldbyname('ПОЛЕ').asInteger;
repeat
ClientDataSet.RecNo:=random(ClientDataSet1.RecordCount+1);
l:=ClientDataSet1.fieldbyname('ПОЛЕ').asInteger;
until k<>l;
Ответить с цитированием
  #3  
Старый 08.06.2010, 14:03
SnowLeopard SnowLeopard вне форума
Прохожий
 
Регистрация: 28.05.2010
Сообщения: 12
Репутация: 10
По умолчанию

Возможно ли сделать это не через ClientDataSet, а через ADO компоненты (у меня на форме ADOTable1, ADOConnection1 и DataSource1)?
Ответить с цитированием
  #4  
Старый 08.06.2010, 14:41
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Да
ADOTable потомок класса DataSet
Просто замени ClientDataSet на ADOTable
Ответить с цитированием
  #5  
Старый 08.06.2010, 15:28
SnowLeopard SnowLeopard вне форума
Прохожий
 
Регистрация: 28.05.2010
Сообщения: 12
Репутация: 10
По умолчанию

Ошибку выдает((( "аргументы имеют неверный тип, вылезают за рамки диапазона или конфликтуют друг с другом"
На этой строке
ADOTable1.RecNo:=random(ADOTable1.RecordCount+1);
Ответить с цитированием
  #6  
Старый 08.06.2010, 15:36
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

попробуй без +1?
Ответить с цитированием
  #7  
Старый 08.06.2010, 15:40
SnowLeopard SnowLeopard вне форума
Прохожий
 
Регистрация: 28.05.2010
Сообщения: 12
Репутация: 10
По умолчанию

Пробовал. То же самое.
Ответить с цитированием
  #8  
Старый 08.06.2010, 15:59
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

в таблице есть записи?
весь код можно?
Ответить с цитированием
  #9  
Старый 08.06.2010, 16:04
SnowLeopard SnowLeopard вне форума
Прохожий
 
Регистрация: 28.05.2010
Сообщения: 12
Репутация: 10
По умолчанию

В таблице полно записей (более 800). Всё подключено. Код:

Код:
procedure TForm3.FormShow(Sender: TObject);
begin
ADOTable1.ConnectionString :=
 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
 extractFileDir(ParamSTR(0)) +
 '\words.mdb;Mode=ReadWrite;Persist Security Info=False';
ADOTable1.Active := true;
ADOTable1.RecNo:=Random(ADOTable1.RecordCount+1);
a:=ADOTable1.FieldValues['word'].asstring;
{repeat
ADOTable1.RecNo:=random(ADOTable1.RecordCount+1);
b:=ADOTable1.FieldValues['word'];
until a<>b;
}
end;

Последний раз редактировалось SnowLeopard, 08.06.2010 в 16:08.
Ответить с цитированием
  #10  
Старый 08.06.2010, 16:42
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Все- таки надо так:
Код:
ADOTable1.RecordCount-1
Да и вообще метод притащили за уши, походу еще из парадокса. Так будет проще:
Код:
SELECT TOP 2 Field_name
FROM Table_name
ORDER BY Rnd(Key_field)
Ответить с цитированием
  #11  
Старый 08.06.2010, 16:53
SnowLeopard SnowLeopard вне форума
Прохожий
 
Регистрация: 28.05.2010
Сообщения: 12
Репутация: 10
По умолчанию

-1 не пашет. Сейчас попробую SQL-запрос.
Так. Подскажите, пожалуйста, как записать два выбранных значения в переменные?

Последний раз редактировалось SnowLeopard, 08.06.2010 в 16:59.
Ответить с цитированием
  #12  
Старый 08.06.2010, 17:12
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

adoquery1.first;
a:=adoquery1.fieldbyname('Fieldname').asInteger;
adoquery1.next;
b:=adoquery1.fieldbyname('Fieldname').asInteger;
Ответить с цитированием
  #13  
Старый 08.06.2010, 17:43
SnowLeopard SnowLeopard вне форума
Прохожий
 
Регистрация: 28.05.2010
Сообщения: 12
Репутация: 10
По умолчанию

Огромное спасибо, господа!!! Весьма признателен!)))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter