Access 2000 - курс лекций



Access 2000 - курс лекций

         

a. Глобальные переменные


 

     Для начала определим название нашей программы. Пусть это будет приложение Microsoft Access 2000 «Новый калькулятор.mdb». Разработку его начнем с описания переменных, констант, которые потребуются при создании нашей базы данных.

     appAccess – это объектная переменная, в которой мы будем создавать новую базу данных

     appCM – это константа, которая управляет размером управляющих элементов в формах, отчетах. В Access элементы измеряются в твипах, а нам удобнее указывать размеры в сантиметрах, поэтому, и вводим эту переменную.

     appFolder – эта переменная будет содержать главный каталог нашего приложения. Далее мы будем использовать ее для загрузки рисунков, программ, справки и других внешних элементов базы данных

 

   

Public appAccess As Access.Application  'Приложение программы

Public Const appCM As Integer = 567       'Размерность (1см=567 твип)

Public appFolder As String                        'Папка приложения

 



b. Создание приложения


 

     Продолжим создание приложения с разработки всех функций,  которые требуются для работы базы данных. Сначала программным способом, т.е. без мастеров, создадим базу данных, затем таблицы, запросы и т.д.



     Чтобы нашей программой могли воспользоваться другие пользователи, дополнительно укажем в угловых скобках номер лекции, где можно найти программу. Например, <4> будет означать, что программа описана в четвертой лекции.



с. Папка приложения


 

     Профессионально выполненная программа всегда имеет внешние файлы, например basic-программы, рисунки *.bmp. Чтобы к ним обеспечить быстрый доступ, напишем функцию, которая будет определять папку, где установлена основная программа. Применяется эта программа для назначения данных глобальной переменной appFolder

 

Public Function funGetAppFolder() As String

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 'Очищаем поток от ошибок

End Function

 



a. Создание базы данных


 

     И так после подготовительных действий, Вы можете приступить к созданию базы данных в файловой системе. Саму базу данных «Новый калькулятор.mdb» (переменная strMDB) создим программным методом, используя встроенный язык программирования Visual Basic Access, аналогично способу, указанному слева с помощью мастера Access.

 

Public Function funCreateDatabase(strMDB As String) As Boolean

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 'Очищаем поток от ошибок

End Function

 



b. Закрытие базы данных


 

     Если мы открыли базу данных, то ее необходимо закрыть. Это хороший способ программирования, хотя при закрытии окна Access (appAccess.Quit) база данных закрывается автоматически.

     В этом примере база данных «Новый калькулятор.mdb» (переменная strMDB) будет закрыта, все ее объекты сохранены, а потом произойдет сжатие данных.

 

Public Function funCloseDatabase(strMDB As String) As Boolean

    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 'Очищаем поток от ошибок

End Function

 



d. Настройка ссылок


 

     При создании базы данных нам потребуются внешние функции, которые хранятся в специальных библиотеках, файлах с расширением DLL.

     В этом примере показано, как создать программу, которая будет автоматически подключать нужные Вам библиотеки, а в качестве шаблона ссылок использует текущую базу данных.

     Например, ссылка на библиотеку Office хранится в файле C:\Program Files\Microsoft Office\ Office\MSO9.DLL

 

Public Function funInitReferences()

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 'Очищаем поток от ошибок

End Function

 



е. Настройка запуска


 

     Когда Вы открываете базу данных созданную начинающим специалистом с помощью мастеров Access, то Вам сразу «бросается в глаза» некачественный интерфейс (лишние кнопки, меню, окна, разбросанные по экрану), который и дает Вам общую оценку его работе.

     В этом примере давайте настроим базу данных так, чтобы в ней был начальный «приятный» интерфейс, а именно дадим базе данных заголовок, иконку, погасим ненужные окна и меню.

     Совет. Изучите внимательно настройки базы данных в справочной системе Microsoft Access, введите их в свои программы, и тогда программное обеспечение, разрабатываемое Вами, будет иметь больший успех и уважение у пользователей.

 

