|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Срочно! Хитрый запрос))
Добрый день!
Суть проблемы - необходимо сделать так, чтобы из БД типа .mdb из одного столбца бралось два рандомных не повторяющихся значения и чтобы они записывались в две переменные, которые будут нужны в дальнейшем. |
#2
|
|||
|
|||
В чем проблема то?
Код:
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
|
|||
|
|||
Возможно ли сделать это не через ClientDataSet, а через ADO компоненты (у меня на форме ADOTable1, ADOConnection1 и DataSource1)?
|
#4
|
|||
|
|||
Да
ADOTable потомок класса DataSet Просто замени ClientDataSet на ADOTable |
#5
|
|||
|
|||
Ошибку выдает((( "аргументы имеют неверный тип, вылезают за рамки диапазона или конфликтуют друг с другом"
На этой строке ADOTable1.RecNo:=random(ADOTable1.RecordCount+1); |
#6
|
|||
|
|||
попробуй без +1?
|
#7
|
|||
|
|||
Пробовал. То же самое.
|
#8
|
|||
|
|||
в таблице есть записи?
весь код можно? |
#9
|
|||
|
|||
В таблице полно записей (более 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
|
||||
|
||||
Все- таки надо так:
Код:
ADOTable1.RecordCount-1 Код:
SELECT TOP 2 Field_name FROM Table_name ORDER BY Rnd(Key_field) |
#11
|
|||
|
|||
-1 не пашет. Сейчас попробую SQL-запрос.
Так. Подскажите, пожалуйста, как записать два выбранных значения в переменные? Последний раз редактировалось SnowLeopard, 08.06.2010 в 16:59. |
#12
|
|||
|
|||
adoquery1.first;
a:=adoquery1.fieldbyname('Fieldname').asInteger; adoquery1.next; b:=adoquery1.fieldbyname('Fieldname').asInteger; |
#13
|
|||
|
|||
Огромное спасибо, господа!!! Весьма признателен!)))
|