Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Какой объект использовать?


Автор: DelphianOracle 24.4.2008, 12:15
Объект List позволяет пользователю выбрать строку из таблицы, но это все некрасиво и неудобно. SubForm позволяет красиво показать пользователю таблицу, но как из нее выбрать строку? Мне надо что-нибудь, что выглядело как SubForm, но со свойством ListIndex.
Пожалуйста, помогите.

Автор: bopoha 24.4.2008, 12:59
А зачем вам ListIndex? Значение ключевого поля, выделенной записи в подчиненной форме, вас не устраивает?

Автор: DelphianOracle 24.4.2008, 14:11
Цитата(bopoha @  24.4.2008,  12:59 Найти цитируемый пост)
 Значение ключевого поля, выделенной записи в подчиненной форме, вас не устраивает?

Устраивает. А как узнать номер выделенной записи?

Добавлено через 9 минут и 8 секунд
Спс, понял. Нужное свойство - CurrentRecord. Огромное вам спасибо!!!

Автор: bopoha 24.4.2008, 14:39
Очень любопытно, зачем?

Автор: DelphianOracle 25.4.2008, 14:47
Пользователь выбирает нужную запись, и по нажатию на кнопку выполняются действия с выбраной записью.
Кстати, CurrentRecord как-то странно работает - в окне Watch одно значение (правильное), а реально в программе другое (0). Т.е. я ставлю условие If SubForm.Report.CurrentRecord = 0 then ... , условие выполняется, хотя в окне Watch стоит  совсем не 0.
И если навести на выражение мышку, показывается тоже 0. Что это - баг, фича, или помутнение рассудка smile?

Автор: bopoha 25.4.2008, 15:03
Цитата(DelphianOracle @  25.4.2008,  14:47 Найти цитируемый пост)
выполняются действия с выбраной записью.


Зачем для этого знать номер? Причем по порядку. Он не уникальный и при обновлении меняется. При этом, если обратится к полям формы, то будут доступны данные выбранной пользователем записи. Используйте значение ключевого поля для операций над записью и будет счастье.

Автор: DelphianOracle 25.4.2008, 17:25
Цитата(bopoha @  25.4.2008,  15:03 Найти цитируемый пост)
Зачем для этого знать номер? Причем по порядку.

Чтобы использовать метод Move для объекта recordset
Цитата(bopoha @  25.4.2008,  15:03 Найти цитируемый пост)
Используйте значение ключевого поля для операций над записью

Как? Можно поподробнее?

Автор: bopoha 25.4.2008, 18:08
Я так понимаю в Recordset необходимо найти ту же запись. 
Варианта два:
1. 
Код

Set rst = Me.RecordsetClone
...
rst.Bookmark =  Me.Bookmark



2.
Код

Dim lPK as Long
lPK = Me.ПолеСУникальнымиЗначениями
rst.FindFirst "ПолеСУникальнымиЗначениями = " & lPK
if Not rst.NoMatch Then
    '-- Нашли
endif


ПолеСУникальнымиЗначениями - находится в таблице и имеет тип счетчик.

Автор: DelphianOracle 25.4.2008, 18:27
Код

lPK = Me.№
rst.FindFirst "№ = " & lPK
If rst.NoMatch Then
    Exit Sub
End If

Method or data member not found и выделяет Me.№
Код

rst.Bookmark = Me.Bookmark

Введенное выражение содержит недопустимую ссылку на свойство "Bookmark".

Автор: DelphianOracle 25.4.2008, 20:40
Вместо CurrentRecord поставил SelTop, и все заработало!!!
bopoha, хотя задача решена, хотелось бы все-таки узнать альтернативное, и, возможно, более правильное решение. Плизз, ответьте...

Автор: bopoha 26.4.2008, 09:53
Что есть №?

Как в таблице поле счетчика называется?


Цитата(DelphianOracle @  25.4.2008,  18:27 Найти цитируемый пост)

Введенное выражение содержит недопустимую ссылку на свойство "Bookmark". 


Bookmark будет работать, если recordset получен методом RecordsetClone с формы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)