Реалізація роботи з таблицями

При активізації форми UserForm2 відбувається ініціалізація комбінованих списків:

Private Sub UserForm_Activate()

ComboBox1.AddItem ("Базар")

ComboBox1.AddItem ("Охорона")

ComboBox1.AddItem ("Офіс")

Також описується технологія доступу до бази даних ADO:

Dim cn As ADODB.Connection

Set cn = New ADODB.Connection

cn.Provider = "Microsoft.Jet.OLEDB.4.0"

cn.ConnectionString = "D:\Central.mdb"

cn.Open

Далі встановлюються локальні буфери для збереження таблиць. Такі буфери використовуються багато разів. Наприклад, один з них описується так:

Dim rs As New ADODB.Recordset

rs.CursorType = adOpenKeyset

rs.LockType = adLockOptimistic

rs.Source = "SELECT * FROM Працівник"

Set rs.ActiveConnection = cn

Після встановлення буферу та його заповнення, заповнюються текстові поля та комбіновані списки та інші потрібні графічні елементи форми. Для цього розроблена окрема процедура ShowRecord():

Private Sub ShowRecord()

TextBox1.Text = rs.Fields(0).Value

ComboBox3.Text = rs.Fields(5).Value

CheckBox1.Value = rs.Fields(6).Value

End Sub

Для перегляду наступного, попереднього були створені кнопки, що обробляються схожим чином. Наприклад, текст процедури обробки кнопки наступного запису виглядає так:

If Not rs.EOF Then

rs.MoveNext

If Not rs.EOF Then

ShowRecord

Else

rs.MoveLast

End If

End If

Для виключення помилок при відсутності слідуючого чи попереднього запису виконується перевірка на предмет останнього чи першого запису відповідно.

Для організації додавання запису використовується допоміжні процедури ShowEmptyRecord() (обнулює поля форми) та FillRecord() (записує введенні дані в локальний буфер).

Видалення запису проходить наступним чином:

If rs.RecordCount >= 1 Then

       rs.Delete

       If rs.RecordCount > 0 Then

           CommandButton8_Click

       Else: ShowEmptyRecord

Де CommandButton8_Click імітує натиснення кнопки оновлення. Таким чином використовується процедура обробки кнопки оновлення без явного її використання.

Закриття форми призводить до виконання команд пов’язаних з обнуленням локального буферу та закриттям зв’язків з базою даних:

rs.Close

Set rs = Nothing

cn.Close

Set cn = Nothing.

Більш детально текст програми можна побачити в додатку.

Реалізація обробки запитів

Робота з базою даних у формі для запитів проходить аналогічним чином як було розглянуто вище (див. п. 2.2). Тому розглянемо тільки особливості обробки запитів отриманих використанням мови SQL.

У даному вікні організовано роботу трьох видів запитів: по відділу, орендатору і працівникові. Назви відділів сталі, тому вони прописані при ініціалізації явно і не залежать від бази даних. Комбіновані списки орендаторів і працівників заповнюються при активації форми з бази даних за допомогою SQL-запитів. Приклад заповнення такого списку:

Do While Not rs2.EOF

ComboBox2.AddItem (rs2.Fields(0))

rs2.MoveNext

Loop

Для отримання будь-якого виду звіту досить тільки вибрати необхідну критерію в комбінованому списку на будь-якій вкладці. Обробка таких списків виконується при зміні вибору. Це виключає необхідність використовувати додаткові кнопки для формування запиту.

Як додатково, можна використати можливість виведення звіту запиту у документ Word:

Set WordApp = New Word.Application

WordApp.Visible = True

Set DocWord = WordApp.Documents.Add

DocWord.Activate

DocWord.Paragraphs(1).Alignment = wdAlignParagraphLeft

DocWord.Range(0,0).InsertAfter str1

Для цього спочатку створюється екземпляр додатку, далі відкривається в ньому новий документ. Після чого встановлюється властивість параграфу(в даному випадку вирівнювання) та виводиться текст у вказаний діапазон. Весь зміст звіту записаний в рядковій змінній str1 шляхом конкатенації.

Реалізація звітів

 

Форма для роботи зі звітами складається з двох частин, у перші знаходяться кнопки для безпосереднього формування звітів, а у другій список орендаторів та кнопка, яка автоматично формує договір з вибраним орендатором.

Для створення звітів і договору використовується SQL-запит.

Звіт має виводиться в документ Word у вигляді таблиці, автоматично обраховуючи потрібні величини. Для таблиці створюється заголовок. Документ створюється аналогічним чином як було описано вище (див. п. 2.3). Але деякі особливості.

Для створення заголовка таблиці використовується вирівнювання ліворуч та напівжирний тип шрифту:

DocWord.Paragraphs(1).Alignment = wdAlignParagraphRight

DocWord.Range(0, 20).Bold = True

Для створення таблиці наперед відомо тільки кількість стовпців, так як вони відображають незмінні характеристики. Кількість рядків таблиці невідома, вона залежить від кількості записів в базі даних, тому її потрібно підрахувати:

rs.MoveFirst

Do While Not rs.EOF

k = k + 1

rs.MoveNext

Loop

Далі проводяться оголошення необхідні для створення таблиці:

Dim tbl As Table

Set Table = DocWord.Tables.Add(Range1, k, 3)

Set tbl = DocWord.Tables(1)

Для табиці потрібно задати заголовки стовпців, стиль та дозволити малювання рамки:

DocWord.Tables(1).Borders.Enable = True 'створює розмітку таблиці

DocWord.Tables(1).AutoFormat (wdTableFormatList1)

DocWord.Tables(1).Cell(1, 1).Range = "П.І.П"

DocWord.Tables(1).Cell(1, 2).Range = "Відділ"

DocWord.Tables(1).Cell(1, 3).Range = "Сума грн."

Таблиця заповнюється по комірках, задаючи порядковий номер рядка і стовпця. Слід врахувати, що вони нумеруються з одиниці і перший рядок вже зайнятий для заголовків стовпців. Для кожного стовпця організований окремий цикл заповнення:

j = 1

For i = 2 To tbl.Rows.Count - 1

   field = rs.Fields(0).Value

   rs.MoveNext

   tbl.Cell(i, j).Range.Text = field

Next i

rs.MoveFirst

Нижній рядок таблиці теж зайнятий для автосуми. Ширина стовпців встановлюється після малювання і заповнення таблиці. Таблиця перемальовується автоматично після встановлення ширини стовпців:

DocWord.Tables(1).Cell(i + 1, j).AutoSum

DocWord.Tables(1).Cell(i + 1, 1).Range = "ВСЬОГО ГРН."

DocWord.Tables(1).Columns(1).Width = 250

DocWord.Tables(1).Columns(2).Width = 100

DocWord.Tables(1).Columns(3).Width = 80


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: