Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
4 / 4 / 3
Регистрация: 28.10.2012
Сообщений: 321
1

Удаление из подчиненной формы

15.02.2016, 07:28. Показов 2250. Ответов 24
Метки нет (Все метки)

Добрый день, подскажите как сделать удаление нескольких строк?
На форме есть подчиненная форма, которая содержит в себе список записей.
Удаление одной строки я сделал, а как сделать удаление всех выделенных строк?
Источником является запрос к серверу.
Запрос типа
SQL
1
SELECT * FROM t1
Изображения
 
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2016, 07:28
Ответы с готовыми решениями:

Удаление строки из подчиненной формы
Всем привет! Хочу чтобы по двойному клику удалялась текущая строка в подчиненной форме с моим...

Удаление записей по выделенным строкам подчиненной формы
Помогите пожалуйста разобраться. Имеется база, основная форма с подчиненной табличной формой, один...

Удаление записей из подчиненной формы в цикле на VBA
Здравствуйте. Есть форма, на которой имеется подчиненная форма. Организовал цикл для поиска записей...

Подсчет количества записей в подчиненной форме из другой подчиненной формы
Форумчане, всем привет. На форме 2 подчиненной формы. При переходе по одной отображаются данные...

24
шапоклякистка 8-го дня
3670 / 2230 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
15.02.2016, 08:57 2
SQL
1
DELETE * FROM t1 WHERE ТеКритерииПоКоторымВыбираетсяКакиеИменноЗаписиУдалять
0
Эксперт MS Access
26726 / 14405 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
15.02.2016, 09:01 3
Видимо, судя по скрину, удаление в табличной подформе?

Делаем так. Сначала надо узнать границы выделенного диапазона на событии Кнопка вверх (MouseUp) и сохранить их в глобальных переменных. Затем по этим переменным удалить записи
1. В общем (стандартном) модуле заводим переменные
Visual Basic
1
Public recMin, recMax
2. На событии подформы MouseUp определяем переменные границ выделенного диапазона
Visual Basic
1
2
3
4
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    recMin = Me.SelTop
    recMax = recMin + Me.SelHeight - 1
End Sub
3. На событии клика кнопки удаление выделенных записей
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub КнопкаУдаления_Click()
    Dim i
    With Me.[ИмяПодформы].Form.Recordset
        For i = recMax - 1 To recMin - 1 Step -1
            .AbsolutePosition = i
            .Delete
        Next
    End With
End Sub
3
шапоклякистка 8-го дня
3670 / 2230 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
15.02.2016, 09:04 4
Или я не поняла вопроса вашего. Кнопка Del на клавиатуре не срабатывает? Почему вообще речь о "делании удаления"?

Добавлено через 2 минуты
UPD: таки да, неправильно поняла вопрос.
0
Эксперт MS Access
6793 / 4382 / 282
Регистрация: 12.08.2011
Сообщений: 12,963
15.02.2016, 09:09 5
Вот если бы ТС спросил про копировать, то я бы дал код наподобие mobile, но, когда прочитал "Удалять", не стал этого делать. Потому что удаление в Базе Данных - нонсенс.
0
895 / 285 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
15.02.2016, 09:12 6
mobile, Спасибо за интересный вариант) Действительно, на случай, если кнопка Delete на клавиатуре не работает)).
0
Эксперт MS Access
26726 / 14405 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
15.02.2016, 09:21 7
Цитата Сообщение от Kkarn Посмотреть сообщение
на случай, если кнопка Delete на клавиатуре не работает
А также на случай когда в подформе запрещено удаление - AllowDeletions=False или источник формы по каким-то причинам не обновляемый.

Цитата Сообщение от alvk Посмотреть сообщение
удаление в Базе Данных - нонсенс
Для регулярных данных БД, вносимых оператором или получаемых от источника заданного в ТЗ разумеется, удаление не очень оправдано. Но помимо таких данных существуют, вернее могут существовать различного рода временные или вспомогательные таблицы, не хранящие основных данных БД. Ну и почему бы их не удалять? Они не содержат постоянной значимой информации, удалять можно. Вплоть до удаления самих таких таблиц
0
4 / 4 / 3
Регистрация: 28.10.2012
Сообщений: 321
15.02.2016, 09:55  [ТС] 8
Кнопка del на клавиатуре работает (в ворде спокойно удаляет символ) но в данном случае удалять отказывается по неизвестным мне причинам)
Спасибо, буду пробовать.
0
шапоклякистка 8-го дня
3670 / 2230 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
15.02.2016, 09:57 9
Цитата Сообщение от mobile Посмотреть сообщение
А также на случай когда в подформе запрещено удаление - AllowDeletions=False или источник формы по каким-то причинам не обновляемый.
Так мы же все равно обращаемся именно к рекордсету формы? Он может быть обновляемым программно даже тогда, когда не обновляем для пользователя?
1
Эксперт MS Access
6793 / 4382 / 282
Регистрация: 12.08.2011
Сообщений: 12,963
15.02.2016, 10:07 10
Цитата Сообщение от mobile Посмотреть сообщение
вернее могут существовать различного рода временные или вспомогательные таблицы, не хранящие основных данных БД.
А могут и не существовать. Тогда зачем удалять основные данные? Эта палка о двух концах. Я ставлю на то, что у ТС в реальности не временная таблица.
0
Эксперт MS Access
26726 / 14405 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
15.02.2016, 10:33 11
Цитата Сообщение от texnik-san Посмотреть сообщение
Так мы же все равно обращаемся именно к рекордсету формы? Он может быть обновляемым программно даже тогда, когда не обновляем для пользователя?
Виноват. Ошибся, конечно. В необновляемом рекордсете удалить ничего нельзя. Но для случая AllowDeletions=False вполне пригодно.

Цитата Сообщение от alvk Посмотреть сообщение
Я ставлю на то, что у ТС в реальности не временная таблица.
Не расположен к гаданию. Может и так.
0
Эксперт MS Access
6793 / 4382 / 282
Регистрация: 12.08.2011
Сообщений: 12,963
15.02.2016, 10:43 12
Цитата Сообщение от mobile Посмотреть сообщение
Не расположен к гаданию. Может и так.
Я тоже не расположен, поэтому остаюсь при своём мнении: удаление в Базе Данных - нонсенс.
0
шапоклякистка 8-го дня
3670 / 2230 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
15.02.2016, 10:53 13
Цитата Сообщение от Pavel07 Посмотреть сообщение
но в данном случае удалять отказывается по неизвестным мне причинам)
Попробуйте проверить такие варианты:

а) свойство формы "разрешить удаление" = ложь (AllowDeletions=False) - этот вариант уже решен
б) или свойство формы "тип набора записей" = статический
в) есть связанные записи в зависимых таблицах
г) у пользователя нет прав на удаление записей
д) t1 не таблица, а необновляемый запрос

Напишете, что из них имеет место - будем придумывать способ бороться.
0
368 / 87 / 8
Регистрация: 14.08.2012
Сообщений: 248
15.02.2016, 10:54 14
Цитата Сообщение от alvk Посмотреть сообщение
Я ставлю на то
Цитата Сообщение от alvk Посмотреть сообщение
Цитата Сообщение от mobile Посмотреть сообщение
Не расположен к гаданию
Я тоже не расположен,
Логично. Исключаем тотализатор из гадательного набора
0
Эксперт MS Access
6793 / 4382 / 282
Регистрация: 12.08.2011
Сообщений: 12,963
15.02.2016, 10:58 15
Цитата Сообщение от texnik-san Посмотреть сообщение
д) t1 не таблица, а необновляемый запрос
а запрос к серверу вообще обновляемый? Очень в этом сомневаюсь.
0
шапоклякистка 8-го дня
3670 / 2230 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
15.02.2016, 11:38 16
Цитата Сообщение от alvk Посмотреть сообщение
а запрос к серверу вообще обновляемый?
Тю, блин ))) Что-то я вообще невнимательно читаю темы в последнее время.

Значит, у нас не остается иного выхода, кроме как объединить оба метода.

1. В общем (стандартном) модуле заводим переменные
Visual Basic
1
Public recMin, recMax
2. На событии подформы MouseUp определяем переменные границ выделенного диапазона
Visual Basic
1
2
3
4
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    recMin = Me.SelTop
    recMax = recMin + Me.SelHeight - 1
End Sub
3. На событии клика кнопки удаление выделенных записей
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub КнопкаУдаления_Click()
    Dim i, strSQL, strKeyList
    strKeyList = ""
    With Me.[ИмяПодформы].Form.Recordset
        For i = recMin To  recMax
            strKeyList = strKeyList & Me.[ИмяПодформы].Form.Recordset!ИмяКлючевогоПоля & ","
        Next i
    End With
    if strKeyList>"" then 
        strKeyList = left(strKeyList,len(strKeyList)-1)
        strSQL = "DELETE * FROM t1 WHERE ИмяКлючевогоПоля IN (" & strKeyList & ")"
        ' И тут нужно запрос strSQL выполнить, но я не знаю синтаксиса
        ' как запросы к серверу запускаются на выполнение
    end if