Public Function funInitStartupProperties()

        '<2> Изменяем заголовок

    dbChangeProperty "AppTitle", DB_Text, "Калькулятор, Версия 1.0”

        '<2> Изменяем иконку

    dbChangeProperty "AppIcon", DB_Text, appFolder & "\Рисунки\Лидер.ico"

   

    dbChangeProperty "StartupShowDBWindow", 1, False '<2> Гасим окно БД

    dbChangeProperty "StartupShowStatusBar", 1, False '<2> Гасим сообщения

    dbChangeProperty "AllowBuiltinToolbars", 1, True '<2> Разрешаем меню

    dbChangeProperty "AllowFullMenus", 1, True '<2> Разрешаем меню

    dbChangeProperty "AllowToolbarChanges", 1, True '<2> Разрешаем изменения

End Function

 



f. Свойство базы данных


 

     В предыдущем разделе мы меняли заголовок базы данных, а здесь показан пример, как изменить свойство базы данных, используя встроенные функции Access.

     Дополнение. Созданные свойства в отличие от переменных хранятся в базе данных постоянно, и Вам достаточно назначить их один раз, чтобы потом они уже использовались автоматически при открытии базы данных.

     Например, если Вы погасили в каком-то сеансе с базой данных ее основное окно (StartupShowDBWindow = False), то в следующих сеансах работы оно не будет отображаться на экране.

'Название

'   Изменить/создать свойство базы данных

'Параметры:

'   strName - имя свойства (Description, Format ...)

'   varType - тип свойства (dbText, dbLong ...)

'   varValue - значение свойства

'

Function dbChangeProperty(strName As String, varType As Variant, varValue As Variant) As Boolean

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 'Очищаем поток от незнакомой ошибки

End Function

 



g. Проверка знаний


 

     Теперь Вы научились создавать базу данных не с помощью мастера Access, а профессионально с помощью языка программирования Microsoft Visual Basic Access.

     Ваш результат Вы можете увидеть, нажав кнопку [Проверка N2] внизу экрана. Перед Вами отобразиться база данных, в которой пока не будет ни одного элемента.

     На следующем этапе программирования мы будем создавать таблицу «Калькулятор» с полями и необходимыми свойствами.

 

     Итак, если Вы не желаете, посмотреть на пустую базу данных, нажмите кнопку Вперед>

 



с. Сжатие базы данных


 

     При работе с базой данных Microsoft Access у Вас постепенно будет расти размер базы данных. Это связано с тем, что, удаляя элементы или записи «физически» из базы они не удаляются, уничтожаются только ссылки.  Для уменьшения размера базы данных, напишем программу для сжатия ее файла.

     В качестве имени файла, передаваемого в программу, введем переменную StrMDB.

 

Public Function funCompactDatabase(strMDB As String) As Boolean

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 'Очищаем поток от ошибок

End Function

 



a. Создание таблицы


 

     Наверное, Вы уже научились создавать таблицу с помощью мастера, этот способ указан слева.

     Теперь давайте попробуем создать ее программным способом. Иногда этот способ становится более предпочтительным, чем стандартный. В качестве переменной создаваемой таблицы будем использовать имя StrTable = «Калькулятор»

 

Public Function funCreateTable(strTable As String) As Boolean

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 'Очищаем поток от ошибок

End Function

 



b. Проверка таблицы


 

     Очень часто при работе с базой данных Вам надо проверить наличие в базе данных объекта. На данном примере указан способ проверки таблицы в базе данных. Если объекта нет, то случается ошибка и программа очищает поток от ошибок, возвращая значение False.

 

Public Function funVerifyTable(strTable As String) As Boolean

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 'Очищаем поток от ошибок

End Function

 



d. Изменение свойств таблицы


 

     Когда Вы создаете поле программным методом, некоторые его свойства, например, Description не создаются автоматически. Вам необходимо научиться изменять свойства полей базы данных, а в случае необходимости добавлять их в базу данных.

      На этом примере показано, как изменить значение свойства поля базы данных. В данной программе также предусмотрено, что если свойство отсутствует, то оно будет добавлено в базу данных.

'Параметры:

'   fld - поле в таблице (Объект Field)

'   strName - имя свойства (Description, Format ...)

'   varType - тип свойства (dbText, dbLong ...)

'   varValue - значение свойства

'

Function funChangeProperty(fld As Field, strName As String, varType

                As Variant, varValue As Variant) As Boolean

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 'Очищаем от незнакомой ошибки

End Function

 



e. Проверка знаний


 

     Теперь Вы научились создавать таблицы и поля базы данных, а также изменять из свойства.

     Ваш результат обучения Вы можете увидеть, нажав кнопку [Проверка 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

 



a. Создание запросов


 

     В этом примере мы создадим 2 запроса SQL и сохраним их в базе данных. Первый запрос будет создан для выборки некоторых значений из таблицы, а второй для удаления значений из списка калькулятора.

 

Public Function funCreateQueries() As Boolean

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 'Очищаем поток от ошибок

End Function

 



b. Удаление запроса


 

     Иногда при разработке базы данных Вам необходимо будет удалить запрос из программы. В этом примере показывается,  как можно удалить запрос из базы данных. StrQueryName – это переменная, которая содержит имя запроса.

 

Public Sub subDeleteQuery(strQueryName As String)

    On Error GoTo 999 'Включаем обработчик ошибок

    appAccess.DoCmd.DeleteObject acQuery, strQueryName  'Удаляем запрос

    Exit Sub 'Выходим из программы

999:

    Err.Clear 'Очищаем поток от ошибок

End Sub

 



с. Проверка знаний


 

     Теперь Вы научились создавать таблицы и запросы SQL, используя средства программирования в базе данных Access.

     Для закрепления материала и проверки ваших знаний нажмите кнопку [Проверка N4], для продолжения учебы и изучения импорта из внешних файлов нажмите кнопку Вперед>

 



a. Создание модуля


 

     Когда Вы разрабатываете базу данных, Вам потребуются общие программы, которые можно использовать при работе с формами или другими элементами базы данных. Давайте напишем небольшую программу, которая создает модуль «Настройка» путем импорта готовых Basic-программ.

 

Public Function funCreateModule() As Boolean

    On Error GoTo 999 'Переход по ошибке

    funImportModule "Настройка.bas", "Настройка" '<5> Добавляем программу

    Exit Function 'Выход из программы

999:

    MsgBox Err.Description 'Сообщаем об ошибке

    Err.Clear 'Очищаем поток от ошибок

End Function

 



b. Импорт программ модуля


 

     Эта функция является продолжением предыдущих действий, описанных выше. С помощью нее мы сможем прочитать модуль «Настройка.bas» из папки «Программы» и разместить ее у себя в  базе данных.

'Параметры:

'   strBasic - название файла «Настройка.bas»

'   strModule - название модуля «Настройка»

'

Public Function funImportModule(strBasic As String, strModule As String) As Boolean

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 'Очищаем поток от ошибок

End Function

 



d. Включить панель отчетов


 

     В этом разделе опишем еще одну программу модуля «Настройка».  Используется она для работы с отчетами. Назначение ее - включить панель отчетов, чтобы пользователь смог отпечатать  список расчета калькулятора.

 

Public Sub subBarReport()

    subBarOff 'Гасим все панели

    DoCmd.ShowToolbar "Строка меню", acToolbarYes 'Отображаем

    DoCmd.ShowToolbar "Предварительный просмотр", acToolbarYes 'Отображаем

End Sub

 



с. Выключить панели инструментов


 

     В предыдущем примере мы с Вами импортировали модуль «Настройка.bas».  Далее дается описание программы, которая есть в этом модуле. Назначение ее - выключить все панели инструментов, чтобы они не мешали работе Калькулятора.

 

Public Sub subBarOff()

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

End Sub

 



a. Создание формы


 

     Создание форм в базе данных Access сложный и трудный этап программирования. По их внешнему виду и определяют квалификацию программиста как специалиста.

     Давайте и мы напишем общую функцию, которая будет сама создавать нам форму и изменит ее настройки так, чтобы она выглядела красиво и с минимальным количеством объектов управления. Имя формы будет «Мой калькулятор» и запишем ее в переменную strForm.

 

Public Function funCreateForm(strForm As String) As Boolean

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 'Очищаем поток от ошибок

End Function

 



b. Удаление формы


 

     На этом этапе напишем программу для удаления формы strForm («Мой калькулятор»). Программа работает так, что если формы нет в базе данных, то программа выходит по ошибке через метку 999 и нам надо очистить поток от нее, чтобы в дальнейшем не было сообщений.

 

Public Function funDeleteForm(strForm As String) As Boolean

Dim frm As Form

    On Error GoTo 999 'Переход по ошибке

    funDeleteForm = False 'Возвращаемое значение при ошибке

   

    appAccess.DoCmd.DeleteObject acForm, strForm 'Удаляем форму

   

    funDeleteForm = True 'Возвращаем значение

    Exit Function

999:

    Err.Clear 'Очищаем поток от ошибок

End Function

 



c. Создание элементов формы


 

     Теперь нам надо написать программу, которая создаст управляющие элементы, т.е. метки, кнопки и список формы, восстанавливая их из таблицы базы данных, например, «Калькулятор-форма». Этот метод необходимо изучить потому, что таким образом  можно легко восстановить любой шаблон формы и в дальнейшем модифицировать его.

 

Public Function funRestoreFormControls(frm As Form) As Boolean

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 'Очищаем поток от ошибок

End Function

 



d. Вставить в форму модуль


 

     После создания формы, напишем программу, которая вставит «модуль программ» на Бэйсике в нашу форму. Это необходимо для того, чтобы обеспечить обработку событий формы, например, таких как открытие, загрузка,  нажатие кнопок.

     Далее в лекциях идет перечисление событий. Они отмечены на рисунках кнопкой.

 

Public Function funInsertFormModule(frm As Form) As Boolean

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 'Очищаем поток от ошибок

End Function

 



e. Открытие формы


Обработка события. Данная функция начинает работать при открытии формы. В ней мы размещаем информацию о предварительных настройках окна калькулятора, до его отображения на экране.

 

Private Sub Form_Open(Cancel As Integer)

    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 ‘Очищаем поток от ошибки

End Sub

 

08.06.2000 Виктор Конюков, mailto:LiderAccess@bigfoot.com



f. Расчет выражения


 

     Обработка события. Эта программа нужна для того, чтобы после того, как пользователь введет свое выражение и нажмет кнопку «Enter», произошли необходимые расчеты, и список вычислений калькулятора обновился.

 

Private Sub Выражение_AfterUpdate()

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 'Подготавливаем новый ввод данных

End Sub

 



h. Открыть отчет


 

     Обработка события. После проведенных вычислений нам может потребоваться отпечатать отчет. Для этого мы и создали кнопку Печать. Теперь мы должны написать событие, чтобы при нажатии кнопки отобразился документ "Отчет об итогах".

 

Private Sub кнПечать_Click()

    On Error Resume Next 'Отключаем диагностику ошибок

    DoCmd.OpenReport "Отчет об итогах", acViewPreview 'Открываем отчет

    Err.Clear 'В случае отсутствия данных очищаем поток ошибок

End Sub

 



i. Расcчитать данные


 

     Обработка событий. В нашем калькуляторе есть кнопка Расчет, вставим в программу событие, которое при нажатии данной кнопки будет проводить вычисление введенного в калькулятор выражения.

 

Private Sub кнРасчет_Click()

    If (Me.Выражение = "") Or IsNull(Me.Выражение) Then 'Проверяем выражение

        MsgBox "Введите выражение!", _

            vbInformation, Me.Name 'Сообщаем об отсутствии данных

    Else

        Выражение_AfterUpdate  'Обновляем выражение

    End If

End Sub

 



j. Сохранить выражение


 

     Если мы хотим печатать данные о вычислениях, то надо уметь сохранять итоги расчетов калькулятора в таблице. Напишем функцию, которая будет это делать.

 

Private Sub subСохранитьВыражение()

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 'Очищаем поток от ошибок

End Sub

 



k. Сбросить все вычисления


 

     Обработка событий. И так при работе за калькулятором, Вам может потребоваться сбросить все вычисления, для этого напишем событие, которое будет  срабатывать при нажатии кнопки Сброс.

 

Private Sub кнСброс_Click()

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 'Очищаем поток от ошибок

End Sub

 



l. Проверка знаний


 

     Теперь Вы научились создавать формы в Access и можете себя считать в какой-то степени профессионалом. Для просмотра Вашей работы нажмите кнопку [Проверка N6], для продолжения учебы, нажмите кнопку Вперед>

 

     Внимание! Открыв форму калькулятора в режиме просмотра, у Вас не будет работать кнопка Отчет, т.к. Вы еще не прослушали раздел лекций по разработке отчетов.

 



a. Создание отчета


 

     После создания формы, попробуем создать «Отчет о расчетах», путем импорта его из базы данных «Старый калькулятор». Этот способ также часто применяется при работе с базами данных. В качестве переменной с именем отчета введем параметр strReport.

 

Public Function funCreateReport(strReport As String) As Boolean

    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 'Очищаем поток от ошибок

End Function

 



b. Изменение отчета


 

     Одним из самых сложных этапов разработки отчетов является его построение, вспомните «Платежное поручение» (наверняка, Вы его уже разрабатывали с помощью мастера Access).

     В Access есть и другой способ разработки отчетов, возможно, он Вам и когда-нибудь пригодится. Ниже дается пример функции, которая меняет плотность поля «Пункт», т.е цифра 1 становится толще (смотрите рисунок)

 

Public Function funDetalReport(strReport As String) As Boolean

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 'Очищаем поток от ошибок

End Function

 



c. Открытие отчета


 

     Обработка событий. Напишем событие, которое при открытии отчета будет показывать панель печати и увеличивать отчет до максимального значения.

 

Private Sub Report_Open(Cancel As Integer)

    SubBarReport ‘Показывает панель отчета

    DoCmd.Maximize ‘Развертывает отчет

End Sub

 



d. Нет данных


 

     Обработка событий. Напишем событие, которое при открытии отчета, в котором нет данных, выдавало бы на экран специальное сообщение (смотрите рисунок).

 

Private Sub Report_NoData(Cancel As Integer)

    MsgBox "Нет данных для печати!", vbExclamation, "Мой калькулятор"

    Cancel = True ‘Отменяем открытие отчета

End Sub

 



е. Закрытие отчета


 

     Обработка событий. Напишем событие, которое при закрытии отчета выключало бы все панели инструментов.

 

Private Sub Report_Close()

        SubBarOff 'Выключим все меню и строку состояния

End Sub

 



f. Проверка знаний


 

     Теперь Вы научились создавать таблицы, запросы, отчеты в Access и можете теперь разрабатывать практически готовые программы. Для просмотра объектов базы данных, созданных ранее, нажмите кнопку [Проверка N7].

     В следующих разделах лекций Вы научитесь создавать макросы, панели меню и вызывать справку. Большинство программистов этого не делает, но если Вы решили создать профессиональную программу, то продолжайте изучать лекции дальше.

     И так для продолжения учебы, нажмите кнопку Вперед>

 



a. Создание макроса


 

     При открытии любой базы данных автоматически запускается макрос AutoExec, вспомните командный файл DOS «autoexec.bat». В этот макрос для примера можно вставить программы Access, например, команду увеличения приложения до максимального размера и команду открытия формы «Мой калькулятор».

 

Public Function funCreateMacro(strMacro As String) As Boolean

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 'Очищаем поток от ошибок

End Function

 



b. Проверка знаний


 

     Теперь Вы научились создавать макросы в Access. Для просмотра объектов базы данных нажмите кнопку [Проверка N8], для продолжения учебы, нажмите кнопку Вперед>

 



a. Создание справки


 

     Если Вы решили оставить общую справку по Access, которая вызывается нажатием F1, то можно написать программу, отображающую Ваш собственный файл: «Калькулятор.chm» при нажатии кнопки меню.  Команда Shell выглядит так: hh.exe -mapid 103 Калькулятор.chm

 

Public Function funCreateNewHelp()

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 'Очищаем поток от ошибок

End Function

 



b. Создание помощника


 

     Ваша программа будет эффектно выглядеть, если Вы научитесь программировать помощника Access. Ниже написана функция, которая создает на экране сообщения в виде всплывающих ответов от «котенка».

     Помните, что если Вы выключили помощника, то он при нажатии меню высвечиваться не будет, его необходимо включить снова.

 

Public Function funCreateAssistant()

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

End Function

 



с. Проверка знаний


 

     Теперь Вы научились создавать различные справочные системы в Access и можете комментировать свою программу. Для просмотра объектов базы данных нажмите кнопку [Проверка N9], для продолжения учебы, нажмите кнопку Вперед>

 



а. Создание панели меню


 

     Большинство коммерческих программ имеет в верхней части приложения свою панель элементов, на которой есть разные кнопки. Давайте напишем программу, которая создает панель меню без кнопок.

 

Public Function funCreateMenu(strMenu As String) As Boolean

Dim myBar As CommandBar

    'Создаем панель меню

    Set myBar = appAccess.CommandBars.Add(strMenu, msoBarTop, True)

    funCreateMenuControls strMenu '<10> Создаем кнопки меню

    myBar.Visible = True 'Отображаем меню

    funCreateMenu = True 'Возвращаем результат

End Function

 



b. Создание кнопок меню


 

     В этой части лекций рассказывается о программе, которая создает две кнопки Помощник и Справка. При нажатии их будет отображаться файл справки и помощник по Вашей программе.

 

Public Function funCreateMenuControls(strMenu As String) As Boolean

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 'Возвращаем результат

End Function

 



с. Заключение


 

     Вот и все. Вы полностью прослушали весь курс лекций, и теперь только на практике, разрабатывая программы от простых к сложным, Вы сможете создавать законченные приложения по Access.

   

     Несколько советов по написанию программ

    • названия функций давайте только на английском языке, могут возникнуть проблемы в сложных программах;

    • старайтесь почаще их комментировать, тогда Вам легче будет разбираться в их структуре;

    • не старайтесь писать очень большие базы данных, размер ее – это не показатель качества;

 

    Если у Вас есть вопросы по программированию, то Вы их можете задать автору по почте: LiderAcess@bigfoot.com. Если Вам все ясно, то Вы можете приступить к изучению практического задания по прослушанным лекциям. Для этого откройте папку Задание.

 



Назначение курса лекций


     Целью данных лекций является научить пользователей баз данных Microsoft Access пользоваться не только мастерами базы данных, но и программными средствами. Это даст Вам возможность создавать полноценные коммерческие программы и лучше  разбираться в возможностях базы данных.

 

     В качестве примера обучению программированию, используется коммерческая программа «Калькулятор», которая применена автором в сборниках «Лидер Access» и «Ключи от Дома».

 

     Особая благодарность отечественной литературе по Access, где очень туманно написано о программировании баз данных, в основном она и дала идею раскрыть некоторые принципы разработки коммерческих программ.