- •Розділ 1 постановка задачі
- •1.1. Характеристика задачі
- •1.2. Вхідна інформація
- •1.3. Вихідна інформація
- •Розділ 2 розробка алгоритму розв'язання задачі
- •Розділ 3 організація інформаційного забезпечення
- •3.1. Загальна характеристика інформаційного забезпечення
- •3.2. Побудова системи класифікації та кодування
- •3.3. Структура баз даних та інформаційних масивів
- •Розділ 4 розробка програмного забезпечення задачі
- •4.1. Опис головного модулю програми (головного вікна)
- •4.2. Опис розробленої програми
- •Висновки
- •Список використаних джерел
Розділ 4 розробка програмного забезпечення задачі
4.1. Опис головного модулю програми (головного вікна)
В даний час ОС Windows визначає вимоги до програмного забезпечення для персональних комп'ютерів. Яку б мову програмування не обрати, зрозуміло, що базою є Windows API (Application Programming Interface - інтерфейс прикладного програмування), і освоївши його, можна писати програми будь-якого степеня складності, використовуючи всі можливості, що пропонуються операційною системою. При роботі з базами даних виникає проблема, яка полягає в тому, що що дані можуть поступати з самих різних джерел, кожне з яких володіє своєю специфікою. Проте написання програми істотно спрощується із створенням уніфікованого механізму взаємодії з самими різними джерелами даних. За минулий час різними компаніями було запропоновано безліч рішень в цій області. Найбільш значними є Microsoft ODBC (Open Database Connectivity) і Borland ШАРІ (Integrated Database Application Programming Interface). Технологія Borland ШАРІ більше відома під ім'ям BDE (Borland Database Engine).
В мові програмування Visual Basic була створена своя технологія роботи з базами даних MDB(Microsoft Access). Ця технологія дала змогу вільно управляти даними в БД
Само по собі ця обставина не є останньою новиною в області програмування — модульна архітектура і об'єктно-орієнтований підхід до побудови програм давно є визнаними стандартами. Новиною є те, що є цими компонентами і об'єктами - ними є безпосередньо виконуваний двійковий код - файли, які ніяк не треба "пов'язувати" з своїм проектом, - їх досить зареєструвати в операційній системі, і вони будуть доступні будь-якій програмі, що виконується на даній машині. Тобто їх використання в своїй програмі проводиться "без використання операцій збірки модуля".
Технологія DAO дозволяє підключатися до будь-яких баз даних, з розширенням MDB, достатньо лише вказати ім'я бази. База даних для даної програми була створена у Microsoft Access. Програми типу Microsoft Access можуть зберігати інформацію в декількох зв'язаних між собою таблицях і тому називаються реляційними базами даних. При вірній організації інформації всі таблиці можна вважати єдиною областю пам'яті та отримувати з них дані у відповідності із потребами.
4.2. Опис розробленої програми
Програма після свого запуску перш за все проводить ініціалізацію бібліотек BDE, які критично необхідні для роботи з базою даних. При успішному проведенні цієї операції, проводиться зчитування опцій із файлу ініціалізації. Після успішного проведення всіх необхідних ініціалізацій відбувається відкриття бази даних, вже після чого на екрані з'являється головне вікно програми, яке показано на рис 4.1.
Рис 4.1. Головне вікно програми.
Головне вікно програми є відправним пунктом для проведення будь-яких операцій для користувача.
Для вибору необхідний дій треба користуватися пунктами головного меню.
Під час роботи з програмою ми будемо безпосередньо використовувати такі пункти головного меню:
1). «Файл» - цей пункт меню містить наступні пункти:
- «Открыть базу»
- «Выход»
2). «Выборка данных» - цей пункт меню містить наступний пункт:
- «Выбор условий отбора»
3) «Отчет»
Підменю «Файл» дає доступ до роботи з діалоговими вікнами, за допомогою яких можна здійснити різноманітні операції (відкриття бази даних, вихід з програми).
При виборі пункту меню «Файл» → «Открыть базу» ми бачимо діалогове вікно, за допомогою якого здійснюється вибір БД.
Рис 4.2. Вибір БД
Після вибору бази ми бачимо що відображається основна таблиця БД.
Розглянемо цю процедуру краще, подивившись код програми:
Private Sub Vivod_Click()
On Error GoTo ErrHandler:
CommonDialog1.CancelError = True
CommonDialog1.Filter = "Databases|*.mdb"
CommonDialog1.ShowOpen
On Error GoTo ErrHandler
Set db = OpenDatabase(CommonDialog1.filename)
Set rs = db.OpenRecordset("Select * from Osnov", dbOpenDynaset)
Set Data1.Recordset = rs
filename = CommonDialog1.filename
Form1.Vib_dan.Visible = True
Form1.Exit.Visible = True
Form1.Command1.Visible = True
Form1.Command2.Visible = True
Form1.otch.Visible = True
Exit Sub
ErrHandler:
MsgBox Err.Description
Exit Sub
End Sub
Спочатку я звертаюсь до об’єкту ‘ComandDialogControl’ який повертае повний шлях ,з ім’ям, до вибраного файлу. Об’єкт ‘ComandDialogControl’ дозволяє таку можливість як виклик вікна вибору файлу, повертає цей об’єкт повний шлях або ім’я файлу. Потім формуємо Recordset і привласнюємо його як результат, який потрібно вивести об’єкту Data. З об’єктом Data в свою чергу пов’язаний елемент управління DataGrid, який і виводить те що ми відкрили в rs. Повний шлях до файлу присвоїли строковій змінний для того, щоб мати можливість отримувати шлях до файлу в кожній формі. Потім я показую кнопки які при запуску програми були не видні.
В випадку помилки при відкритті файлу, або відміни від відкриття файлу, або помилці при відкритті машина виводить повідомлення про те що була помилка і потім можна наново вибрати базу даних.
На рис 4.3 можна побачити результат цієї процедури:
Рис 4.3. Основне вікно програми.
На рис 4.3 ми бачимо що база відкрилась нормально і ще з’явились дві кнопки: «Удалить запись» и «Добавить запись».
При натисканні кнопки «Удалить запись» активний запис в DataGrid старається і таблиця перечитується наново, а показчик в DataGrid зміститься на один запис нижче.
При натисканні кнопки «Добавить запись» :
Рис 4.5. Додавання записів у основну табицю БД
На рис 4.5 ми бачимо що здійснився переход на іншу форму на я кій розташовані елеиенти управління TextBox які в свою чергу пов’язані з елеметом управління Data. За допомогою Data управляючи данними можемо додавати в базу нивий запис з данними які будуть введені TextBox відповідно.
На цій формі ми бачимо дві кнопки «Ok» і «Cancel». При натисканні кнопки «Ok» виконується процедура:
Private Sub Ok_Click()
On Error GoTo CancelUpdate
kod = 1
Form1.rs.Update
Form1.rs.MoveLast
Unload Me
Exit Sub
CancelUpdate:
MsgBox "Ошибка при вводе данных, попробуйте ввести еще раз"
Form1.rs.CancelUpdate
If Form1.rs.RecordCount Then Form1.rs.Bookmark = Form1.book
Unload Me
End Sub
По перше Form1.rs.Update - це запис в БД новий запис. Одномоментно машина перечитує Recordset і активним стає новий запис, який є останнім в таблиці. У випадку помилки, невідповідності данних і пустих значень машина буде відображати повідомлення з текстом "Ошибка при вводе данных, попробуйте ввести еще раз" і повертає активний запис який був до цього і можна знову ввести дані і зберегти їх. При нормальному збереженні ми повернемося до вікна головної таблиці і будемо бачити новий запис.
При натисканні кнопки «Cancel» в таблицю пусте поле не додається і ми повертаємося до головного вікна програми.
Повернувшись до головного вікна програми ми бачимо що в головному меню програми є кнопка «Выборка данных», яка маю підменю «Выбор условий отбора». При натисканні ми:
Рис 4.6 Вікно вибірки даних.
В цьому вікні можна вибрати підходящі варіанти запитів, і зберегти запит в іншому документі
На цій формі є три пункти головного меню «На главную», «Настройки», «Отчет»
При натисканні пункту головного меню «На главную» ми повертаємося на головне вікно а це вікно закривається.
При натисканні пункту головного меню «Настройки» ми бачимо два підпункти: «Шрифт», «Цвет». При натисканні «Шрифт» ми бачимо діалогове вікно в якому здійснюється вибір шрифту, його розміру, яким будуть відображатися текст в елементі управління DataGrid. При натисканні пункту головного меню «Цвет» ми бачимо діалогове вікно в я кому здійснюється вибір кольору, яким буде відображатись текст в елементі управління DataGrid.
На рис 4.6 ми бачимо зліва від елемента управління прапорці. При натисканні на «Выборка по районам» з’являється елемент управління ComboBox в якому можна вибрати район який потрібен для запиту. При натисканні на «Выборка по улицам» з’являється елемент управління ComboBox в якому можна вибрати район який потрібен для запиту. При натисканні на «Выборка по количеству комнат» з’являється елемент управління Frame в якому можна вибрати кількість кімнат квартири яку потрібно знайти. Для виконання запиту є кнопка «Выполнить запрос» яка містить таку процедуру:
Private Sub Command1_Click()
On Error Resume Next
Dim a, b, c, file As String
file = "zapros.txt"
DBGrid1.Refresh
If Combo1.Text <> "" Then a = "[Sprav_ray.Rayon] = '" & Combo1.Text & "'" Else a = ""
If Combo2.Text <> "" Then b = "[Sprav_ul.Ulica] = '" & Combo2.Text & "'" Else b = ""
If Check6.Value = 1 Then
If Option1.Value = True Then f = "[Osnov.Kol_kom] = 1"
If Option2.Value = True Then f = "[Osnov.Kol_kom] = 2"
If Option3.Value = True Then f = "[Osnov.Kol_kom] = 3"
If Option4.Value = True Then f = "[Osnov.Kol_kom] = 4"
End If
c = "and"
Open file For Output As #1
Print #1, "SELECT Osnov.Kod_kvar, Sprav_ray.Rayon, Sprav_ul.Ulica, Osnov.Chislo, Osnov.Orien, Osnov.Nom_dom, Osnov.[Nom_kvar/kom], Osnov.etaz, Osnov.Etaznost, Osnov.Kol_kom, Osnov.Cena, Sprav_riel.Rieltor, Osnov.Prim, Osnov.Obsh_plosh, Osnov.Zhilay_plosh, Osnov.Rash_plosh, Osnov.Kol_bal, Osnov.Vis_potol, Osnov.Kanal, Osnov.Opis_okon, Osnov.Opis_van, Osnov.Opis_kuh, Sprav_plan.Plan"
Print #1, "FROM Sprav_ul INNER JOIN (Sprav_riel INNER JOIN (Sprav_ray INNER JOIN (Sprav_plan INNER JOIN Osnov ON Sprav_plan.Kod_plan = Osnov.Kod_rasp) ON Sprav_ray.Kod_ray = Osnov.Kod_ray) ON Sprav_riel.Kod_riel = Osnov.Kod_riel) ON Sprav_ul.Kod_ul = Osnov.Kod_yl"
Print #1, "WHERE"
Print #1, a
If Combo1.Text <> "" And Combo2.Text <> "" Then Print #1, c
If Combo1.Text <> "" And Combo2.Text <> "" Then Print #1, b
If Check6.Value = 1 Then Print #1, c
Print #1, f; ";"
Close #1
Open file For Input As #1
str1 = Input(LOF(1), #1)
Close #1
Set d = OpenDatabase(Form1.filename)
Set w = d.OpenRecordset(str1, dbOpenDynaset)
Set Data3.Recordset = w
End Sub
Спочатку машина зчитує данні вибрані в елементах управління ComboBox і зчитує інформацію з елемента управління Options, формує змінна для оформлення запиту. Відкриваємо текстовий файл і записуємо у визначеній послідовності текст SQL запиту. Потім відкриваємо цей же файл і зчитуємо із файлу SQL запит і виконуємо його через елемент управління Recordset. Якщо в ході виконання цієї процедури буде помилка, то не буде системного переривання. А результат можемо побачити на рис. 4.7.
Рис 4.7. Виконання запиту з вибраних умов.
Наявні три параметри вибірки даних, за якими розраховується запит.
Також ми бачимо пункт головного меню «Отчет» який має такі підменю:
«В HTML»
«В MS Word»
«В MS Excel»
Натиснув на «В HTML» здійснюється передача запиту з вибраними вами записами в файл htm.
Private Sub otch_html_Click()
Open "styles.css" For Output As #1
Print #1, "caption {color:green; font-family:" & nastr.FontN & ";font-size:" & nastr.FontH & "Pt;}"
Print #1, "TH {border-style:solid; border-width: 1px; font-family:" & nastr.FontN & ";font-size:" & nastr.FontN & "Pt; color: #" & nastr.Cvet & ";}"
Print #1, "TD {border-style:solid; border-width: 1px; font-family:" & nastr.FontN & ";font-size:" & nastr.FontH & "Pt; color: #" & nastr.Cvet & ";}"
Close #1
CommonDialog1.Filter = "Веб-страница (*.html)|*.html"
CommonDialog1.DefaultExt = ".html"
CommonDialog1.ShowSave
Open CommonDialog1.filename For Output As #1
Data1.Recordset.MoveFirst
Print #1, "<HTML>"
Print #1, "<HEAD>"
Print #1, "<META HTTP-EQUIV=""Content-Type"" CONTENT=""text/html; Charset=Windows-1251"">"
Print #1, "<LINK REL=STYLESHEET TYPE=""text/css"" HREF=""styles.css"">"
Print #1, "</HEAD>"
Print #1, "<BODY>"
Print #1, "<TABLE>"
Print #1, "<caption>"
Print #1, "Отчет данных по вашему запросу"
Print #1, "</caption>"
Print #1, "<TR>"
For i = 0 To Data3.Recordset.Fields.Count - 1
Print #1, "<TH>";
Print #1, Data3.Recordset.Fields(i).Name;
Print #1, "</TH>"
Next
Print #1, "</TR>"
Data3.Recordset.MoveFirst
Do While Not Data3.Recordset.EOF
Print #1, "<TR>"
For i = 1 To Data3.Recordset.Fields.Count
Print #1, "<TD>";
Print #1, Data3.Recordset.Fields(i - 1);
Print #1, "</TD>"
Next
Print #1, "</TR>"
Data3.Recordset.MoveNext
Loop
Print #1, "</TABLE></BODY></HTML>"
Close #1
Data3.Recordset.MoveFirst
ShellExecute 0, "open", CommonDialog1.filename, "", "", SW_MAXIMIZE
Exit Sub
NoHTML:
End Sub
Більш повно код викладено в додатку А
Спочатку програмним чином ми створюємо файл ‘styles.css’ і записуємо в файл налаштунки для майбутнього сайту. Задаємо колір та шрифт нашому запиту, який буде виведений в HTML файл. Викликаємо діалогове вікно за допомогою якого зберігаємо наш звіт на жорсткому диску. За допомогою команди Print вписуємо потрібні нам теги для створення файлу. В циклі таким же чином ідучи по записам записуємо значення в файл, закриваємо файл. Після закриття відкриваємо створений файл через Internet Explorer.
Натиснув на «В MS Word» здійснюється передача запиту з вибраними вами записами в файл з розширенням doc. А ось більш детально:
Private Sub otch_word12_Click()
On Error GoTo word_error
Dim app As New Word.Application
Dim doc As Word.Document
Dim p As Word.Paragraph
Dim t As Word.Table
app.Visible = True
Set doc = app.Documents.Add
doc.Select
Set p = doc.Paragraphs.Add
p.Range.Select
app.Selection.Text = "Отчет данных"
app.Selection.Font.Bold = True
app.Selection.Font.Color = &H800000
app.Selection.Font.Size = nastr.FontH
app.Selection.Font.Name = 20
p.Alignment = wdAlignParagraphCenter
doc.Paragraphs.Add
Set p = doc.Paragraphs(doc.Paragraphs.Count)
Set t = doc.Tables.Add(p.Range, 1, 9)
p.Range.Select
t.Cell(1, 1).Range.Select
app.Selection.Text = "Район"
app.Selection.Font.Color = nastr.Cvet
t.Cell(1, 2).Range.Select
app.Selection.Text = "Улица"
app.Selection.Font.Color = nastr.Cvet
t.Cell(1, 3).Range.Select
app.Selection.Text = "Количество комнат"
app.Selection.Font.Color = nastr.Cvet
t.Cell(1, 4).Range.Select
app.Selection.Text = "Цена"
app.Selection.Font.Color = nastr.Cvet
t.Cell(1, 5).Range.Select
app.Selection.Text = "Площадь"
app.Selection.Font.Color = nastr.Cvet
t.Cell(1, 6).Range.Select
app.Selection.Text = "Планировка"
app.Selection.Font.Color = nastr.Cvet
t.Cell(1, 7).Range.Select
app.Selection.Text = "Стоимость услуг"
app.Selection.Font.Color = nastr.Cvet
t.Cell(1, 8).Range.Select
app.Selection.Text = "Зароботок агента"
app.Selection.Font.Color = nastr.Cvet
t.Cell(1, 9).Range.Select
app.Selection.Text = "Доход агенства"
app.Selection.Font.Color = nastr.Cvet
Data1.Recordset.MoveFirst
Do While Not Data1.Recordset.EOF
t.Rows.Add
t.Cell(t.Rows.Count, 1).Range.Select
app.Selection.Font.Bold = False
app.Selection.Text = Data1.Recordset.Fields(1)
t.Cell(t.Rows.Count, 2).Range.Select
app.Selection.Font.Bold = False
app.Selection.Text = Data1.Recordset.Fields(2)
t.Cell(t.Rows.Count, 3).Range.Select
app.Selection.Font.Bold = False
app.Selection.Text = Data1.Recordset.Fields(8)
t.Cell(t.Rows.Count, 4).Range.Select
app.Selection.Font.Bold = False
app.Selection.Text = Data1.Recordset.Fields(9)
t.Cell(t.Rows.Count, 5).Range.Select
app.Selection.Font.Bold = False
app.Selection.Text = Data1.Recordset.Fields(11)
t.Cell(t.Rows.Count, 6).Range.Select
app.Selection.Font.Bold = False
app.Selection.Text = Data1.Recordset.Fields(18)
t.Cell(t.Rows.Count, 7).Range.Select
app.Selection.Font.Bold = False
app.Selection.Text = Data1.Recordset.Fields(19)
t.Cell(t.Rows.Count, 8).Range.Select
app.Selection.Font.Bold = False
app.Selection.Text = Data1.Recordset.Fields(20)
t.Cell(t.Rows.Count, 9).Range.Select
app.Selection.Font.Bold = False
app.Selection.Text = Data1.Recordset.Fields(21)
Data1.Recordset.MoveNext
Loop
Exit Sub
word_error:
MsgBox Err.Description & Chr(13) & "Для выполнения необходимо наличие полей в активном recordset'e."
End Sub
Спочатку підключаємо бібліотеку Microsoft Word 11.0 Object Library яка дозволяє нам звертатись до об’єктів VBA в MS Word. Спочатку ми об’являємо змінні типу Word.Application, типу Word.Table, типу Word.Paragraph, типу Word.Document які надають змогу звертатися до об’єктів VBA.. За допомогою них ми і будемо будувати структуру потрібного нам документу. Далі ми створюємо документ а на ньому параграф. Вписуємо туди заголовок нашого звіту та задаємо потрібні параметри кольору шрифту, його розміру, та назву шрифту встановленого користувачем на формі вибірки даних або тих що зберігаються на жорсткому диску. Вирівнюємо параграф з назвою звіту по центру. Створюємо табличку на потрібну нам кількість записів і заповнюємо її значеннями Recordset-а. У випадку помилки буде виведено повідомлені з кодом помилки.
Натиснув на «В MS Excel» здійснюється передача запиту з вибраними вами записами в файл з розширенням xls:
Private Sub Otch_excel_Click()
On Error GoTo excel_error
Dim i As Integer
If Data1.Recordset.RecordCount = 0 Then MsgBox "В таблице отсутствуют данные для отчета": Exit Sub
Dim e As New Excel.Application
e.SheetsInNewWorkbook = 1
e.Workbooks.Add
e.Columns(1).ColumnWidth = 5
e.Columns(2).ColumnWidth = 10
e.Columns(3).ColumnWidth = 10
e.Columns(4).ColumnWidth = 10
e.Columns(5).ColumnWidth = 15
e.Columns(6).ColumnWidth = 5
e.Columns(7).ColumnWidth = 5
e.Columns(13).ColumnWidth = 10
With e.Range("A2:v2")
.Font.Bold = True
.HorizontalAlignment = xlCenter
.MergeCells = True
End With
e.Cells(2, 1) = "Отчет данных"
e.Rows(2).Font.Bold = True
e.Rows(2).Font.Size = 20
e.Cells(3, 1) = Data1.Recordset.Fields(0).Name
e.Cells(3, 2) = Data1.Recordset.Fields(1).Name
e.Cells(3, 3) = Data1.Recordset.Fields(2).Name
e.Cells(3, 4) = Data1.Recordset.Fields(3).Name
e.Cells(3, 5) = Data1.Recordset.Fields(4).Name
e.Cells(3, 6) = Data1.Recordset.Fields(5).Name
e.Cells(3, 7) = Data1.Recordset.Fields(6).Name
e.Cells(3, 8) = Data1.Recordset.Fields(7).Name
e.Cells(3, 9) = Data1.Recordset.Fields(8).Name
e.Cells(3, 10) = Data1.Recordset.Fields(9).Name
e.Cells(3, 11) = Data1.Recordset.Fields(10).Name
e.Cells(3, 12) = Data1.Recordset.Fields(11).Name
e.Cells(3, 13) = Data1.Recordset.Fields(12).Name
e.Cells(3, 14) = Data1.Recordset.Fields(13).Name
e.Cells(3, 15) = Data1.Recordset.Fields(14).Name
e.Cells(3, 16) = Data1.Recordset.Fields(15).Name
e.Cells(3, 17) = Data1.Recordset.Fields(16).Name
e.Cells(3, 18) = Data1.Recordset.Fields(17).Name
e.Cells(3, 19) = Data1.Recordset.Fields(18).Name
e.Cells(3, 20) = Data1.Recordset.Fields(19).Name
e.Cells(3, 21) = Data1.Recordset.Fields(20).Name
e.Cells(3, 22) = Data1.Recordset.Fields(21).Name
Data1.Recordset.MoveFirst
i = 4
Do While Not Data1.Recordset.EOF
e.Cells(i, 1) = Data1.Recordset.Fields(0)
e.Cells(i, 2) = Data1.Recordset.Fields(1)
e.Cells(i, 3) = Data1.Recordset.Fields(2)
e.Cells(i, 4) = Data1.Recordset.Fields(3)
e.Cells(i, 5) = Data1.Recordset.Fields(4)
e.Cells(i, 6) = Data1.Recordset.Fields(5)
e.Cells(i, 7) = Data1.Recordset.Fields(6)
e.Cells(i, 8) = Data1.Recordset.Fields(7)
e.Cells(i, 9) = Data1.Recordset.Fields(8)
e.Cells(i, 10) = Data1.Recordset.Fields(9)
e.Cells(i, 11) = Data1.Recordset.Fields(10)
e.Cells(i, 12) = Data1.Recordset.Fields(11)
e.Cells(i, 13) = Data1.Recordset.Fields(12)
e.Cells(i, 14) = Data1.Recordset.Fields(13)
e.Cells(i, 15) = Data1.Recordset.Fields(14)
e.Cells(i, 16) = Data1.Recordset.Fields(15)
e.Cells(i, 17) = Data1.Recordset.Fields(16)
e.Cells(i, 18) = Data1.Recordset.Fields(17)
e.Cells(i, 19) = Data1.Recordset.Fields(18)
e.Cells(i, 20) = Data1.Recordset.Fields(19)
e.Cells(i, 21) = Data1.Recordset.Fields(20)
e.Cells(i, 22) = Data1.Recordset.Fields(21)
Data1.Recordset.MoveNext
i = i + 1
Loop
e.Rows(3).Font.Bold = True
e.Rows(3).HorizontalAlignment = xlCenter
With e.Range("A3:v" & CStr(i - 1))
.VerticalAlignment = xlCenter
.Borders(xlEdgeBottom).LineStyle = xlSolid
.Borders(xlEdgeLeft).LineStyle = xlSolid
.Borders(xlEdgeRight).LineStyle = xlSolid
.Borders(xlEdgeTop).LineStyle = xlSolid
.Borders(xlInsideHorizontal).LineStyle = xlSolid
.Borders(xlInsideVertical).LineStyle = xlSolid
End With
e.Range("A4:B" & CStr(i - 1)).HorizontalAlignment = xlCenter
e.Range("A3:v" & CStr(i - 1)).Font.Name = Trim(nastr.FontN)
e.Range("A3:v" & CStr(i - 1)).Font.Size = nastr.FontH
e.Range("A4:v" & CStr(i - 1)).Font.Color = nastr.Cvet
Data1.Recordset.MoveFirst
e.Visible = True
Exit Sub
excel_error:
MsgBox Err.Description & Chr(13) & "Для отображения отчета необходимо, чтобы в активном recordset'е имелись все поля." & Chr(13) & "Удостоверьтесь в наличии всех полей и попробуйте снова.", vbExclamation, "Обнаружена ошибка!"
End Sub
Повна версія надана в додатку А.
Спочатку підключаємо бібліотеку Microsoft Excel 11.0 Object Library яка дозволяє нам звертатись до об’єктів VBA в MS Excel. Спочатку ми об’являємо змінну типу Excel.Application, яка надає змогу звертатися до об’єктів VBA.. За допомогою них ми і будемо будувати структуру потрібного нам документу. Далі ми створюємо книгу, в ньому лист. Звертаючись до ячейки, за її адресою, записуємо туди заголовок нашого звіту та задаємо потрібні параметри кольору шрифту, його розміру, та назву шрифту, встановленого користувачем на формі вибірки даних або тих що зберігаються на жорсткому диску. Вирівнюємо заголовок звіту по центру ячейки. Створюємо табличку на потрібну нам кількість записів і заповнюємо її значеннями Recordset-а у циклі. У випадку помилки буде виведено повідомлені з кодом помилки, і поясненням змісту.
Закінчивши роботу з цією формою ми переходимо на основну форму і там:
Рис 4.8. Головна форма програми
Ми бачимо в пункті головного меню ще одне меню - «Отчет». Це меню відображає в іншому вікні запит з розрахунками. Це вікно можна побачити на рис 4.9.
Рис 4.9. Вікно звіту з надання послуг.
На цьому вікні в головному пункті меню ми бачимо два меню - «Отчет» і «Выход». В пункті «Отчет» є три підменю:
«В HTML»
«В MS Word»
«В MS Excel»
Опис цих підменю можна побачити вище. Меню «Выход» генерує вихід з програми.