Новости
Заметки
Копилка
Ссылки
Книги
О сайте




TopList

© SSY 2001-2004
 
Копилка
Отбросить время у значения типа 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"