MS Access - полезные решения

Настройка компьютера, смартфона, программы и железо. Интернет и электронная коммерция с обсуждением площадок.

Модератор: Valery

Правила форума
Гость видит 1е сообщение
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22307
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Помощь! MS Access - полезные решения

Сообщение Valery »

F11 - показывает/скрывает область навигации (таблицы, запросы, формы, макросы и т.д.)
Chr(13) + Chr(10) - возврат каретки
Chr(9) - символ табуляции
При попытке установить "Подчиненные поля": "Невозможно установить связь между свободными формами" - прописать вручную

Готовые решения MS Access:

По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22307
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Обычная тема MS Access - открытие формы в режиме таблицы, добавления записи или перехода на новую запись

Сообщение Valery »

Свойство формы режим по умолчанию - таблица
При открытии из окна базы данных открывается в режиме таблицы.
При открытии посредством кнопки в форме - открывается в режиме одиночной формы.
Решение:
MS Access - открытие формы в режиме таблицы
Найти:

Код: Выделить всё

DoCmd.OpenForm stDocName, , , stLinkCriteria
Заменить на:

Код: Выделить всё

DoCmd.OpenForm stDocName, acFormDS, , stLinkCriteria

' Открыть форму в режиме добавления новой записи:

Код: Выделить всё

DoCmd.OpenForm stDocName, , , stLinkCriteria, acFormAdd

' Перейти к новой записи после открытия формы

Код: Выделить всё

'Открытие
DoCmd.OpenForm stDocName, , , stLinkCriteria
'Переход на новую запись
DoCmd.GoToRecord , , acNewRec
Последний раз редактировалось Valery 29.11.2014 10:50, всего редактировалось 1 раз.
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22307
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Сменить формат поля дата

Сообщение Valery »

Дата в access отображается 01.12.2024, чтобы изменить на 2024.12.01

Свойства поля - Формат поля вместо списка указываем: yyyy.mm.dd

Если надо изменить дату в запросе:

Код: Выделить всё

SELECT Format([Дата]; "yyyy.mm.dd") AS ФорматДата
FROM Таблица;
Или на VBA:

Код: Выделить всё

Me.DateField = Format(Me.DateField; "yyyy.mm.dd")
txtDateField - имя поля, содержащего дату.
Код можно разместить в обработчике события формы или отчета (`Form_Load`, `Report_Open`), чтобы автоматически преобразовывать формат даты при открытии формы или отчета.
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22307
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Дату из календаря записать в поле формы

Сообщение Valery »

В форме access есть календарь. При клике по дате в нем записать эту дату в поле формы [date]:

Код: Выделить всё

Private Sub Calendar1_Click()
    ' Извлечения даты из элемента управления календарём и запись в поле date.
    Me.[date] = Me.Calendar1.Value
End Sub

Либо с появлением MsgBox Да/Нет:

Код: Выделить всё

Private Sub Calendar1_Click()
    Dim userResponse As VbMsgBoxResult
    ' Показываем сообщение с запросом на подтверждение записи даты
    userResponse = MsgBox("Записать выбранную дату?", vbYesNo + vbQuestion, "Подтверждение")

    ' Проверяем ответ пользователя
    If userResponse = vbYes Then
        Me.[date] = Me.Calendar1.Value  ' Записываем дату
    Else
        Exit Sub  ' Выходим из процедуры, не записывая дату
    End If
End Sub
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22307
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Обновление подчиненной формы

Сообщение Valery »

Обновление подчиненной формы:

Код: Выделить всё

Forms("Имя_Главной_Формы").[Имя_Подчиненной_формы].Form.Requery
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22307
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Открыть форму с конкретной записью по нажатию кнопки

Сообщение Valery »

Открыть форму с конкретной записью

Код: Выделить всё

    Dim stDocName As String
    Dim stLinkCriteria As String

    'Открываемая форма
    stDocName = "photosession-info"
    
    'id открываемой формы = значению поля формы в которой кнопка
    stLinkCriteria = "[id]=" & Me![photosession]
    DoCmd.OpenForm stDocName, , , stLinkCriteria
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22307
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Выполнение запроса на удаление записей из формы

Сообщение Valery »

Выполнение запроса на удаление записей из формы нажатием кнопки:

Код: Выделить всё

    DoCmd.SetWarnings False ' Отключить предупреждения
    DoCmd.OpenQuery "photosession_info file rating 0"  ' Имя запроса в БД
    DoCmd.SetWarnings True ' Включить предупреждения снова
    Me.Requery ' Обновить форму после удаления записей
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22307
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Установить значение по умолчанию +1 в поле для новой записи в форме Access

Сообщение Valery »

Установить значение по умолчанию +1 в поле формы в Access:
Функция находит максимальное значение `id` в таблице `[photosession-info tag]`.
- **Nz(..., 0)**: Гарантирует, что если `DMax` не найдет никаких значений (например, если таблица пуста), то будет возвращено `0`.
- **+1**: Увеличивает найденное максимальное значение на 1.

Таким образом, когда добавляется новая запись через форму, данное поле автоматически заполняется следующим числом после текущего максимального значения `id`.

Код: Выделить всё

=Nz(DMax("[id]";"[photosession-info tag]");0)+1
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22307
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Получить значение из поля после 16 символа

Сообщение Valery »

Код получает значение из поля link в таблице links_post, и отрезает при выводе часть после 16 символа:

Код: Выделить всё

=Mid(DLookUp("[link]";"[photosession-model-relise]";"[id] = [photosession]");16)
Если поля [ID] в форме нет, но это связанное поле, то его значение можно получить так:

Код: Выделить всё

="Md: @" & Mid(DLookUp("[link]"; "[photosession-model-relise]"; "[id] = " & DLookUp("[model]"; "[photosession-info]"; "[id] = [photosession]")); 16)
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22307
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Универсальная функция, которая принимает значение поля в качестве параметра и изменяет его цвет

Сообщение Valery »

1. Создать общий модуль (или в уже имеющийся) добавить функцию:

Код: Выделить всё

Public Sub SetFieldColor(ctrl As Control)
    Dim value As Integer
    value = ctrl.Value ' Получаем значение из переданного поля

    Select Case value
        Case 0
            ctrl.BackColor = RGB(255, 255, 255) ' Белый
        Case 1
            ctrl.BackColor = RGB(0, 255, 255) ' Бирюзовый
        Case 2
            ctrl.BackColor = RGB(102, 255, 0) ' Зеленый
        Case 3
            ctrl.BackColor = RGB(255, 255, 0) ' Желтый
        Case 4
            ctrl.BackColor = RGB(255, 0, 255) ' Маджента
        Case 5
            ctrl.BackColor = RGB(75, 0, 130) ' Индиго
        Case Else
            ctrl.BackColor = RGB(255, 0, 0) ' Красный
    End Select  
End Sub
2. В форме вызовываем эту функцию и передаем ей нужные поля. Напр. При загрузке формы (Form_Load):

Код: Выделить всё

Private Sub Form_Load()
    'Поле file_set
    Call SetFieldColor(Me.file_set)
     'Поле другое_поле
    Call SetFieldColor(Me.другое_поле)
End Sub
3. В поле - После обновления значений в полях (AfterUpdate):

Код: Выделить всё

Private Sub file_set_AfterUpdate()
    Call SetFieldColor(Me.file_set)
End Sub

Private Sub another_field_AfterUpdate()
    Call SetFieldColor(Me.другое_поле)
End Sub
Чтобы цвет поля менялся при переходе между записями в форме, нужно добавить вызов функции SetFieldColor в событие Form_Current. Это событие срабатывает каждый раз, когда активная запись изменяется:

Код: Выделить всё

Private Sub Form_Current()
    Call SetFieldColor(Me.file_set)
    'Call SetFieldColor(Me.другое_поле)
End Sub
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.