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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2013, 18:13   #1
Ангел без крыльев
Пользователь
 
Регистрация: 30.04.2011
Сообщений: 10
Вопрос VBA в Access

Многоуважаемые программисты!! Нужна помощь с VBA в Access =(
В базе данных есть форма "Добавление пары", на ней внизу есть кнопка, с помощью которой в таблицу Расписание добавляется пара с введенными данными.
И мне надо на ней прописать код, чтобы, при совпадении вводимых данных с уже существующей строкой, оно не добавлялось,а выдавало ошибку
я пробовала...там есть код..но он не хочет работать..я просто впервые столкнулась с VBA и не могу разобраться...
помогите, пожалуйста)
Код:
Private Sub Кнопка31_Click() 'Кнопка добавить занятие
    
Dim bd As Database, tab1 As Recordset
Dim str As String

Set bd = DBEngine.Workspaces(0).Databases(0)
Set bd = CurrentDb
   
   
If ((Me.Аудитория.Value <> "") And (Me.Время.Value <> "") And (Me.Группа.Value <> "") And (Me.День_недели.Value <> "") And (Me.Неделя.Value <> "") And (Me.Предмет.Value <> "") And (Me.Преподаватель.Value <> "")) Then
   Set tab1 = bd.OpenRecordset("Расписание")
      
      If ((Me.Время.Value <> tab1!Время) And (Me.Преподаватель.Value <> tab1!Преподаватель)) Then
         DoCmd.GoToRecord , , acNewRec
         Else: MsgBox "Поле с таким название есть!"
       End If
       
     Else: MsgBox "Заполните все поля"
End If
   
Me.День_недели.Value = ""
Me.Неделя.Value = ""
Me.Время.Value = ""
Me.Группа.Value = ""
Me.Аудитория.Value = ""
Me.Тип_занятия.Value = ""
Me.Предмет.Value = ""
Me.Преподаватель.Value = ""

End Sub
Вложения
Тип файла: rar моя.rar (4.02 Мб, 22 просмотров)

Последний раз редактировалось Ангел без крыльев; 28.05.2013 в 18:15. Причина: забыла код
Ангел без крыльев вне форума Ответить с цитированием
Старый 29.05.2013, 08:10   #2
Woodlin
Форумчанин
 
Регистрация: 30.03.2010
Сообщений: 153
По умолчанию

Ангел без крыльев, попробуйте очистить источник записей формы "Добавление пары" и его контролов, а запись добавлять в таблицу через рекордсет
Код:
Private Sub Кнопка31_Click() 'Кнопка добавить занятие
 . . . ' здесь Ваш код
    
   Set tab1 = bd.OpenRecordset("Расписание", dbOpenDynaset)
    
    tab1.MoveLast 'Заполняем рекордсет
    
    'Ищем запись в рекордсет запись, удовлетворяющую условию:
    tab1.FindFirst "Время = '" & Me.Время.Value & "' and Преподаватель = " & Me.Преподаватель.Value
    
    If tab1.NoMatch Then ': запись не найдена, значит можно добавлять новую
        tab1.AddNew
            tab1![День недели].Value = Me!День_недели.Value
            tab1!Неделя.Value = Me!Неделя.Value
            tab1!Время.Value = Me!Время.Value
            tab1!Группа.Value = Me!Группа.Value
            tab1!Аудитория.Value = Me!Аудитория.Value
            tab1![Тип занятия].Value = Me![Тип занятия].Value
            tab1!Предмет.Value = Me!Предмет.Value
            tab1!Преподаватель.Value = Me!Преподаватель.Value
        tab1.Update
        'Запись внесена, очищаем поля формы
        Me.День_недели.Value = ""
        Me.Неделя.Value = ""
        Me.Время.Value = ""
        Me.Группа.Value = ""
        Me.Аудитория.Value = ""
        Me.Тип_занятия.Value = ""
        Me.Предмет.Value = ""
        Me.Преподаватель.Value = ""
        
    Else: MsgBox "Поле с таким название есть!"
    End If
       
Else: MsgBox "Заполните все поля"
End If

End Sub

Последний раз редактировалось Woodlin; 29.05.2013 в 08:13.
Woodlin вне форума Ответить с цитированием
Старый 29.05.2013, 12:47   #3
Ангел без крыльев
Пользователь
 
Регистрация: 30.04.2011
Сообщений: 10
Радость Работает)

все работает) Спасибо огромное!!!)
скажите, а если мне надо несколько условий..первое условие - на совпадение времени и преподавателя, второе, например, на совпадение аудитории, группы и времени, третье еще на что-нибудь...как их прописать тогда? и возможно ли сделать разный MsgBox?
заранее огромное спасибо

и у меня не получается прописать в сточку с условием больше двух... объясните, плиз, синтаксис условия FindFirst

Последний раз редактировалось Ангел без крыльев; 29.05.2013 в 18:09.
Ангел без крыльев вне форума Ответить с цитированием
Старый 30.05.2013, 07:30   #4
Woodlin
Форумчанин
 
Регистрация: 30.03.2010
Сообщений: 153
По умолчанию

Цитата:
Сообщение от Ангел без крыльев Посмотреть сообщение
скажите, а если мне надо несколько условий..первое условие - на совпадение времени и преподавателя, второе, например, на совпадение аудитории, группы и времени, третье еще на что-нибудь...как их прописать тогда?...как их прописать тогда? и возможно ли сделать разный MsgBox?
Все три условия Вы будете по отдельности проверять, или они должны сработать одновременно?
В первом случае я бы ввёл какую-нибудь переменную, к примеру strMsgBox типа String, и проверял каждое условие по отдельности. Если время и преподаватель например уже такие есть, то
Код:
strMsgBox = "Выберите другое время и преподавателя" & VbCrlf
В следующем условии
Код:
strMsgBox = strMsgBox  & "Свое условие" & VbCrlf
И так далее.
Если после проверки всех условии переменная пустая то совпадений нет, иначе выпадет сообщение со всеми совпавшими условиями.
Код:
If strMsgBox = "" Then
   'Совпадений нет, можно добавлять в таблицу
Else
   'Совпадения есть
   Msgbox (strMsgBox)
End If
Если Вам нужно проверить все три условия за раз, то можно собрать строку в критерии отбора FindFirst, или создать запрос (можно в конструкторе) и использовать его как источник строк при открытии рекордсет
Код:
Set tab1 = bd.OpenRecordset("Имя_Запроса", dbOpenDynaset)
Если запись(и) в рекордсет есть, значит совпадения есть.

Цитата:
Сообщение от Ангел без крыльев Посмотреть сообщение
и у меня не получается прописать в сточку с условием больше двух... объясните, плиз, синтаксис условия FindFirst
В общем, то синтаксис приведён в примере и есть в справке.
При собирании строки нужно знать тип данных. Если строковый, то использовать одинарные кавычки
Код:
tab1.FindFirst "Время = '" & Me.Время.Value & "'"
если целое число
Код:
tab1.FindFirst "Преподаватель = " & Me.Преподаватель.Value
Woodlin вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
access, vba artursya Помощь студентам 0 21.03.2012 18:58
access vba eutelg Microsoft Office Excel 15 19.08.2011 14:04
МАССИВЫ В VBA ACCESS ALYSA Помощь студентам 0 24.05.2010 14:38
VBA + ms ACCESS Dr.AgoN Microsoft Office Access 1 19.03.2009 10:23