Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 10
1

Нужны две формы для добавления, удаления и редактирования данных БД MS Access

09.04.2017, 14:01. Показов 1244. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть вот такая база данных. Есть макрос на добавление данных в форму. Но форма либо добавляет в одну таблицу (Срок), либо во все остальные ("Видеоадаптер", "СистемнаяПлата", "Процессор"), но по задумке, данные должны быть во всех таблицах.
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
'Добавление данных в форму
Private Sub Кнопка35_Click()
Dim a(1000) As String, i, j As Integer
    namisk = Array("[DMI]", "[Системная плата]", "[Видео Windows]")
    With Application.FileDialog(1)
        .Title = "Выбор файлов с тех-данными"
        .InitialFileName = CurrentProject.Path
        .AllowMultiSelect = True
        .Filters.Clear
        .Filters.Add "ini", "*.ini", 1
        i = .Show
        If i = 0 Then Exit Sub
        For k = 1 To .SelectedItems.Count
            FName = Trim(.SelectedItems.Item(k))
            Open FName For Input As #1
            b = 0
            j = 0
            Do While Not EOF(1)
                Line Input #1, s
                j = j + 1
                a(j) = s
            Loop
            For i = 1 To j
                If namisk(0) = a(i) Then
                    a(i + 2) = Mid(a(i + 2), InStr(1, a(i + 2), "= ") + 2, Len(a(i + 2)))
                    Процессор_Производитель.SetFocus
                    Процессор_Производитель.Text = a(i + 2)
                    a(i + 3) = Mid(a(i + 3), InStr(1, a(i + 3), "= ") + 2, Len(a(i + 3)))
                    Версия.SetFocus
                    Версия.Value = a(i + 3)
                    a(i + 4) = Mid(a(i + 4), InStr(1, a(i + 4), "= ") + 2, Len(a(i + 4)))
                    ТипРазъёма.SetFocus
                    ТипРазъёма.Value = a(i + 4)
                End If
                If namisk(1) = a(i) Then
                    a(i + 2) = Mid(a(i + 2), InStr(1, a(i + 2), "= ") + 2, Len(a(i + 2)))
                    СистемнаяПлата_Производитель.SetFocus
                    СистемнаяПлата_Производитель.Value = a(i + 2)
                    a(i + 3) = Mid(a(i + 3), InStr(1, a(i + 3), "= ") + 2, Len(a(i + 3)))
                    СистемнаяПлата.SetFocus
                    СистемнаяПлата.Value = a(i + 3)
                    a(i + 4) = Mid(a(i + 4), InStr(1, a(i + 4), "= ") + 2, Len(a(i + 4)))
                    СерийныйНомер.SetFocus
                    СерийныйНомер.Value = a(i + 4)
                End If
                If namisk(2) = a(i) Then
                    If Mid(a(i + 3), InStr(1, a(i + 3), "= ") + 2, 5) = "Intel" Then
                        a(i + 5) = Mid(a(i + 5), InStr(1, a(i + 5), "= ") + 2, Len(a(i + 5)))
                        Название.SetFocus
                        Название.Value = a(i + 5)
                        a(i + 4) = Mid(a(i + 4), InStr(1, a(i + 4), "= ") + 2, Len(a(i + 4)))
                        ОбьёмПамяти.SetFocus
                        ОбьёмПамяти.Value = a(i + 4)
                    Else
                        a(i + 3) = Mid(a(i + 3), InStr(1, a(i + 3), "= ") + 2, Len(a(i + 3)))
                        Название.SetFocus
                        Название.Value = a(i + 3)
                        a(i + 2) = Mid(a(i + 2), InStr(1, a(i + 2), "= ") + 2, Len(a(i + 2)))
                        ОбьёмПамяти.SetFocus
                        ОбьёмПамяти.Value = a(i + 2)
                    End If
                End If
                
            Next
            Close #1
        Next k
    End With
End Sub
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
'Добавление данных из формы в таблицы по условиям
Private Sub Кнопка53_Click()
Dim sql
Dim rst As DAO.Recordset
Dim db As DAO.Database
Dim f, r, k As String
СистемнаяПлата_Производитель.SetFocus
f = СистемнаяПлата_Производитель.Text
Процессор_Производитель.SetFocus
r = Процессор_Производитель.Text
Название.SetFocus
k = Название.Text
ПолеСоСписком36.SetFocus
q = ПолеСоСписком36.Value
If Len(f) > 0 Then
    sql = "select Вид, СрокГодности from Устройства WHERE Тип = 1"
    Set rst = CurrentDb.OpenRecordset(sql)
    s = rst!Вид
    g = rst!СрокГодности
    rst.Close
    sql = "select Max(КодУстройства) from СистемнаяПлата"
    Set rst = CurrentDb.OpenRecordset(sql)
    t = rst.Fields(0).Value
    rst.Close
    sql = "select СистемнаяПлата from СистемнаяПлата Where КодУстройства=" & t
    Set rst = CurrentDb.OpenRecordset(sql)
    z = rst.Fields(0).Value
    rst.Close
    Set db = Access.CurrentDb
    Set rst = db.OpenRecordset("Срок")
    With rst
    .AddNew
    !КодКомпьютера = q
    !Вид = s
    !Название = z
    !КодУстройства = t
    !ДатаУстановки = Now
    !СрокГодности = g
    !КонецЭксплуатации = DateAdd("yyyy", g, Now)
    .Update
    End With
    rst.Close
End If
If Len(r) > 0 Then
    sql = "select Вид, СрокГодности from Устройства WHERE Тип = 2"
    Set rst = CurrentDb.OpenRecordset(sql)
    s = rst!Вид
    g = rst!СрокГодности
    sql = "select Max(КодУстройства) from Процессор"
    Set rst = CurrentDb.OpenRecordset(sql)
    t = rst.Fields(0).Value
    rst.Close
    sql = "select Версия from Процессор Where КодУстройства=" & t
    Set rst = CurrentDb.OpenRecordset(sql)
    z = rst.Fields(0).Value
    rst.Close
    Set db = Access.CurrentDb
    Set rst = db.OpenRecordset("Срок")
    With rst
    .AddNew
    !КодКомпьютера = q
    !Вид = s
    !Название = z
    !КодУстройства = t
    !ДатаУстановки = Now
    !СрокГодности = g
    !КонецЭксплуатации = DateAdd("yyyy", g, Now)
    .Update
    End With
    rst.Close
End If
If Len(k) > 0 Then
    sql = "select Вид, СрокГодности from Устройства WHERE Тип = 3"
    Set rst = CurrentDb.OpenRecordset(sql)
    s = rst!Вид
    g = rst!СрокГодности
    sql = "select Max(КодУстройства) from Видеоадаптер"
    Set rst = CurrentDb.OpenRecordset(sql)
    t = rst.Fields(0).Value
    rst.Close
    sql = "select Название from Видеоадаптер Where КодУстройства=" & t
    Set rst = CurrentDb.OpenRecordset(sql)
    z = rst.Fields(0).Value
    rst.Close
    Set db = Access.CurrentDb
    Set rst = db.OpenRecordset("Срок")
    With rst
    .AddNew
    !КодКомпьютера = q
    !Вид = s
    !Название = z
    !КодУстройства = t
    !ДатаУстановки = Now
    !СрокГодности = g
    !КонецЭксплуатации = DateAdd("yyyy", g, Now)
    .Update
    End With
    rst.Close
End If
    
End Sub
Миниатюры
Нужны две формы для добавления, удаления и редактирования данных БД MS Access   Нужны две формы для добавления, удаления и редактирования данных БД MS Access   Нужны две формы для добавления, удаления и редактирования данных БД MS Access  

