Программирование на Visual Basic | Общая

В этом разделе сайта находятся примеры из сборника программ "Архив файлов на Microsoft Access". В нем рассказывается о программировании форм, отчетов, таблиц и других объектов. Используйте этот архив для изучения работы с приложением Microsoft Office Access и программированием на Visual Basic for Application. Файлы исходников можно получить по этой ссылке: Купить и скачать

Экспорт в файлы всех объектов базы данных

Для экспорта всех объектов базы данных Microsoft Access (таблиц, запросов, форм, отчетов, макросов и модулей) в текстовые файлы можно использовать недокументированную команду SaveAsText.

Основной метод: SaveAsText
Эта команда позволяет сохранить структуру и код любого объекта в текстовый формат, что удобно для резервного копирования или систем контроля версий (Git). Написать конвертор преобразования VBA в другой язык и т.п.
Синтаксис:
Application.SaveAsText [ТипОбъекта], "[ИмяОбъекта]", "[ПутьКФайлу]"

Sub ExportAllObjects()
    Dim obj As AccessObject
    Dim path As String
    ' Путь к папке, где будут файлы (должна существовать)
    path = "C:\.\AccessExport\" 
    
    ' Экспорт форм
    For Each obj In CurrentProject.AllForms
        Application.SaveAsText acForm, obj.Name, path & obj.Name & ".txt"
    Next obj
    
    ' Экспорт отчетов
    For Each obj In CurrentProject.AllReports
        Application.SaveAsText acReport, obj.Name, path & obj.Name & ".txt"
    Next obj
    
    ' Экспорт модулей
    For Each obj In CurrentProject.AllModules
        Application.SaveAsText acModule, obj.Name, path & obj.Name & ".txt"
    Next obj
    
    ' Экспорт запросов (QueryDefs)
    Dim qdf As DAO.QueryDef
    For Each qdf In CurrentDb.QueryDefs
        Application.SaveAsText acQuery, qdf.Name, path & qdf.Name & ".txt"
    Next qdf
    
    MsgBox "Экспорт завершен"
End Sub

 

Кейс по программированию в Excel (VBA).

Для проверки ваших знаний  в Excel VBA Вы можете попробовать решить следующую тестовую задачу (кейс).  Она может потребоваться при приеме на работу как разработчика VBA и SQL Server.  Вот  её содержание.

  1. Необходимо создать таблицу на сервере MSSQL с 3 столбцами
  2. Реализовать загрузку данных на сервер из Excel (200 000 записей) через VBA или Python через UI. При реализации на Python можно использовать любой UI framework
  3. Сделать хранимую процедуру на MS SQL сервере для выгрузки данных за определенный период.
  4. Реализовать возможность указывать период от до (на форме VBA или значения в Excel, на выбранной UI framework форме) и результат хранимой процедуры из 3 пункта выгружать в новую книгу Excel. Так же реализовать форматирование отчета (закрепление шапки и формат столбцов)
  5. Отчет должен содержать столбцы: Год, Месяц, Артикул, средние продажи за год и месяц, доля продаж артикула за выбранный период
  6. Логика отчета с расчетом средних продаж и доли продаж должна быть реализована в хранимой процедуре
  7. Приложение. Файл data.xlsb с 200 тысяч записей.

Оценка работы

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

  1. Этап. Настройка интерфейса .
  2. Этап. Загрузка в базу данных из Excel.
  3. Этап. Создание отчёта за период

Ещё...

Microsoft Access. Заполнение реквизитов предприятия

12. При разработке баз данных очень часто встречаются случаи, когда необходимо автоматическим способом заполнить поля в форме. Это показано в этом примере (..\15 Формы\la_from2.accdb\12. Заполнение реквизитов предприятия)

'==============================================================
' Заполнение реквизитов
Private Sub allFirms_AfterUpdate()
Dim rst As Recordset
    On Error GoTo 999
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM [Фирмы] WHERE [Фирма]='"  Me.allFirms  "'")
    If rst.RecordCount  0 Then
        With rst
            'Форму Вы можете связать с таблицей
            Me.Фирма = rst!Фирма
            Me.Банк = rst!Банк
            Me.Счет = rst!Счет
            Me.КорСЧЕТ = rst!КорСчет
        End With
    End If
    rst.Close
    Exit Sub
999:
    MsgBox Err.Description
    Err.Clear
End Sub

' Определяем максимальный номер документа
Private Sub Form_Current()
    If Me.NewRecord = True Then
       Me.Nдок.DefaultValue = 1 + funGetMaxNumber("SELECT Max([Nдок]) as NN FROM [Пример 12]")
    End If
End Sub

'==============================================================
' Получаем максимальное число
Function funGetMaxNumber(sSQL As String) As Long
Dim dbs As Database, rst As Recordset
    funGetMaxNumber = 0
    On Error GoTo 999
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(sSQL)
    If rst.RecordCount  0 Then
        funGetMaxNumber = rst![NN]
    End If
    rst.Close
    Exit Function
999:
    Err.Clear
End Function