End Sub
Добавлено через 8 минут
Цитата Сообщение от texnik-san Посмотреть сообщение
' И тут нужно запрос strSQL выполнить, но я не знаю синтаксиса
* * * *' как запросы к серверу запускаются на выполнение
mobile, помогите доработать код, пожалуйста!
1
Эксперт MS Access
26726 / 14405 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
15.02.2016, 12:21 17
Запрос к серверу действительно создает необновляемый рекордсет, alvk прав.

texnik-san, это надо делать через АДО. Пусть ТС скажет, что за сервер, покажет ConnectionString и можно будет в адо-рекордсете удалить записи.


Запрос к серверу примерно такой, с указанием строки коннекта
SQL
1
2
3
4
DELETE *
FROM (ODBC;Driver={SQL Server};Server=IP; DATABASE=DB_name;UID=USER;PWD=pass;) внешняя_таблица
WHERE внешнее_поле IN 
(SELECT Локальное_поле FROM Локальная_таблица WHERE Локальное_поле = условие)
Добавлено через 4 минуты
Ну и выполнять его как обычно
Visual Basic
1
currentproject.connection.execute "sql-text"
1
Эксперт MS Access
6793 / 4382 / 282
Регистрация: 12.08.2011
Сообщений: 12,963
15.02.2016, 12:59 18
Цитата Сообщение от mobile Посмотреть сообщение
можно будет в адо-рекордсете удалить записи.
Вот какие же вы все злые!
0
4 / 4 / 3
Регистрация: 28.10.2012
Сообщений: 321
15.02.2016, 13:08  [ТС] 19
Сервер MS SQL.
Как передать запрос серверу я знаю)
В strKeyList при выделении нескольких строк записывается 1,1,1,1,1,1,1,1 т.е. столько сколько выделено строк а не 1,2,3,4,5 и т.д. где ошибочка в Вашем коде?
0
шапоклякистка 8-го дня
3670 / 2230 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
15.02.2016, 14:19 20
Цитата Сообщение от Pavel07 Посмотреть сообщение
В strKeyList при выделении нескольких строк записывается 1,1,1,1,1,1,1,1 т.е. столько сколько выделено строк а не 1,2,3,4,5 и т.д. где ошибочка в Вашем коде?
Огосоподи. Я ж затерла переходы между записями Вроде собиралась свой код дописывать к коду mobile, а написала поверх. Момент.

Добавлено через 1 минуту
Вот, строчка .AbsolutePosition = i потерялась (ага, и -1 в нумерации тоже)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub КнопкаУдаления_Click()
    Dim i, strSQL, strKeyList
    strKeyList = ""
    With Me.[ИмяПодформы].Form.Recordset
        For i = recMin -1 To  recMax -1
            .AbsolutePosition = i
            strKeyList = strKeyList & Me.[ИмяПодформы].Form.Recordset!ИмяКлючевогоПоля & ","
        Next i
    End With
    if strKeyList>"" then 
        strKeyList = left(strKeyList,len(strKeyList)-1)
        strSQL = "DELETE * FROM t1 WHERE ИмяКлючевогоПоля IN (" & strKeyList & ")"
        ' И тут нужно запрос strSQL выполнить, но я не знаю синтаксиса
        ' как запросы к серверу запускаются на выполнение
    end if
End Sub
Добавлено через 1 минуту
Цитата Сообщение от Pavel07 Посмотреть сообщение
Как передать запрос серверу я знаю)
Для меня напишите ) Не знаю я.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2016, 14:19

Сумма из подчиненной формы, отмена записей в подчиненной форме
Нужна сразу помощь по четырем пунктам, форма КвитанцияСкупкиОбмена надо: 1. Суммирование поля...

Одновременное удаление записей из "выровеннной формы" и подчиненной
Ребятки. Помогите пожалуйста. Условие: Есть выровненная форма + в ней подчиненная. Если...

Обновление поля подчиненной формы по обновлению поля другой подчиненной формы
Доброго времени суток. Прошу помощи, запутался. Существует главная форма (допустим frmMain) На...

Выборка в подчиненной форме 2 из формы 2 по выбранному значению в подчиненной форме 1 из формы 1
Добрый день! Есть 2 формы(на первой форме находится "подчиненная форма 1", на второй "подчиненная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru