Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1281 / 912 / 446
Регистрация: 21.10.2012
Сообщений: 2,589
1

Автоматическое заполнение поля таблицы бд Студенты

11.10.2015, 12:56. Показов 2085. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Имеется таблица Распределение по семестрам, в которой нужно программно заполнить поле Преподаватель. Преподаватель берется из запроса Преподаватель_с_мин_нагрузкой.
Написал вот такой код, (возможно есть и другие ошибки) но пока что не получается занести значение в поле таблицы Распределение по семестрам:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Подстановка_Click()
Dim rs As Recordset
Dim p As String
Dim sql1 As String
 
Set rs = CurrentDb.OpenRecordset("Распределение по семестрам")
rs.MoveFirst
Do While Not rs.EOF
p = rs("Дисциплина")
sql1 = " SELECT Преподаватель_с_мин_нагрузкой.[Преподаватель] " _
& " FROM Преподаватель_с_мин_нагрузкой WHERE (((Преподаватель_с_мин_нагрузкой.Дисциплина)=p))"
rs.Edit
rs("Преподаватель") = sql1(0) 'может быть несколько преподавателей, заношу первого в списке
rs.Update
rs.MoveNext
Loop
 
rs.Close
Set rs = Nothing
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2015, 12:56
Ответы с готовыми решениями:

Автоматическое заполнение поля таблицы
Здравствуйте. Имеются две таблицы: 1.Группы, в которой содержатся 2 поля: код группы и код...

Автоматическое заполнение поля формы из таблицы
Добрый день господа. Такая вот проблема,с которой бьюсь длительной время.На форуме вроде как есть...

Автоматическое заполнение поля таблицы с оборудованием
Добрый день. столкнулся с проблемой массового вода данных. ЧТО Есть: Есть БД которая состоит...

Автоматическое заполнение в поля таблицы (формы)
Здравствуйте! Уже нет сил, ничего не получается, что описано в подобных темах на форуме (по...

27
1281 / 912 / 446
Регистрация: 21.10.2012
Сообщений: 2,589
11.10.2015, 23:36  [ТС] 21
Author24 — интернет-сервис помощи студентам
Странно, но ни один из вариантов не убрал ошибку

Добавлено через 5 минут
Открыл проверить запрос, там пусто.
Написал
Visual Basic
1
2
If Isnull(rs("Номер группы")) Then
   MsgBox "Расписание составлено верно!" Else
но в результате запуска программа идет по ветке else
Написав
Visual Basic
1
If Len(rs("Номер группы") & "")=0 Then
ошибка -текущая запись отсутствует
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
11.10.2015, 23:40 22
Цитата Сообщение от АлександрКом Посмотреть сообщение
ни один из вариантов не убрал ошибк
Это потому, что пустой рекордсет не NULL. Там вообще нет ничего. В этом случае рекордсет сразу показывает конец набора записей EOF
Visual Basic
1
2
If rs.EOF Then
   MsgBox "Расписание составлено верно!" Else
1
1281 / 912 / 446
Регистрация: 21.10.2012
Сообщений: 2,589
11.10.2015, 23:44  [ТС] 23
Цитата Сообщение от mobile Посмотреть сообщение
В этом случае рекордсет сразу показывает конец набора записей EOF
Спасибо за помощь, теперь буду знать
0
1281 / 912 / 446
Регистрация: 21.10.2012
Сообщений: 2,589
12.10.2015, 00:22  [ТС] 24
Проблему, записанную в топике темы, решил следующим образом
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Подстановка_Click()
Dim rs As Recordset
Dim p As String
Dim k1
 
Set rs = CurrentDb.OpenRecordset("Распределение по семестрам")
rs.MoveFirst
 
Do While Not rs.EOF
p = rs("Дисциплина")
k1 = DLookup("Преподаватель", "Преподаватель_с_мин_нагрузкой", "Дисциплина='" & p & "'")
rs.Edit
rs("Преподаватель") = k1
rs.Update
rs.MoveNext
Loop
 
rs.Close
Set rs = Nothing
End Sub

Но обнаружил другую проблему.
В запросе НагрузкаПреподавателей я вывожу Имя преподавателя и число, отражающее его нагрузку. Но может быть так, что какой-то из преподавателей вообще ничего не ведет, и тогда получается, что его нагрузка 0. У меня этого не было отражено в данном запросе, но я реализовал это в запросе нагрузкаСнулями.
Осталась лишь одна трудность: нужно сделать так, чтобы пустые ячейки поля Нагрузка заменились на 0.
Вложения
Тип файла: rar InstSite4.rar (135.2 Кб, 2 просмотров)
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
12.10.2015, 00:43 25
Цитата Сообщение от АлександрКом Посмотреть сообщение
Осталась лишь одна трудность: нужно сделать так, чтобы пустые ячейки поля Нагрузка заменились на 0.
Достигается функцией NZ над полем. Смотрите запрос с нуллами.

Заодно исправил в форме ИсправитьРасписание ошибку в комбо [замена]. Когда выходишь из этого поля и возвращаешься вновь, то ошибка, мол нет источника строк. И действительно, источник уничтожался на событии выхода из поля (Exit). Закомментировал весь код процедуры.
Вложения
Тип файла: rar InstSite_1.rar (46.0 Кб, 7 просмотров)
1
1281 / 912 / 446
Регистрация: 21.10.2012
Сообщений: 2,589
12.10.2015, 01:08  [ТС] 26
Отдельное спасибо за комбо, проверил - действительно была ошибка.

Добавлено через 7 минут
И снова нашел промах
Если несколько преподавателей одной и той же дисциплины имеют одинаковую минимальную занятость, то после получения списка этих преподавателей
Visual Basic
1
k1 = DLookup("Преподаватель", "Преподаватель_с_мин_нагрузкой", "Дисциплина='" & p & "'")
необходимо проверить, что текущее значение поля Преподаватель не равно ни одному из списка k1 и только потом уже производить назначение. А если же равенство есть, то ничего делать не надо.
Не получается сравнить rs("Преподаватель") с данными из k1. Можете подсказать, что необходимо сделать?
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
12.10.2015, 01:59 27
Цитата Сообщение от АлександрКом Посмотреть сообщение
Если несколько преподавателей одной и той же дисциплины имеют одинаковую минимальную занятость, то после получения списка этих преподавателей
Visual Basic
1
k1 = DLookup("Преподаватель", "Преподаватель_с_мин_нагрузкой", "Дисциплина='" & p & "'")
необходимо проверить, что текущее значение поля Преподаватель не равно ни одному из списка k1 и только потом уже производить назначение. А если же равенство есть, то ничего делать не надо.
Создал новый запрос [missingTeacher] который находит преподавателей из [Преподаватель_с_мин_нагрузкой], отсутствующих в запросе [Распределение по семестрам]. В процедуре Подстановка_Click опрашивается этот запрос и, если поле freeTeacher (это поле Преподаватель из запроса Преподаватель_с_мин_нагрузкой) пустое, то полю рекордсета присваивается значение поля Преподаватель.
Вложения
Тип файла: rar InstSite1_2.rar (48.1 Кб, 11 просмотров)
2
1281 / 912 / 446
Регистрация: 21.10.2012
Сообщений: 2,589
12.10.2015, 20:25  [ТС] 28
Спасибо большое за предложенный вариант решения!
Только одна поправка:
Цитата Сообщение от mobile Посмотреть сообщение
В процедуре Подстановка_Click опрашивается этот запрос и, если поле freeTeacher (это поле Преподаватель из запроса Преподаватель_с_мин_нагрузкой) пустое, то полю рекордсета присваивается значение поля Преподаватель.
Должно быть наоборот, т.е. в случае пустого поля не должен назначаться Преподаватель, т.к. пустое поле значит, что данного преподавателя нет в списке с минимальной нагрузкой.
Поэтому записал вот так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 Set rs = db.OpenRecordset("Распределение по семестрам")
    rs.MoveFirst
    
    Do While Not rs.EOF
        p = rs("Дисциплина")
        
        With db.OpenRecordset("select * from missingTeacher where Дисциплина='" & p & "'")
           
        If IsNull(!freeTeacher) Then
                
        Else
                rs.Edit
                rs("Преподаватель") = !Преподаватель
                rs.Update
            End If
        End With
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
 
End Sub
Но почему-то после выполнения всех процедур преподаватели не меняются Что опять я не так написал?

Добавлено через 1 час 19 минут
Сделал вот так. Ошибок, вроде, нет
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Private Sub Подстановка_Click()
Dim rs As Recordset
Dim rrss As Recordset
Dim p As String
Dim a As Integer
 
 
Set rs = CurrentDb.OpenRecordset("Распределение по семестрам")
rs.MoveFirst
 
Do While Not rs.EOF
    p = rs("Дисциплина")
        Set rrss = CurrentDb.OpenRecordset("select * from Преподаватель_с_мин_нагрузкой where Дисциплина='" & p & "'")
        rrss.MoveFirst
 
        Do While Not rrss.EOF
    
        If rs("Преподаватель") = rrss("ФИО преподавателя") Then
        a = a + 1
        End If
 
        rrss.MoveNext
        Loop
 
    If a > 0 Then
        a = 0
    Else
        rrss.MoveFirst
        rs.Edit
        rs("Преподаватель") = rrss("ФИО преподавателя")
        rs.Update
    End If
 
    rrss.Close
    Set rrss = Nothing
    rs.MoveNext
Loop
 
rs.Close
Set rs = Nothing
MsgBox "Преподаватели назаначены!"
End Sub
0
12.10.2015, 20:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2015, 20:25
Помогаю со студенческими работами здесь

Автоматическое заполнение таблицы при обновлении поля штрихкода
Здравствуйте, Прошу помочь начинающему программисту :) Суть такая, я сделал базу с формами в...

Автоматическое заполнение поля таблицы на основании выбора в другой таблице
Уважаемые Помогите плиз. Есть две таблицы: Документы и Контакты. В первой заполняется два поля:...

Автоматическое заполнение поля таблицы/формы при вводе значения в другое поле
Добрый день, прошу помощи. Есть таблица Т1ИНДЕКС с полями «Индекс» и «Город». Есть Таблица...

Автоматическое заполнение поля
Ситуация такая. Есть форма и в ней куча всяких полей.Есть главная таблица к этой форме (возьмем...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru