Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2012, 10:36   #1
Swatch
Форумчанин
 
Регистрация: 05.07.2009
Сообщений: 209
Печаль Не работает удаление нескольких записей в форме

Здравствуйте! Помогите пожалуйста, решить такую проблему. У меня на главной форме есть 2 подчиненные формы, источники данных у них-разные таблицы, но одинаковые по структуре. Мне нужно чтобы я могла удалить записи из второй формы и при удалении произвести некоторые действия: либо перенести эту запись обратно в первую подчиненную форму (соответственно из таблицы в таблицу), либо обновить такую же запись в таблице на сервере. Удаляю записи я нажатием DELETE. Суть вопроса в том, что все эти манипуляции срабатывают при удалении одной записи, но вот когда я выделяю несколько записей, то процедура срабатывает только для верхней выделенной, а остальные не удаляются, и никаких действий, прописанных на событие "Удаление", для них также не выполняется. Я пробовала присоединить этот код на события "До и поле подтверждения удаления", но данные события в моей базе данных не наступают, наверное потому, что отключены сообщения системы и никаких подтверждений система не требует. Как быть?
Код:
Private Sub Form_Delete(Cancel As Integer)
Me.AllowDeletions = True
Dim rstnar, rstdet As Recordset
Dim rstdet1 As QueryDef
Dim fld As field
Dim frm As Form
Dim wks As Workspace
Dim i, Y As Integer
Dim rstupd As New ADODB.Recordset
Dim rstsel As New ADODB.Recordset
Dim N As Integer
N = CInt(Forms!ТН_ВводДеталиНаряды.NomNar)
i = VydZap
Do While Me.SelHeight > 0
Debug.Print Forms!ТН_ВводДеталиНаряды.NomDet
If Me.ObozDet = Forms!ТН_ВводДеталиНаряды.NomDet Then
Set rstnar = CurrentDb.OpenRecordset("ТН_НормыНаряды")
Set rstdet1 = CurrentDb.CreateQueryDef("", "select * from ТН_Наряд where PprNo=" & Me.PprNo & " ")
Set rstdet = rstdet1.OpenRecordset
rstnar.AddNew
For Each fld In rstdet.Fields
        If fld.name <> "PrizVar" Then
            If Not isnull(rstdet(fld.name)) Then
               rstnar(fld.name).Value = rstdet(fld.name)
            End If
         End If
        If fld.name = "PrizVar" Then
            If rstdet(fld.name) = 0 Then
           rstnar(fld.name).Value = "ОСН"
            Else '
               rstnar(fld.name).Value = "ВАР"
            End If
         End If
        Next fld
        rstnar.Update
        Set rstdet = Nothing
        Set rstnar = Nothing
rstsel.Open "select * from ТН_Нормы where PprNo=" & Me.PprNo & "", cnnProiz
If rstsel!НомерНар = CInt(Forms!ТН_ВводДеталиНаряды.NomNar) Then
rstupd.Open "update ТН_Нормы set НомерНар = null where PprNo=" & Me.PprNo & "", cnnProiz
Else
rstupd.Open "update ТН_Нормы set НомерНар = " & N & " where PprNo=" & Me.PprNo & "", cnnProiz
End If
Set rstupd = Nothing
Set rstsel = Nothing
Else
rstsel.Open "select * from ТН_Нормы where PprNo=" & Me.PprNo & "", cnnProiz
If rstsel!НомерНар = CInt(Forms!ТН_ВводДеталиНаряды.NomNar) Then
rstupd.Open "update ТН_Нормы set НомерНар = null where PprNo=" & Me.PprNo & "", cnnProiz
Else
rstupd.Open "update ТН_Нормы set НомерНар = " & N & " where PprNo=" & Me.PprNo & "", cnnProiz
End If
Set rstupd = Nothing
Set rstsel = Nothing
End If
   
        i = i - 1
       Me.SelHeight = i
       
    Me.SelTop = Me.SelTop + 1
        Loop
        Set frm = Forms!ТН_ВводДеталиНаряды.ТН_ВводДеталиПодч.Form
Set wks = DBEngine.Workspaces(0)
wks.BeginTrans
DoCmd.OpenTable "ТН_НормыНаряды"
DoCmd.OpenTable "ТН_Наряд"

DoCmd.close acTable, "ТН_НормыНаряды"
DoCmd.close acTable, "ТН_Наряд"
wks.CommitTrans

frm.Requery

End Sub
Swatch вне форума Ответить с цитированием
Старый 07.07.2012, 23:42   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Swatch.
мысль: изменив таблицу, добавив в неё поле PrizVar1 для строчных данных "ОСН" и "ВАР", можно использовать только её одну,
а в качестве источников для форм использовать запросы с подобными условиями отбора:
Код:
..WHERE PrizVar1 Is Null
и
Код:
..WHERE PrizVar1 Is Not Null
И тогда код значительно уменьшится
Код:
...
Const sQ1 = "UPDATE ТН_Наряд_Нормы SET PrizVar1=", sQ2 = "'ВАР'"
Dim s$
s = PprNo & ""
CurrentDB.Execute(sQ1 + "'ОСН' Where PrizVar=0 AND PprNo=" + s)
CurrentDB.Execute(sQ1 + "'ВАР' Where NOT PrizVar=0 AND PprNo=" + s)
' далее обновление набора записей форм Requery
...
По поводу "..Удаляю записи я нажатием DELETE... когда я выделяю несколько записей.."
- от удаления (тем более группового) как Вы понимаете придется отказаться, лучше установкой запрета
удаления (AllowDeletions = False) из формы.

Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 09.07.2012, 07:39   #3
Swatch
Форумчанин
 
Регистрация: 05.07.2009
Сообщений: 209
Печаль

Евгений, спасибо большое за ответ . Но, увы, именно групповое удаление записей мне и необходимо реализовать... это нужно для удобства пользователя при работе в программе, так как количество записей, которые необходимо удалить, может быть довольно много. Может быть, у Вас есть какие-нибудь мысли по поводу несрабатывания цикла с выделением записей? Я отлаживала этот код, проходила цикл, на каждом шаге вроде бы все выполнятеся верно, каждый раз выделяется следующая запись, но почему-то действия, прописанные по удалению, не выполняются. А вот если выделена одна запись, то все работает . И потому мои пользователи пока вынуждены несколько раз щелкать делитом.
Swatch вне форума Ответить с цитированием
Старый 09.07.2012, 10:20   #4
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Swatch,
как вариант (если всё-таки правильно понял задачу):
- в подформе добавить флажки (возможно, с использованием временной таблицы) для выбора нужных записей;
- на главной форме для удобства установить флажок (кнопку) Выделить всё,
- на главной же - кнопки для нужных действий с выделенными записями, например: Удалить, Перенести выделенные записи...

Всё остальное делается запросами (из VBA), например:
- Выделить всё (снять выделения) - Update,
- Удалить выделенные - Dеletе и т.п.
(После чего перезапрашивать подформу: rеquery)
Андрэич вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление нескольких записей через checkbox dmitruha PHP 1 23.07.2011 16:07
Удаление нескольких записей из БД a_n_n_a БД в Delphi 4 23.04.2011 02:44
Чтение нескольких записей в TList ? spamer Общие вопросы Delphi 10 30.10.2009 17:07
Удаление нескольких записей Hobbit_88 БД в Delphi 5 23.04.2009 17:18
Поиск нескольких записей VenMaster БД в Delphi 1 14.06.2008 22:48