- •5.05150104 "Дизайн друкованої продукції"
- •Урок 8. Запис і читання даних
- •Робота з ascii -файлами
- •Мал. 8.1. Ascii - файл з роздільниками.
- •Послідовний доступ
- •Мал. 8.2. Зразок послідовного файлу.
- •Мал. 8.3. Перегляд результатів.
- •Довільний доступ
- •Двійковий доступ
- •Проста програма шифрування
- •Мал. 8.4. Запис в текстовому файлі.
- •Мал. 8.5. Форма для програми шифрування.
- •Мал. 8.6. Стандартне діалогове вікно.
- •Елементи даних
- •Використання елементу даних
- •Властивості елементу даних
- •Мал. 8.8. Властивості елементу даних
- •Анатомія бази даних
- •Створення баз даних в Visual Data Manager
- •Мал. 8.9. Вікно бази даних із розширеними властивостями
- •Створення таблиці
- •Конструювання таблиці
- •Мал. 8.10. Діалогове вікно Table Structure.
- •Створення полів
- •Мал. 8.11. Діалогове вікно AddField.
- •Введення даних
- •Створення запиту
- •Мал. 8.12. Діалогове вікно Query Builder.
- •Мал. 8.13. Результати запиту.
- •Первинні ключі
- •Лічильники
- •Числові поля
- •Грошові поля
- •Логічні поля
- •Поля Memo
- •Поля дати/часу
- •Зміна таблиці
- •Технологія ado (ActiveX Data Objects)
- •Мал. 8.14. Моделъ ado.
- •Використання елементу даних ado
- •Мал. 8.15. Діалогове вікно сторінок властивостей елементу даних ado
- •Puc. 8.16. Вибір провайдера
- •Мал. 8.17. Вибір файлу бази даних
- •Мал. 8.18. Завдання властивості RecordSource
- •Використання об'єктів підключення і набору записів ado
- •Puc. 8.19. Створення посилання на бібліотеку типів ado
- •Додавання записів
- •Оновлення записів
- •Видалення записів
- •Що нового ми дізналися?
- •9 Урок. Друкування
- •Виведення даних на друкування
- •Метод Print
- •Перегляд значень у вікні безпосередніх обчислень
- •Перегляд помилок у вікні безпосередніх обчислень
- •Мал. 9.1. Вікно безпосередніх обчислень з інформацією про помилку.
- •Виправлення помилки
- •Метод PrintForm
- •Колекція Printers
- •Мал. 9.2. Виведення вмісту колекції Printers. Використання Crystal Reports в Visual Basic
- •Мал. 9.4. Режим конструктора в Crystal Reports Установка Crystal Reports Pro
- •Створення звіту
- •Мал. 9.6. Зв'язки між таблицями
- •Мал. 9.7. Вкладка Fields
- •Puc. 9.8. Вибір поля для сортування
- •Мал. 9.9. Вкладка Total Мал. 9.10. Фільтрація записів в звіті
- •Мал. 9.11. Вибір стилю звіту
- •Мал. 9.12. Готовий звіт
- •Мал. 9.13. Режим конструювання
- •Використання звіту в додатку
- •Мал. 9.14. Звіт в режимі конструювання. Мал. 9.15. Діалогове вікно Property Pages для Crystal Reports 4.6.
- •Мал. 9.16. Додавання елементу Crystal Report.
- •Мал. 9.17. Виведення звіту з додатка. Друкування початкового тексту програми
- •Мал. 9.18. Діалогове вікно Print. Діалогове вікно Print
- •Перегляд результатів
- •Розшифровка лістингу
- •Що нового ми дізналися?
Puc. 8.19. Створення посилання на бібліотеку типів ado
7. Натисніть кнопку OK, щоб створити посилання на бібліотеку і закрити діалогове вікно References. Тепер ви можете використовувати об'єкти підключення і набору записів ADO у своїй програмі.
8. Додайте наступні оголошення в секцію(Declarations) форми:
Private cn As ADODB.Connection
Private rs As ADODB.Recordset
9. Вставте наступний фрагмент в процедуру події Form_Load:
Private Sub Form_Load()
Dim cmd As String
Dim sql As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
‘ Створити рядок підключення
cmd = "Provider=microsoft.jet.OLEDB.3.51'" & _
""Data Source=" & _
""C:\Program Files\Microsoft Visual Studio" & _
""\VB98\Biblio.mdb"
‘ Встановити з'єднання з базою даних
Set cn = New ADODB.Connection
With cn
..ConnectionString = cmd
..Open
End With
‘ Створити запит
sql = "select * from authors"
‘ Відкрити набір записів
Set rs.= New ADODB.Recordset
With rs
..Open sql, cn, adOpenForwardOnly, adLockReadOnly
Do While Not rs.EOF
‘ Включити автора в список
lstAuthors.AddItem rs("Author")
‘ Перейти до наступного запису
rs.MoveNext
Loop
‘ Закрити набір записів .
Close
End With
Set rs = Nothing
‘ Закрити підключення
cn.Close
‘ знищити об'єкт підключення
Set cn = Nothing
End Sub
10. Збережіть і запустіть проект.
Програма просто звертається до бази даних Biblio.mdb і заповнює список іменами авторів з таблиці Authors. Напевно, вам здасться, що для такого простого завдання програма вийшла занадто великою, але якщо як слід розібратися, ви зрозумієте, що в ній немає нічого складного.
На початку програми оголошуються дві змінні, cmd і sql. У змінній cmd, зберігатиметься рядок підключення ADO, використовуваний для підключення до бази даних. Змінна sql призначена для тексту SQL - запиту. Наступний фрагмент створює рядок для підключення до Biblio.mdb c допомогою нового провайдера OLEDB (вказується після конструкції Provider = на початку рядка).Якщо вам потрібно буде підключитися до джерела даних іншого типу, допустимо, до SQL Server - вкажіть іншого провайдера. Другий параметр стрічки визначає ім'я бази даних. Рядок підключення ADO виконує усю основну роботу, тому їй слід приділити основну увагу. Виділення цього коду в окрему функцію дозволяє створювати різні рядки підключення для роботи з різними базами даних (наприклад, Access, SQL Server і Oracle). Такій функції можна передавати параметр, по якому будується унікальний рядок підключення. Це спростить процес перенесення ваших застосувань з підтримкою ADO на інші джерела даних.
Наступний крок - фактичне підключення до бази даних. Для цього ми створюємо об'єкт ADO.Connection і потім встановлюємо його властивість ConnectionString рівним cmd. Після цього виконується метод . Open цього об'єкту. Метод бере дані, що знаходяться у властивості ConnectionString, і використовує їх для підключення до бази.
Після установки з'єднання з базою ми відкриваємо об'єкт ADO. Recordset для отримання записів. Проте спочатку необхідно передати йому SQL -запрос, який визначає потрібні записи. У нашій програмі це робить наступний рядок:
sql = "select * from authors"
Не вдаючись до подробиць SQL, цей запит означає наступне: "вибрати усі (*) записи з таблиці з ім'ям Authors". Саме це і було зроблено в нашому прикладі.
У нас є запит, по якому можна створити набір записів. Новий об'єкт набору записів створюється таким чином:
Set rs = New ADODB.Recordset
Тільки що створений набір не містить ніякої інформації. У блоці With ми наказуємо ADO відкрити набір командою
With rs
..Open sql, cn, adOpenForwardOnly, adLockReadOnly
Ймовірно, ви звернули увагу на параметри, необхідні для відкриття набору записів. У першому параметрі зберігається SQL -запрос для цього набору. Другий параметр, cn, говорить про те, що для підключення до бази даних набір повинен використовувати об'єкт підключення cn. Можна провести аналогію між набором записів і машиною: підключення - дорога, по якій машина добирається до даних. Наступний параметр повідомляє ADO, який тип курсору бази даних повинен використовуватися для набору. У наступній таблиці перераховані можливі варіанти курсорів з короткими описами.
Тип курсора |
Опис |
adOpenForwardOnly |
Курсор цього типу може використовуватися лише для послідовного перебору записів в одному напрямі. Перебір у зворотному напрямі і довільні переходи не дозволяються. Проте цей варіант відрізняється швидкістю і згодиться у разі, якщо вам потрібно було швидко заповнити список або комбіноване поле |
Ad0penKeyset |
Оптимальний тип курсору для великих наборів. Ви не отримуєте повідомлень про зміни в даних, які можуть вплинути на ваш набір записів |
Ad0penDynamic |
Курсор дозволяє відстежувати усі зміни, що вносяться іншими користувачами у ваш набір записів. Він має найбільші можливості, але через це працює повільніше за усіх інших |
AdOpenStatic |
Статичний курсор зручний для невеликих наборів |
Нарешті, останній параметр повідомляє ADO про те, що доступ до набору записів здійснюватиметься тільки для читання. Замість нього можна вказати інший peжим блокування із наступної таблиці, проте в нашому прикладі був вибраний найшвидший варіант.
Тип блокування |
Опис |
aLockReadOnly |
Цей режим блокування слід використовувати лише у тому випадку, якщо ви не збираєтеся додавати, оновлювати або видаляти записи з набору |
AdLockPessimistic |
Запис блокується у момент початку редагування і залишається заблокованою до його завершення або переміщення курсору до наступного запису |
AdLockOptimistic |
Оптимістичний режим: блокування включається при виклику методу . Update для запису. В процесі редагування запис залишається незаблокованим і лише тимчасово блокується на час збереження змін в базі |
AdLockBatchOptimistic |
Режим дозволяє виконувати оптимістичне блокування при оновленні декількох записів |
Якщо усі параметри були вказані вірно, набір записів відкривається і ви можете працювати з його даними.
У наступному фрагменті програма в циклі перебирає усі записи до тих пір, поки не буде знайдена ознака кінця файлу (EOF). При переміщенні курсору до чергового запису ми заносимо дані з поля Author в список:
lstAuthors.AddItem rs("Author")
Після занесення чергового імені в список ми переходимо до наступного запису за допомогою методу . MoveNext. Якщо забути про це, цикл працюватиме вічно, тому що ознака кінця файлу ніколи не буде досягнута. Нарешті, після закінчення роботи усе відкрите треба закрити, а усе створене - знищити. Для цього слід викликати метод .Close для об'єктів Recordset і Connection. Далі цим об'єктам привласнюється Nothing для запобігання витокам пам'яті у вашому застосуванні.