Вложения
Тип файла: rar db1.rar (66.6 Кб, 6 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2017, 14:01
Ответы с готовыми решениями:

Форма для добавления, редактирования, удаления данных
Уважаемые форумчане, подскажите, как лучше сделать и правильнее! В форме "Органы исполнительной...

Пример добавления, удаления и редактирования данных в БД *.mbd
нужен пример добавления, удаления и редактирования данных в БД *.mbd через классы...

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

Осуществить возможность добавления, редактирования и удаления элементов данных списков при единичном и множественном выборе
Может у кого есть код для представленных задач. Буду благодарен. 1. На рабочем листе имеются два...

22
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 10
11.04.2017, 16:07  [ТС] 2
Ладно, БД была никакая, поэтому её полностью переделали. Как раскрасить ячейки отчёта ACCESS по условию?
0
10482 / 5465 / 1377
Регистрация: 05.10.2016
Сообщений: 15,487
11.04.2017, 16:49 3
Цитата Сообщение от VADYA12 Посмотреть сообщение
Ладно, БД была никакая, поэтому её полностью переделал
Точно переделали? - схема данных (выше) не логична никак.

Цитата Сообщение от VADYA12 Посмотреть сообщение
Как раскрасить ячейки отчёта ACCESS по условию?
Да так же как и в форме.
У богатых свои причуды....
Небось цветной лазерник?

Добавлено через 8 минут
BTW: вместо срока годности компа - я бы ввёл наработку часов HDD + дату теста + состояние на дату.
+ Дату последнего обслуживания (чистки)
+ Дату установки блока питания и куллера CPU
А остальное не портиться - и может служить десятилетиями.
(Так... просто "заметки на полях" и отвечать не обязательно)
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 10
11.04.2017, 17:19  [ТС] 4
Да, в смысле, мне нужно на форме закрасить ячейку с датой по условию.
Миниатюры
Нужны две формы для добавления, удаления и редактирования данных БД MS Access  
0
10482 / 5465 / 1377
Регистрация: 05.10.2016
Сообщений: 15,487
11.04.2017, 17:30 5
Цитата Сообщение от VADYA12 Посмотреть сообщение
мне нужно на форме закрасить ячейку с датой по условию.
Условное форматирование по значению поля - чем не подходит?
Правой кноп. мышки в режиме конструктора....
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 10
11.04.2017, 17:34  [ТС] 6
Желательно бы средствами VBA
0
Модератор
Эксперт MS Access
6017 / 2845 / 693
Регистрация: 12.06.2016
Сообщений: 7,642
11.04.2017, 17:43 7
Цитата Сообщение от VADYA12 Посмотреть сообщение
Желательно бы средствами VBA
Примерно так (но это тоже условное форматирование):
Visual Basic
1
2
поле.FormatConditions.Add acExpression,.....
поле.FormatConditions(0).BackColor = ....
По-другому в ленточной форме разные строки красить по-разному не получится.
1
10482 / 5465 / 1377
Регистрация: 05.10.2016
Сообщений: 15,487
11.04.2017, 18:11 8
Цитата Сообщение от Capi Посмотреть сообщение
По-другому в ленточной форме разные строки красить по-разному не получится.
Очень верное замечание - ведь в ленточной форме все значения базового поля для условного форматирования одинаковые всегда - не зависимо от данных формы.

И вообще условное форматирование придумано не для ленточных форм, а для того что бы мы с Capi, мусорили в топиках...

Добавлено через 7 минут
VADYA12, средствами VBA - так средствами VBA.
Но смысла я в этом не наблюдаю.
Как зададите формат (по условию) - так и будет.
Если нужно подкрасить "на лету" и по быстренькому - есть свойство Format - но там всего 4 варианта - Null (пустые), Нулевые, Положительные и Отрицательные значения поля..
Это как вариант.
0
Модератор
Эксперт MS Access
6017 / 2845 / 693
Регистрация: 12.06.2016
Сообщений: 7,642
11.04.2017, 18:15 9
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Цитата Сообщение от Capi
По-другому в ленточной форме разные строки красить по-разному не получится.
Очень верное замечание - ведь в ленточной форме все значения базового поля для условного форматирования одинаковые всегда - не зависимо от данных формы.
Имелось в виду, что конструкции типа
Visual Basic
1
2
3
4
5
If ..... Then
 поле.BackColor = ....
Else
 поле.BackColor = ....
End If
красят поля всех записей формы.
Контрол-то один.
И лишь условное форматирование позволяет получить разную раскраску.
Ухищрения типа полей-подложек не рассматриваем.
0
10482 / 5465 / 1377
Регистрация: 05.10.2016
Сообщений: 15,487
11.04.2017, 18:16 10
Цитата Сообщение от Capi Посмотреть сообщение
По-другому в ленточной форме разные строки красить по-разному не получится
Получиться - особенно если попробовать хоть раз.
0
Модератор
Эксперт MS Access
6017 / 2845 / 693
Регистрация: 12.06.2016
Сообщений: 7,642
11.04.2017, 18:17 11
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Если нужно подкрасить "на лету" и по быстренькому - есть свойство Format - но там всего 4 варианта - Null (пустые), Нулевые, Положительные и Отрицательные значения поля..
Это как вариант.
Только для числовых значений и только цвет шрифта.
Не цвет фона.
1
10482 / 5465 / 1377
Регистрация: 05.10.2016
Сообщений: 15,487
11.04.2017, 18:20 12
Цитата Сообщение от Capi Посмотреть сообщение
Имелось в виду, что конструкции типа
Не - так не пойдёт- точно!
Работаем со всем полем по всей форме - точно НЕТ!

Добавлено через 2 минуты
Цитата Сообщение от Capi Посмотреть сообщение
Ухищрения типа полей-подложек не рассматриваем.
Я сабжем - двумя выше предложил же условное форматирование - о чём спорим??? - не понимаю.
0
Модератор
Эксперт MS Access
6017 / 2845 / 693
Регистрация: 12.06.2016
Сообщений: 7,642
11.04.2017, 18:25 13
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Получиться - особенно если попробовать хоть раз.
Цитата Сообщение от Capi Посмотреть сообщение
Ухищрения типа полей-подложек не рассматриваем.
Или это про какие-то другие способы (с Join-ами, например)?

В первом слове "ь" не нужен.

Добавлено через 3 минуты
Цитата Сообщение от Eugene-LS Посмотреть сообщение
о чём спорим??? - не понимаю.
А где спор?
Просто рассуждения.
Перечисляю возможные варианты для полноты картины.
0
10482 / 5465 / 1377
Регистрация: 05.10.2016
Сообщений: 15,487
11.04.2017, 18:30 14
Цитата Сообщение от Capi Посмотреть сообщение
Или это про какие-то другие способы (с Join-ами, например)?
Не напрягайте пожалуйста ТС лишними извращениями.
Он сам до них дойдёт, потом... если захочет....

Добавлено через 2 минуты
VADYA12, мы правильно вас поняли? - вы хотите раскрасить записи по значению - или подсветить активную запись?
Это далеко не одно и то-же!
Запутали вы меня совсем старого....
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 10
11.04.2017, 18:31  [ТС] 15
В подчинённой форме по средствам VBA в событии Form_Activate - всё получилось.
На самой форме - не могу придумать куда запихнуть код, чтобы он выполнялся. Либо не находит указанный объект либо не реагирует.

Visual Basic
1
2
3
4
date_so.FormatConditions.Add acExpression, acGreaterThanOrEqual, DateDiff("m", date_so, Date), 6
date_so.FormatConditions.Add acLess, DateDiff("m", date_so, Date), 6
date_so.FormatConditions(0).BackColor = vbGreen
date_so.FormatConditions(1).BackColor = vbRed
0
10482 / 5465 / 1377
Регистрация: 05.10.2016
Сообщений: 15,487
11.04.2017, 18:37 16
Цитата Сообщение от Capi Посмотреть сообщение
Только для числовых значений и только цвет шрифта.
Не цвет фона.
Спасибо за совершенно верное и своевременное уточнение - да! так и есть.
Но зато работает на порядок быстрее.

Добавлено через 3 минуты
Цитата Сообщение от VADYA12 Посмотреть сообщение
событии Form_Activate - всё получилось.
Вы про Enabled вроде забыли - ну так мелочь....
0
Модератор
Эксперт MS Access
6017 / 2845 / 693
Регистрация: 12.06.2016
Сообщений: 7,642
11.04.2017, 18:37 17
Eugene-LS,

Это был вопрос к Вам по поводу
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Получиться - особенно если попробовать хоть раз.
Но не хотите отвечать, не надо.
0
10482 / 5465 / 1377
Регистрация: 05.10.2016
Сообщений: 15,487
11.04.2017, 18:41 18
Цитата Сообщение от Capi Посмотреть сообщение
Но не хотите отвечать, не надо.
Загадки не осознал - но намёк понял.
Не сегодня - Ладно?
0
Модератор
Эксперт MS Access
6017 / 2845 / 693
Регистрация: 12.06.2016
Сообщений: 7,642
11.04.2017, 18:42 19
Цитата Сообщение от VADYA12 Посмотреть сообщение
Visual Basic
1
date_so.FormatConditions.Add acLess, DateDiff("m", date_so, Date), 6
Пропущено acExpression.
1
10482 / 5465 / 1377
Регистрация: 05.10.2016
Сообщений: 15,487
11.04.2017, 18:45 20
Цитата Сообщение от Capi Посмотреть сообщение
Пропущено acExpression.
Наверное я тупой - но зачем кодом задавать условное форматирование?
Я так и не понял....
(Отвечать не нужно)
0
11.04.2017, 18:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2017, 18:45
Помогаю со студенческими работами здесь

Как и где лучше хранить данные для их добавления, удаления и редактирования
Всем доброго дня. Прошу внимания и совета, помощи. Незнаю как реализовать, дайте пожалуйста...

Организация хранения, добавления, удаления, редактирования задач для курсового проекта
Добавлено через 7 минут Вечер добрый. Нужна помощь по структурной реализации. Есть задание:...

MS Access Открытие формы для добавления записи и автоматический ввод данных
Добрый день! В MS Access 2007, через VBA, пытаюсь решить такую ситуацию: Необходимо, по нажатию...

DataBinding + DataGridView подтверждение удаления (редактирования, добавления)
Всем привет. Ситуация следующая. Есть DataGridView, в качестве источника данных использую...


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

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