| |
|
 |
 |
Копилка
- Отбросить время у значения типа DateTime
- можно так:
CDate(Fix([MyDateTimeField]))
- Сообщение #Error в поле при отсутствии записи смущает пользователя.
- Это легко устранить, создав источник данных элемента управления примерно в таком виде:
=IIf(IsError([MyField]); ""; [MyField])
- Часто для задания периода используется пара полей.
- В качестве значений по умолчанию для них удобно использовать такие выражения:
Первый день предыдущего месяца: =DateAdd("m";-1;DateSerial(Year(Date());Month(Date());1))
Последний день предыдущего месяца: =DateSerial(Year(Date());Month(Date());1)-1
Первый день текущего месяца: =DateSerial(Year(Date());Month(Date());1)
Последний день текущего месяца: =DateAdd("m";1;DateSerial(Year(Date());Month(Date());1))-1
- Переменные типа Variant очень удобно использовать для сложного монтажа
строковых параметров, используя особенности операций "+" и "&".
- Например, для динамического формирования условия WHERE. Здесь имеется ввиду,
что в форме есть списки, возвращающие целые коды либо ноль при выборе пункта "Все":
Me.cbx_1.RowSource = "0;""Все"";1;""Первый"";2;""Второй""..."
...
strSQL = "SELECT * FROM MyTable "
Следующие конструкции позволяют сформировать элементы условия для любых
значимых строк списков, либо Null, если выбран пункт "Все" или значение
вообще не выбрано (обрабатываются значения Ноль, Null, Пустая строка):
var_1 = "(MyFld_1=" + IIf(Val("" & Me.cbx_1) = 0, Null, "" & Me.cbx_1) + ")"
var_2 = "(MyFld_2=" + IIf(Val("" & Me.cbx_2) = 0, Null, "" & Me.cbx_2) + ")"
var_3 = "(MyFld_3=" + IIf(Val("" & Me.cbx_3) = 0, Null, "" & Me.cbx_3) + ")"
...
Теперь можно легко расставить операторы AND между элементами условия для любой
комбинации наличия/отсутствия этих элементов:
var_0 = var_1 & IIf(IsNull(var_1) Or IsNull(var_2), Null, " AND ") & var_2
var_0 = var_0 & IIf(IsNull(var_0) Or IsNull(var_3), Null, " AND ") & var_3
И, в конце концов, добавить ключевое слово WHERE, если получившаяся в итоге
строка условий не равна Null:
strSQL = strSQL & (" WHERE " + var_0)
- Источник записей и фильтр формы можно свободно использовать в отчёте.
- Но только, если источник записей - сохранённый запрос. При программном
формировании текста запроса (например, условия WHERE) достаточно менять свойство SQL
запроса. Тогда фильтр, заданный для формы (в т.ч. по выделению), можно
применить и к отчёту, указав его при открытии отчёта:
strSQL="SELECT * FROM MyTable WHERE MyField = 123"
CurrentDb.QueryDefs("MyDataSource").sql = strSQL
...
DoCmd.OpenReport "MyReport", acViewPreview, , Me.Filter
- Получение каталога, в котором находится msaccess.exe
AccessExePath = SysCmd(acSysCmdAccessDir)
- Получение имени владельца текущей базы данных
UserName = CurrentDb.Containers(0)(0).Owner
- Показ окна базы данных из программы
DoCmd.SelectObject acTable, , True
- Выгрузка текущей базы данных без закрытия Access
1. Application.CloseCurrentDatabase
2. DoCmd.SelectObject acTable, , True
DoCmd.close
- Установка аргументов командной строки из программы
Application.SetOption "Command-Line Arguments", "XXX"
|