Для начала определим название нашей программы. Пусть это будет приложение Microsoft Access 2000 «Новый калькулятор.mdb». Разработку его начнем с описания переменных, констант, которые потребуются при создании нашей базы данных.
appAccess – это объектная переменная, в которой мы будем создавать новую базу данных
appCM – это константа, которая управляет размером управляющих элементов в формах, отчетах. В Access элементы измеряются в твипах, а нам удобнее указывать размеры в сантиметрах, поэтому, и вводим эту переменную.
appFolder – эта переменная будет содержать главный каталог нашего приложения. Далее мы будем использовать ее для загрузки рисунков, программ, справки и других внешних элементов базы данных
Продолжим создание приложения с разработки всех функций, которые требуются для работы базы данных. Сначала программным способом, т.е. без мастеров, создадим базу данных, затем таблицы, запросы и т.д.
Профессионально выполненная программа всегда имеет внешние файлы, например basic-программы, рисунки *.bmp. Чтобы к ним обеспечить быстрый доступ, напишем функцию, которая будет определять папку, где установлена основная программа. Применяется эта программа для назначения данных глобальной переменной appFolder
Dim fs
On Error GoTo 999 'Назначаем переход по ошибке
Set fs = CreateObject("Scripting.FileSystemObject") 'Создаем файловую систему
funGetAppFolder = fs.GetFile(CurrentDb.Name).ParentFolder 'Находим папку
Set fs = Nothing 'Уничтожаем переменную
Exit Function 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
И так после подготовительных действий, Вы можете приступить к созданию базы данных в файловой системе. Саму базу данных «Новый калькулятор.mdb» (переменная strMDB) создим программным методом, используя встроенный язык программирования Visual Basic Access, аналогично способу, указанному слева с помощью мастера Access.
Dim sFullPath As String
On Error GoTo 999 'Назначаем переход по ошибке
funCreateDatabase = False 'Возвращаем результат при ошибке
sFullPath = appFolder & "\" & strMDB 'Полное имя файла
If Dir(sFullPath) <> "" Then Kill sFullPath 'Уничтожаем старую базу данных
DBEngine.CreateDatabase sFullPath, dbLangCyrillic 'Создаем базу данных
appAccess.OpenCurrentDatabase sFullPath 'Открываем базу данных
funInitReferences '<2> Настраиваем ссылки базы данных
funInitStartupProperties '<2> Настраиваем стартовые свойства
funCreateDatabase = True 'Возвращаем результат
Exit Function ‘Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Если мы открыли базу данных, то ее необходимо закрыть. Это хороший способ программирования, хотя при закрытии окна Access (appAccess.Quit) база данных закрывается автоматически.
В этом примере база данных «Новый калькулятор.mdb» (переменная strMDB) будет закрыта, все ее объекты сохранены, а потом произойдет сжатие данных.
On Error GoTo 999 'Назначаем переход по ошибке
funCloseDatabase = False 'Возвращаем результат при ошибке
appAccess.CloseCurrentDatabase 'Закрываем базу данных
appAccess.Quit acQuitSaveAll 'Выходим c сохранением
funCompactDatabase strMDB '<2> Сжимаем базу данных
funCloseDatabase = True 'Возвращаем результат
Exit Function 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
При создании базы данных нам потребуются внешние функции, которые хранятся в специальных библиотеках, файлах с расширением DLL.
В этом примере показано, как создать программу, которая будет автоматически подключать нужные Вам библиотеки, а в качестве шаблона ссылок использует текущую базу данных.
Например, ссылка на библиотеку Office хранится в файле C:\Program Files\Microsoft Office\ Office\MSO9.DLL
Dim sFullPath As String, ref As Reference
On Error GoTo 999 'Назначаем переход по ошибке
With appAccess 'Выбираем базу данных
For Each ref In .References
If ref.BuiltIn = False Then _
.References.Remove ref 'Удаляем лишние ссылки
Next
End With
sFullPath = References("Office").FullPath
appAccess.References.AddFromFile (sFullPath) 'Устанавливаем Office
sFullPath = References("DAO").FullPath
appAccess.References.AddFromFile (sFullPath) 'Устанавливаем DAO
Exit Function 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Когда Вы открываете базу данных созданную начинающим специалистом с помощью мастеров Access, то Вам сразу «бросается в глаза» некачественный интерфейс (лишние кнопки, меню, окна, разбросанные по экрану), который и дает Вам общую оценку его работе.
В этом примере давайте настроим базу данных так, чтобы в ней был начальный «приятный» интерфейс, а именно дадим базе данных заголовок, иконку, погасим ненужные окна и меню.
Совет. Изучите внимательно настройки базы данных в справочной системе Microsoft Access, введите их в свои программы, и тогда программное обеспечение, разрабатываемое Вами, будет иметь больший успех и уважение у пользователей.
'<2> Изменяем заголовок
'<2> Изменяем иконку
В предыдущем разделе мы меняли заголовок базы данных, а здесь показан пример, как изменить свойство базы данных, используя встроенные функции Access.
Дополнение. Созданные свойства в отличие от переменных хранятся в базе данных постоянно, и Вам достаточно назначить их один раз, чтобы потом они уже использовались автоматически при открытии базы данных.
Например, если Вы погасили в каком-то сеансе с базой данных ее основное окно (StartupShowDBWindow = False), то в следующих сеансах работы оно не будет отображаться на экране.
'Название
' Изменить/создать свойство базы данных
'Параметры:
' strName - имя свойства (Description, Format ...)
' varType - тип свойства (dbText, dbLong ...)
' varValue - значение свойства
'
Dim prp As Variant, dbs As Database
On Error GoTo 999 'Назначаем переход по ошибке
dbChangeProperty = False 'Возвращаем результат при ошибке
Set dbs = appAccess.CurrentDb 'Выбираем базу
dbs.Properties(strName) = varValue 'Присваиваем значение
dbChangeProperty = True 'Возвращаем результат
Exit Function 'Выходим из программы
999:
If Err = 3270 Then 'Свойство не найдено
Set prp = dbs.CreateProperty(strName, varType, varValue) 'Создаем свойство
dbs.Properties.Append prp 'Добавляем свойство
Err.Clear 'Очищаем поток от ошибки
Resume Next 'Возвращаемся к следующему оператору
End If
Err.Clear 'Очищаем поток от незнакомой ошибки
Теперь Вы научились создавать базу данных не с помощью мастера Access, а профессионально с помощью языка программирования Microsoft Visual Basic Access.
Ваш результат Вы можете увидеть, нажав кнопку [Проверка N2] внизу экрана. Перед Вами отобразиться база данных, в которой пока не будет ни одного элемента.
На следующем этапе программирования мы будем создавать таблицу «Калькулятор» с полями и необходимыми свойствами.
Итак, если Вы не желаете, посмотреть на пустую базу данных, нажмите кнопку Вперед>
При работе с базой данных Microsoft Access у Вас постепенно будет расти размер базы данных. Это связано с тем, что, удаляя элементы или записи «физически» из базы они не удаляются, уничтожаются только ссылки. Для уменьшения размера базы данных, напишем программу для сжатия ее файла.
В качестве имени файла, передаваемого в программу, введем переменную StrMDB.
Dim tmpMDB As String, fs, sFullPath As String
On Error GoTo 999 'Назначаем переход по ошибке
funCompactDatabase = False 'Возвращаем результат при ошибке
sFullPath = appFolder & "\" & strMDB 'Устанавливаем полное имя файла
Set fs = CreateObject("Scripting.FileSystemObject") 'Создаем файловую систему
tmpMDB = fs.GetTempName 'Получаем временный файл
DBEngine.CompactDatabase sFullPath, tmpMDB, dbLangCyrillic 'Сжимаем базу данных
fs.CopyFile tmpMDB, sFullPath, True 'Переписываем файл
Kill tmpMDB 'Удаляем временный файл
Set fs = Nothing 'Уничтожаем объект файловой системы
funCompactDatabase = True 'Возвращаем результат
Exit Function 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Наверное, Вы уже научились создавать таблицу с помощью мастера, этот способ указан слева.
Теперь давайте попробуем создать ее программным способом. Иногда этот способ становится более предпочтительным, чем стандартный. В качестве переменной создаваемой таблицы будем использовать имя StrTable = «Калькулятор»
Dim dbs As Database, tdf As TableDef
On Error GoTo 999 'Назначаем переход по ошибке
funCreateTable = False 'Возвращаем результат при ошибке
If funVerifyTable(strTable) = False Then 'Проверяем таблицу
Set dbs = appAccess.CurrentDb 'Находим базу данных
Set tdf = dbs.CreateTableDef(strTable) 'Создаем таблицу
tdf.Fields.Append tdf.CreateField("Пункт", dbLong) 'Создаем 1 поле
dbs.TableDefs.Append tdf 'Добавляем таблицу
funCreateFields strTable '<3> Создаем поля
funCreateTable = True 'Возвращаем результат
End If
Exit Function
999:
MsgBox Err.Description, vbCritical, "Создание таблицы" 'Сообщаем красиво об ошибке
Err.Clear 'Очищаем поток от ошибок
Очень часто при работе с базой данных Вам надо проверить наличие в базе данных объекта. На данном примере указан способ проверки таблицы в базе данных. Если объекта нет, то случается ошибка и программа очищает поток от ошибок, возвращая значение False.
Dim tdf As TableDef
On Error GoTo 999 'Назначаем переход по ошибке
funVerifyTable = False 'Возвращаем результат при ошибке
Set tdf = appAccess.CurrentDb.TableDefs(strTable) 'Находим объект
If (tdf Is Nothing) = False Then funVerifyTable = True 'Проверяем объект
Set tdf = Nothing 'Уничтожаем переменную
Exit Function 'Выходим из программы
999:
Err.Clear 'Очищаем поток от ошибок
Когда Вы создаете поле программным методом, некоторые его свойства, например, Description не создаются автоматически. Вам необходимо научиться изменять свойства полей базы данных, а в случае необходимости добавлять их в базу данных.
На этом примере показано, как изменить значение свойства поля базы данных. В данной программе также предусмотрено, что если свойство отсутствует, то оно будет добавлено в базу данных.
'Параметры:
' fld - поле в таблице (Объект Field)
' strName - имя свойства (Description, Format ...)
' varType - тип свойства (dbText, dbLong ...)
' varValue - значение свойства
'
Dim prp As Variant
On Error GoTo 999 'Назначаем переход по ошибке
funChangeProperty = False 'Возвращаем результат при ошибке
fld.Properties(strName) = varValue 'Присваиваем значение полю
funChangeProperty = True 'Возвращаем результат
Exit Function 'Выходим из программы
999:
If Err = 3270 Then 'Свойство не найдено
Set prp = fld.CreateProperty(strName, varType, varValue) 'Создаем свойство
fld.Properties.Append prp 'Добавляем свойство
Err.Clear 'Очищаем поток от ошибки
Resume Next 'Возвращаемся к следующему оператору
End If
Err.Clear 'Очищаем от незнакомой ошибки
Теперь Вы научились создавать таблицы и поля базы данных, а также изменять из свойства.
Ваш результат обучения Вы можете увидеть, нажав кнопку [Проверка N3] внизу экрана. Перед Вами отобразится база данных, в которой будет пустая таблица «Калькулятор».
На следующем этапе программирования мы будем создавать запросы SQL, которые нужны для управления формой калькулятора
Итак для изучения следующей лекции нажмите кнопку Вперед>
Создание полей с помощью программы является важным элементом программирования баз данных. Так как в складском и бухгалтерском учете очень сложно учесть все поля таблиц из-за часто меняющихся требований к учету, естественно Вы должны предусмотреть в своих программах изменение базы данных различных версий по шаблону (метод называется репликацией).
В данном примере в таблицу «Калькулятор», переменная strTable, добавляются два новых поля Выражение и Итог, а также изменяются свойства поля Пункт
Public Function funCreateFields(strTable As String) As Boolean
Dim dbs As Database, tdf As TableDef, fld As Field
On Error GoTo 999 'Назначаем переход по ошибке
funCreateFields = False 'Возвращаем результат при ошибке
Set dbs = appAccess.CurrentDb ‘Определяем базу данных
Set tdf = dbs.TableDefs(strTable) 'Находим таблицу
With tdf 'Выбираем таблицу для изменения
.Fields.Append .CreateField("Выражение", dbText, 75) 'Создаем поле Выражение
.Fields.Append .CreateField("Итог", dbDouble) 'Создаем поле Итог
End With
Set fld = tdf.Fields("Пункт") 'Изменяем свойства поля "Пункт"
funChangeProperty fld, "Description", dbText, "Номер выражения в калькуляторе" 'Изменяем описание
funChangeProperty fld, "Format", dbText, "Fixed" 'Назначаем фиксированный формат
funChangeProperty fld, "DecimalPlaced", dbByte, 0 'Отключаем десятичные знаки
Set fld = Nothing 'Уничтожаем переменную поля
Set tdf = Nothing 'Уничтожаем переменную таблицы
funCreateFields = True 'Возвращаем результат
Exit Function 'Выходим из программы
999:
MsgBox Err.Description, vbCritical, "Создание таблицы" 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
End Function
В этом примере мы создадим 2 запроса SQL и сохраним их в базе данных. Первый запрос будет создан для выборки некоторых значений из таблицы, а второй для удаления значений из списка калькулятора.
Dim dbs As Database, sSQL As String
On Error GoTo 999 'Переходим по ошибке
funCreateQueries = False 'Возвращаем результат при ошибке
subDeleteQuery "ЗапросСписокКалькулятора" 'Удяляем старый запрос
subDeleteQuery "ЗапросУдалитьСписок" 'Удяляем старый запрос
Set dbs = appAccess.CurrentDb 'Выбираем базу данных
With dbs
sSQL = "SELECT Выражение, Итог FROM Калькулятор ORDER BY “ & _
“Пункт DESC;"
.CreateQueryDef "ЗапросСписокКалькулятора", sSQL 'запрос на выборку
sSQL = "DELETE Калькулятор.* FROM Калькулятор;"
.CreateQueryDef "ЗапросУдалитьСписок", sSQL 'запрос на удаление
End With
funCreateQueries = True 'Возвращаем результат
Exit Function 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Иногда при разработке базы данных Вам необходимо будет удалить запрос из программы. В этом примере показывается, как можно удалить запрос из базы данных. StrQueryName – это переменная, которая содержит имя запроса.
On Error GoTo 999 'Включаем обработчик ошибок
appAccess.DoCmd.DeleteObject acQuery, strQueryName 'Удаляем запрос
Exit Sub 'Выходим из программы
999:
Err.Clear 'Очищаем поток от ошибок
Теперь Вы научились создавать таблицы и запросы SQL, используя средства программирования в базе данных Access.
Для закрепления материала и проверки ваших знаний нажмите кнопку [Проверка N4], для продолжения учебы и изучения импорта из внешних файлов нажмите кнопку Вперед>
Когда Вы разрабатываете базу данных, Вам потребуются общие программы, которые можно использовать при работе с формами или другими элементами базы данных. Давайте напишем небольшую программу, которая создает модуль «Настройка» путем импорта готовых Basic-программ.
On Error GoTo 999 'Переход по ошибке
funImportModule "Настройка.bas", "Настройка" '<5> Добавляем программу
Exit Function 'Выход из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Эта функция является продолжением предыдущих действий, описанных выше. С помощью нее мы сможем прочитать модуль «Настройка.bas» из папки «Программы» и разместить ее у себя в базе данных.
'Параметры:
' strBasic - название файла «Настройка.bas»
' strModule - название модуля «Настройка»
'
Dim sFullPath As String
On Error GoTo 999
sFullPath = appFolder & "\Программы\" & strBasic 'Составляем файл
If Dir(sFullPath) <> "" Then 'Проверяем файл
With appAccess 'Указываем приложение
.VBE.ActiveVBProject.VBComponents.Import sFullPath 'Импортируем программу
.DoCmd.Save acModule, strModule 'Сохраняем программу
End With
Else
MsgBox "Файл: " & sFullPath & " не существует!" 'Сообщаем об ошибке
End If
Exit Function 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
В этом разделе опишем еще одну программу модуля «Настройка». Используется она для работы с отчетами. Назначение ее - включить панель отчетов, чтобы пользователь смог отпечатать список расчета калькулятора.
subBarOff 'Гасим все панели
DoCmd.ShowToolbar "Строка меню", acToolbarYes 'Отображаем
DoCmd.ShowToolbar "Предварительный просмотр", acToolbarYes 'Отображаем
В предыдущем примере мы с Вами импортировали модуль «Настройка.bas». Далее дается описание программы, которая есть в этом модуле. Назначение ее - выключить все панели инструментов, чтобы они не мешали работе Калькулятора.
Dim cbr As CommandBar
Application.SetOption "Строка состояния", False 'Гасим строку состояния
For Each cbr In Application.CommandBars 'Проверяем все панели
If cbr.Visible = True Then 'Проверяем отображение
DoCmd.ShowToolbar cbr.Name, acToolbarNo 'Гасим панель
End If
Next cbr
Создание форм в базе данных Access сложный и трудный этап программирования. По их внешнему виду и определяют квалификацию программиста как специалиста. Давайте и мы напишем общую функцию, которая будет сама создавать нам форму и изменит ее настройки так, чтобы она выглядела красиво и с минимальным количеством объектов управления. Имя формы будет «Мой калькулятор» и запишем ее в переменную strForm.
Dim frm As Form
On Error GoTo 999 'Переход по ошибке
funCreateForm = False 'Значение возвращаемое по ошибке
funDeleteForm strForm 'Удаляем старую форму
Set frm = appAccess.CreateForm 'Создаем новую форму
With frm 'Изменяем параметры формы
.Caption = "Мой калькулятор" 'Вставляем заголовок
.ScrollBars = 0 'Гасим полосы прокрутки
.RecordSelectors = False 'Гасим область выделения
.NavigationButtons = False 'Гасим кнопки перехода
.DividingLines = False 'Гасим разделительные линии
.AutoCenter = True 'Выравниваем форму по центру
.BorderStyle = 3 'Устанавливаем диалоговую границу
.Section(0).Height = 3.862 * appCM 'Изменяем высоту окна
.Width = 10.926 * appCM 'Изменяем ширину окна
.HasModule = True 'Разрешаем программы в форме
End With
funRestoreFormControls frm 'Создаем элементы формы
funInsertFormModule frm 'Создаем модуль формы
appAccess.DoCmd.Save , strForm 'Сохраняем форму
appAccess.DoCmd.Close acForm, strForm, acSaveYes 'Закрываем форму
funCreateForm = True 'Возвращаем результат
Exit Function 'Выход из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
На этом этапе напишем программу для удаления формы strForm («Мой калькулятор»). Программа работает так, что если формы нет в базе данных, то программа выходит по ошибке через метку 999 и нам надо очистить поток от нее, чтобы в дальнейшем не было сообщений.
Dim frm As Form
On Error GoTo 999 'Переход по ошибке
funDeleteForm = False 'Возвращаемое значение при ошибке
appAccess.DoCmd.DeleteObject acForm, strForm 'Удаляем форму
funDeleteForm = True 'Возвращаем значение
Exit Function
999:
Err.Clear 'Очищаем поток от ошибок
Теперь нам надо написать программу, которая создаст управляющие элементы, т.е. метки, кнопки и список формы, восстанавливая их из таблицы базы данных, например, «Калькулятор-форма». Этот метод необходимо изучить потому, что таким образом можно легко восстановить любой шаблон формы и в дальнейшем модифицировать его.
Dim ctl As Control, rst As Recordset, dbs As Database, i As Integer
On Error GoTo 999 'Переход по ошибке
funRestoreFormControls = False 'Возврат значения по ошибке
Set dbs = CurrentDb 'Выбираем текущую базу данных
Set rst = dbs.OpenRecordset("SELECT * FROM [Калькулятор-форма]")
If rst.RecordCount = 0 Then 'Проверяем запрос
rst.Close 'Закрываем запрос
Exit Function 'Выходим из программы
End If
With rst 'Создание элемента из запроса
.MoveLast 'Заполняем запрос данными
.MoveFirst 'Переходим на 1 запись
For i = 0 To .RecordCount - 1 'Выполняем восстановление для каждой записи
Select Case rst!ControlType
Case acCommandButton 'Создаем Кнопку
Set ctl = appAccess.CreateControl(frm.Name, rst!ControlType, , "", "", rst!Left, rst!Top, rst!Width, rst!Height)
ctl.OnClick = "[Event Procedure]" 'Включаем обработку нажатия
ctl.Caption = rst!Caption 'Меняем название
ctl.ControlTipText = rst!ControlTipText 'Устанавливаем подсказку
Case acLabel 'Создаем Надпись
Set ctl = appAccess.CreateControl(frm.Name, rst!ControlType, , "", rst!Caption, rst!Left, rst!Top, rst!Width, rst!Height)
ctl.BackColor = !BackColor 'Меняем фон
Case acTextBox 'Создаем Поле
Set ctl = appAccess.CreateControl(frm.Name, rst!ControlType, , "", "", rst!Left, rst!Top, rst!Width, rst!Height)
ctl.SpecialEffect = 0 'Выбираем стандартное выделение
ctl.BorderColor = 0 'Выбираем черный цвет
ctl.BorderStyle = 1 'Выбираем обычную границу
Case acListBox 'Создаем Список
Set ctl = appAccess.CreateControl(frm.Name, rst!ControlType, , "", "", rst!Left, rst!Top, rst!Width, rst!Height)
ctl.SpecialEffect = 0 'Выбираем стандартное выделение
ctl.BackColor = rst!BackColor 'Меняем фон списка
ctl.BorderColor = 0 'Выбираем стандартное выделение
ctl.ColumnCount = 2 'Устанавливаем число колонок
ctl.ColumnWidths = "7,932 см;1 см" 'Устанавливаем размер колонок
ctl.RowSource = "запросСписокКалькулятора" 'Выбираем запрос для списка
End Select
ctl.Name = rst!Name 'Изменяем имя элемента
ctl.ForeColor = !ForeColor 'Изменяем цвет символов
rst.MoveNext 'Переходим на следующую запись
Next i
End With
rst.Close 'Закрываем запрос
funRestoreFormControls = True 'Возвращаем результат
Exit Function 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
После создания формы, напишем программу, которая вставит «модуль программ» на Бэйсике в нашу форму. Это необходимо для того, чтобы обеспечить обработку событий формы, например, таких как открытие, загрузка, нажатие кнопок.
Далее в лекциях идет перечисление событий. Они отмечены на рисунках кнопкой.
Dim s As String, mdl As Module
On Error GoTo 999 'Переход по ошибке
s = appFolder & "\Программы\Form_Мой калькулятор.bas"
If Dir(s) <> "" Then 'Проверяем файл
frm.Module.AddFromFile s 'Добавляем модуль
End If
Exit Function 'Выходи из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Обработка события. Данная функция начинает работать при открытии формы. В ней мы размещаем информацию о предварительных настройках окна калькулятора, до его отображения на экране.
subBarOff 'Выключить все меню и строку состояния
'Настроить всплывающие подсказки кнопок
Me.кнВыход.ControlTipText = "Выход из программы"
Me.кнПечать.ControlTipText = "Печать отчета о расчетах"
Me.кнРасчет.ControlTipText = "Расчет данных на калькуляторе"
Me.кнСброс.ControlTipText = "Сбросить все вычисления"
'Меняем настройки окна, установленные по умолчанию
Me.Caption = "Мой калькулятор" 'Заголовок
Me.ScrollBars = 0 'Полосы прокрутки
Me.RecordSelectors = False 'Область выделения
Me.NavigationButtons = False 'Кнопки перехода
Me.DividingLines = False 'Разделительные линии
'Меняем настройки списка задач
Me.Список.BackColor = 8421376 'Цвет фона символов
Me.Список.ForeColor = RGB(255, 255, 255) 'Цвет символов
'Устанавливаем события
Me.Выражение.AfterUpdate = "[Event Procedure]" 'После обновления
Me.кнВыход.OnClick = "[Event Procedure]" 'Нажатие кнопки
Me.кнПечать.OnClick = "[Event Procedure]" 'Нажатие кнопки
Me.кнРасчет.OnClick = "[Event Procedure]" 'Нажатие кнопки
Me.кнСброс.OnClick = "[Event Procedure]" 'Нажатие кнопки
'Настраиваем параметры приложения
DoCmd.RunCommand acCmdAppMaximize ‘Увеличиваем приложение
On Error Resume Next ‘Отключаем диагностику ошибок меню
Me.MenuBar = "Калькулятор" ‘Устанавливаем меню
Err.Clear ‘Очищаем поток от ошибки
08.06.2000 Виктор Конюков, mailto:LiderAccess@bigfoot.com
Обработка события. Эта программа нужна для того, чтобы после того, как пользователь введет свое выражение и нажмет кнопку «Enter», произошли необходимые расчеты, и список вычислений калькулятора обновился.
Dim dbs As Database
On Error GoTo 999 'Назначаем переход по ошибке
If (Me.Выражение = "") Or _
IsNull(Me.Выражение) Then Exit Sub 'Проверяем выражение
Set dbs = CurrentDb 'Выбираем базу данных
Me.Итог = Eval(Me.Выражение) 'Рассчитываем выражение
subСохранитьВыражение 'Сохраняем выражение в списке
Me.Список.Requery 'Пересматриваем список
Me.Выражение = "" 'Сбрасываем выражение
Me.кнПечать.SetFocus 'Помещаем курсор для печати
Set dbs = Nothing 'Обнуляем переменную
Exit Sub 'Выходим из программы
999:
Err.Clear 'Очищаем поток от ошибок
Me.Итог = "Ошибка" 'Сообщаем об ошибке
Me.Выражение.SetFocus 'Подготавливаем новый ввод данных
Обработка события. После проведенных вычислений нам может потребоваться отпечатать отчет. Для этого мы и создали кнопку Печать. Теперь мы должны написать событие, чтобы при нажатии кнопки отобразился документ "Отчет об итогах".
On Error Resume Next 'Отключаем диагностику ошибок
DoCmd.OpenReport "Отчет об итогах", acViewPreview 'Открываем отчет
Err.Clear 'В случае отсутствия данных очищаем поток ошибок
Обработка событий. В нашем калькуляторе есть кнопка Расчет, вставим в программу событие, которое при нажатии данной кнопки будет проводить вычисление введенного в калькулятор выражения.
If (Me.Выражение = "") Or IsNull(Me.Выражение) Then 'Проверяем выражение
MsgBox "Введите выражение!", _
vbInformation, Me.Name 'Сообщаем об отсутствии данных
Else
Выражение_AfterUpdate 'Обновляем выражение
End If
Если мы хотим печатать данные о вычислениях, то надо уметь сохранять итоги расчетов калькулятора в таблице. Напишем функцию, которая будет это делать.
Dim dbs As Database, rst As Recordset
On Error GoTo 999 'Назначаем переход по ошибке
Set dbs = CurrentDb 'Выбираем базу данных
Set rst = dbs.OpenRecordset("SELECT * FROM [Калькулятор]")
With rst
If .RecordCount > 0 Then
.MoveLast '! Заполнить запрос SQL данными
End If
.AddNew 'Добавить новую запись
!Пункт = .RecordCount + 1 'Порядковый номер записи
!Выражение = Me.Выражение 'Вычисляемое выражение
!Итог = Me.Итог 'Итоговое вычисление
.Update '! Запомнить вычисления
End With
rst.Close 'Закрываем запрос
Set dbs = Nothing 'Уничтожаем переменную
Exit Sub 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Обработка событий. И так при работе за калькулятором, Вам может потребоваться сбросить все вычисления, для этого напишем событие, которое будет срабатывать при нажатии кнопки Сброс.
Dim dbs As Database
On Error GoTo 999 'Назначаем переход по ошибке
Set dbs = CurrentDb 'Выбираем базу данных
dbs.Execute "DELETE * FROM [Калькулятор]", dbFailOnError 'Удаляем расчеты
Me.Итог = "" 'Удаляем итог
Me.Выражение = "" 'Очищаем выражение
Me.Список.Requery 'Обновляем список
Exit Sub 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Теперь Вы научились создавать формы в Access и можете себя считать в какой-то степени профессионалом. Для просмотра Вашей работы нажмите кнопку [Проверка N6], для продолжения учебы, нажмите кнопку Вперед>
Внимание! Открыв форму калькулятора в режиме просмотра, у Вас не будет работать кнопка Отчет, т.к. Вы еще не прослушали раздел лекций по разработке отчетов.
После создания формы, попробуем создать «Отчет о расчетах», путем импорта его из базы данных «Старый калькулятор». Этот способ также часто применяется при работе с базами данных. В качестве переменной с именем отчета введем параметр strReport.
On Error GoTo 999 'Переход по ошибке
funCreateReport = False 'Возвращаем значение при ошибке
appAccess.DoCmd.TransferDatabase acImport, "Microsoft Access", appFolder & "\Старый калькулятор.mdb", acReport, strReport, strReport, False
funDetalReport strReport 'Изменяем отчет
funCreateReport = True 'Возвращаем значение
Exit Function
999:
MsgBox Err.Description 'Сообщение об ошибке
Err.Clear 'Очищаем поток от ошибок
Одним из самых сложных этапов разработки отчетов является его построение, вспомните «Платежное поручение» (наверняка, Вы его уже разрабатывали с помощью мастера Access).
В Access есть и другой способ разработки отчетов, возможно, он Вам и когда-нибудь пригодится. Ниже дается пример функции, которая меняет плотность поля «Пункт», т.е цифра 1 становится толще (смотрите рисунок)
Dim rpt As Report
On Error GoTo 999 'Переходим по ошибке
funDetalReport = False 'Возвращаем значение при ошибке
appAccess.DoCmd.OpenReport strReport, acViewDesign 'Открываем отчет
Set rpt = appAccess.Reports("Отчет об итогах") 'Выбираем отчет
rpt.Пункт.FontWeight = 700 'Изменяем плотность шрифта
appAccess.DoCmd.Close acReport, strReport 'Закрываем отчет
funDetalReport = True 'Возвращаем значение
Exit Function 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Обработка событий. Напишем событие, которое при открытии отчета будет показывать панель печати и увеличивать отчет до максимального значения.
SubBarReport ‘Показывает панель отчета
DoCmd.Maximize ‘Развертывает отчет
Обработка событий. Напишем событие, которое при открытии отчета, в котором нет данных, выдавало бы на экран специальное сообщение (смотрите рисунок).
MsgBox "Нет данных для печати!", vbExclamation, "Мой калькулятор"
Cancel = True ‘Отменяем открытие отчета
Обработка событий. Напишем событие, которое при закрытии отчета выключало бы все панели инструментов.
Private Sub Report_Close()
SubBarOff 'Выключим все меню и строку состояния
End Sub
Теперь Вы научились создавать таблицы, запросы, отчеты в Access и можете теперь разрабатывать практически готовые программы. Для просмотра объектов базы данных, созданных ранее, нажмите кнопку [Проверка N7].
В следующих разделах лекций Вы научитесь создавать макросы, панели меню и вызывать справку. Большинство программистов этого не делает, но если Вы решили создать профессиональную программу, то продолжайте изучать лекции дальше.
И так для продолжения учебы, нажмите кнопку Вперед>
При открытии любой базы данных автоматически запускается макрос AutoExec, вспомните командный файл DOS «autoexec.bat». В этот макрос для примера можно вставить программы Access, например, команду увеличения приложения до максимального размера и команду открытия формы «Мой калькулятор».
Dim frm As Form
On Error GoTo 999 'Переход по ошибке
funCreateMacro = False 'Возвращаем значение при ошибке
'Импортируем макрос
appAccess.DoCmd.TransferDatabase acImport, "Microsoft Access", appFolder & "\Старый калькулятор.mdb", acMacro, strMacro, strMacro
funCreateMacro = True 'Возвращаем значение
Exit Function 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Теперь Вы научились создавать макросы в Access. Для просмотра объектов базы данных нажмите кнопку [Проверка N8], для продолжения учебы, нажмите кнопку Вперед>
Если Вы решили оставить общую справку по Access, которая вызывается нажатием F1, то можно написать программу, отображающую Ваш собственный файл: «Калькулятор.chm» при нажатии кнопки меню. Команда Shell выглядит так: hh.exe -mapid 103 Калькулятор.chm
Dim fs, s As String, hlp As String
On Error GoTo 999
Set fs = CreateObject("Scripting.FileSystemObject") 'Создаем файловую систему
s = fs.GetSpecialFolder(0) & "\hh.exe" 'Составляем hh.exe файл
If Dir(s) <> "" Then 'Проверяем exe-файл
hlp = fs.GetFile(CurrentDb.Name).ParentFolder & "\Калькулятор.chm" 'Находим справку
If Dir(hlp) <> "" Then 'Проверяем файл справки
s = """" & s & """ -mapid " & 103 & " """ & hlp & """" 'Составляем команду
Shell s, vbMaximizedFocus 'Запускаем справку
End If
End If
Exit Function 'Выходим из программы
999:
Err.Clear 'Очищаем поток от ошибок
Ваша программа будет эффектно выглядеть, если Вы научитесь программировать помощника Access. Ниже написана функция, которая создает на экране сообщения в виде всплывающих ответов от «котенка».
Помните, что если Вы выключили помощника, то он при нажатии меню высвечиваться не будет, его необходимо включить снова.
Dim bln As Balloon, s As String
With Application.Assistant 'Выбираем помошника
.Visible = True 'Вывод на экран
.Animation = msoAnimationAppear 'Включаем анимацию
Set bln = .NewBalloon 'Создаем сообщение
With bln
.Heading = "Калькулятор позволяет" 'Устанавливаем заголовок
.Labels(1).Text = "Вводить выражения" 'Включаем меню 1
.Labels(2).Text = "Вводить формулы" 'Включаем меню 2
.BalloonType = msoBalloonTypeButtons 'Устанавливаем тип меню
.Button = msoButtonSetNone 'Отключаем клавиши помощника
Select Case .Show 'Отображаем помощника
Case 1: s = "23-456/35" 'Назначаем 1 сообщение
Case 2: s = "sin(0.5)" 'Назначаем 2 сообщение
End Select 'Конец вариантов
End With
Set bln = .NewBalloon 'Создаем нового помощника
With bln
.Heading = "Пример выражения" 'Устанавливаем заголовок
.Text = s 'Выводим назначенный текст, см. выше
.Button = msoButtonSetOK 'Отображаем клавишу OK
.Show 'Показываем помощника
End With
End With
Теперь Вы научились создавать различные справочные системы в Access и можете комментировать свою программу. Для просмотра объектов базы данных нажмите кнопку [Проверка N9], для продолжения учебы, нажмите кнопку Вперед>
Большинство коммерческих программ имеет в верхней части приложения свою панель элементов, на которой есть разные кнопки. Давайте напишем программу, которая создает панель меню без кнопок.
Dim myBar As CommandBar
'Создаем панель меню
Set myBar = appAccess.CommandBars.Add(strMenu, msoBarTop, True)
funCreateMenuControls strMenu '<10> Создаем кнопки меню
myBar.Visible = True 'Отображаем меню
funCreateMenu = True 'Возвращаем результат
В этой части лекций рассказывается о программе, которая создает две кнопки Помощник и Справка. При нажатии их будет отображаться файл справки и помощник по Вашей программе.
Dim but As CommandBarButton
'Добавляем первую кнопку
Set but = appAccess.CommandBars(strMenu).Controls.Add(msoControlButton)
With but
.BeginGroup = True 'Начинаем размещение с начала группы
.FaceId = 1 'Устанавливаем код кнопки
.Style = msoButtonCaption 'Выбираем стандартный тип
.Caption = "Справка" 'Называем кнопку
.OnAction = "funCreateNewHelp" 'Определяем программу справки
End With
'Добавляем вторую кнопку
Set but = appAccess.CommandBars(strMenu).Controls.Add(msoControlButton)
With but
.Caption = "Помощник" 'Называем кнопку
.Style = msoButtonCaption 'Выбираем стандартный тип
.FaceId = 2 'Устанавливаем код кнопки
.OnAction = "funCreateAssistant" 'Определяем программу помощника
End With
funCreateMenuControls = True 'Возвращаем результат
Вот и все. Вы полностью прослушали весь курс лекций, и теперь только на практике, разрабатывая программы от простых к сложным, Вы сможете создавать законченные приложения по Access.
Несколько советов по написанию программ
• названия функций давайте только на английском языке, могут возникнуть проблемы в сложных программах;
• старайтесь почаще их комментировать, тогда Вам легче будет разбираться в их структуре;
• не старайтесь писать очень большие базы данных, размер ее – это не показатель качества;
Если у Вас есть вопросы по программированию, то Вы их можете задать автору по почте: LiderAcess@bigfoot.com. Если Вам все ясно, то Вы можете приступить к изучению практического задания по прослушанным лекциям. Для этого откройте папку Задание.
Целью данных лекций является научить пользователей баз данных Microsoft Access пользоваться не только мастерами базы данных, но и программными средствами. Это даст Вам возможность создавать полноценные коммерческие программы и лучше разбираться в возможностях базы данных.
В качестве примера обучению программированию, используется коммерческая программа «Калькулятор», которая применена автором в сборниках «Лидер Access» и «Ключи от Дома».
Особая благодарность отечественной литературе по Access, где очень туманно написано о программировании баз данных, в основном она и дала идею раскрыть некоторые принципы разработки коммерческих программ.