Удалить запись из таблицы данных с помощью vba DatasheetDoCmd.RunCommand acCmdDeleteRecord (ошибка 2046)

Пожалуйста помогите!

Что у меня есть:

Во-первых, я использую Access 2007. У меня есть форма, включающая подчиненную форму. В этой подформе есть таблица данных из SQL-запроса, которая получает 3 поля. Первое поле (Supprimer) — это фиктивное поле для отображения гиперссылки, которая будет использоваться, имеет кнопку:

SELECT "Supprimer", permis.abbreviation, permis.description
FROM permis 
INNER JOIN (clients INNER JOIN clients_permis 
  ON clients.ID=clients_permis.id_clients) 
  ON permis.ID=clients_permis.id_permis;

Что я хочу Я хочу, чтобы мои гиперссылки «удалить» удаляли выбранную запись таблицы данных, нажав клавишу «del».

Мой код для события onClick

Private Sub del_Click()

    DoCmd.RunCommand acCmdSelectRecord
    'SendKeys ("{DELETE}")       
    DoCmd.RunCommand acCmdDeleteRecord

End Sub

Если я раскомментирую Sendkeys ("{DELETE}"), запись будет удалена, но в моей системе это также активирует клавишу numlock. Кто знает, что он может делать в другой системе.

команда DoCmd.RunCommand acCmdDeleteRecord вызывает ошибку выполнения: 2046.

В предыдущем пункте приведенный выше код работал отлично.


person pec    schedule 04.09.2011    source источник
comment
Подвопрос: насколько плохо использовать метод SendKeys()?   -  person pec    schedule 04.09.2011
comment
Я не могу рекомендовать использовать SendKeys. Вы можете посмотреть эту ссылку, если вы еще этого не сделали. access-programmers.co.uk/forums/ archive/index.php/t-60046.html Кажется, нет вывода о том, что вызывает эту ошибку, которую вы получаете при попытке удалить запись так, как вы. Вы можете попробовать запустить compact and repair, чтобы посмотреть, решит ли это проблему.   -  person HK1    schedule 05.09.2011
comment
Вы уверены, что ваш набор записей можно обновить? Почему вы используете фиктивное поле для удаления, а не командную кнопку? Я согласен, что ни при каких обстоятельствах вы не должны использовать sendkeys, и в этом нет необходимости.   -  person Fionnuala    schedule 05.09.2011
comment
Использование командной кнопки отвлечет внимание от таблицы, и я не смогу использовать DoCmd.RunCommand acCmdDeleteRecord.   -  person pec    schedule 05.09.2011
comment
Непрерывные формы (в отличие от форм таблицы) позволяют включать кнопки, хотя вы не можете позволить своим пользователям легко перемещать столбцы и применять сортировку с непрерывными формами.   -  person HK1    schedule 06.09.2011
comment
Другой способ сделать это — создать функцию/подпрограмму Public DeleteRecord в подчиненной форме и вызвать ее из основной формы. Тот факт, что фокус перемещается на главную форму, не повлияет на возможность подчиненной формы удалить текущую запись.   -  person HK1    schedule 06.09.2011
comment
Спасибо, ХК1. Ваши два последних предложения великолепны. Я, вероятно, буду использовать функцию публичного удаления записи.   -  person pec    schedule 06.09.2011


Ответы (1)


Как упоминалось в комментариях HK1, вот что можно сделать (хотя это обходной путь):

Используйте непрерывную форму вместо таблицы.

person pec    schedule 06.09.2011
comment
Непрерывная форма - это форма (очевидно), поэтому она позволяет вам добавить кнопку, как и в любой другой форме. Кнопки таблицы данных также не работают, потому что нажатие чего-либо за пределами таблицы данных (например, кнопки поиска) приведет к тому, что таблица данных будет не в фокусе. Вывод таблицы данных из фокуса приведет к «отмене выбора» выбранной записи. Плюс непрерывная форма, в моем случае, дает мне больше возможностей. Даже возможность спроектировать его так, чтобы он выглядел как техническое описание. - person pec; 11.09.2011
comment
Это НЕ правда, что щелчок за пределами формы таблицы данных отменяет выбор текущей записи в таблице данных. Это утверждение ПРОСТО СОВЕРШЕННО НЕПРАВИЛЬНО. - person David-W-Fenton; 13.09.2011