5 строк кода

Как писать приложения на MS Access

Archive for the ‘Утилиты’ Category

Как добавить новое значение в поле со списком

Комментариев нет

При заполнении какой-либо информации через поле со списком у пользователей возникает желание расширить предложенные варианты. Если поле со списком основано на таблице (далее справочник), то без проблем. Можно добавить отдельную форму для пополнения справочника. Но увы со временем пользователи забывают об этой возможности, да и данные в полях со списком нужно как-то обновить.

Гораздо быстрей и дешевле сделать добавление записей в таблицу-справочник непосредственно из самого поля со списком. Для этого есть специальное событие NotInList (Отсутсвует в списке). Что-бы каждый раз не писать код для добавления записей в таблице написана простая функция VC_AddToSpr(), она живет у меня в модуле mc_form.

Рассмотрим в качестве примера обработчик события для поля со списком с названиями стран:

Private Sub P_K_STRANA_NotInList(NewData As String, Response As Integer)
    Response = mc_Form.VC_AddToSpr("s_strana", "T_STRANA", NewData)
End Sub

Как видите все просто. Нужно только указать имя таблицы, поле, куда сохранить данные, сами данные и обязательно результат функции VC_AddToSpr() записать в переменную Response. Иначе не заработает!

Варианты допустимых значений переменной Response и их описание можно посмотреть в справке MS Acceess.

А вот и сама функция:

Public Function CM_AddToSpr(strTabl As String, strField As String, NewData As Variant) As Integer
' Добавляет в справочник значение, используется на формах для полей со списком.
' Вызывать на событие NotInList (отсутствует в списке)
' Вход:
'       strTabl    - имя таблицы
'       strField   - имя поля
'       NewData - новое значение
' Выход: возвращает значение для параметра события - Response

    If Trim(NewData) = "" Then
        MsgBox "Вы ввели пустую строку. В введенной строке должны присутствовать видимые символы.", vbExclamation
        CM_AddToSpr = acDataErrDisplay
    End If
    
    If MsgBox("Введённое значение '" & NewData & "' отсутствует в справочнике, добавить справочник?", vbYesNo + vbQuestion, "Вопрос") = vbYes Then
        CM_AddToSpr = acDataErrAdded
        If VarType(NewData) <> vbString Then
            CurrentDb.Execute "INSERT INTO " & strTabl & " (" & strField & ") Values (" & NewData & ");"
        Else
            CurrentDb.Execute "INSERT INTO " & strTabl & " (" & strField & ") Values ('" & Trim(NewData) & "');"
        End If
    End If

End Function

До встречи!

(с) Скоков Сергей

Подписаться на: RSS или e-mail рассылку или добавить в ЖЖ друзья.

Written by Сергей Скоков

Март 9th, 2011 at 11:28 пп

Как преобразовать записи таблицы в строку

Комментариев нет

Я хочу предоставить Вам несколько очень полезных функций, которые позволяют собрать данные из таблицы в строку через разделитель:

  • CM_RecsInStr()
  • CM_RecsInStrExt()

Отличия между ними заключаются в параметрах. CM_RecsInStr() работает с Recordset, а CM_RecsInStrExt() с запросом или именем таблицы.

Эти функции я часто использую, что бы показать информацию о сложном объекте в сжатом виде. Например, для заказа можно показать выбранные товары через запятую, при этом можно ограничить вывод первыми 10 записями.

Пример использования:

Dim lK_OREDER As Long
Dim rst As DAO.Recordset
Dim stSQL As String

lK_OREDER = 123
stSQL = "SELECT TOP 25 T_ORDER_ITEM & '(' & N_COUNT & ')' As T_ITEM FROM K_ORDER = " & lK_OREDER

Set rst = CurrentDb.OpenRecordset(stSQL, dbOpenForwardOnly)

MsgBox CM_RecsInStr(rst, "T_ITEM", " | ")
MsgBox CM_RecsInStr(stSQL , "T_ITEM", " | ")

В результате работы примера получим примерно такую строку:

Товар А (1) | Товар Б (2) | Товар В (1)

Наиболее удачной получилось CM_RecsInStrExt(). Иногда для простоты я ее использую в качестве истоника данных полей на формах.

Текст функций:
Read the rest of this entry »

Written by Сергей Скоков

Февраль 23rd, 2011 at 1:14 пп