- •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
- •Перегляд результатів
- •Розшифровка лістингу
- •Що нового ми дізналися?
Логічні поля
Логічні поля можуть містити лише одне з двох значень (Та ні, Істина/ Брехня, Ввімк./Вимк.). Наш книжковий магазин продає книги двох видів - сучасні книги про комп'ютери і раритетні видання. Хотілося б розрізняти відповідні записи в базі даних з першого погляду. Один із способів полягає в створенні логічного поля, яке показує, чи являється це видання раритетним. За допомогою цього поля і відповідного запиту можна легко створити два окремі каталоги - перший для читачів книг про комп'ютери, а другий - для любителів рідкісних видань. Такому полю добре підійде ім'я RARE BOOK? (зверніть увагу на знак питання).
Поля Memo
Поля Memo ідеально підходять для зберігання довільного тексту - скажімо, заміток пояснень. З подібним текстом буває незручно працювати в звичайних текстових полях, обмежених по довжині і форматуванню тексту. Крім того, до такого тексту практично непридатні критерії перевірки. Тип даних Memo був розроблений спеціально для зберігання довільного тексту. У полі Memo можна ввести більше символів, чим в звичайному текстовому полі, але за це доводиться розплачуватися додатковим місцем на диску. Максимальна довжина текстового поля обмежена 255 байтами (тобто 255 символами, або приблизно 40 словами), а поле Memo може містити до 64 000 байт.
Поля Memo ідеально підходять для зберігання детальних описів рідкісних книг. Наприклад, ви можете уточнити, чи є це видання першим з відомих, в якому стані знаходиться книга, чи збереглася початкова обкладинка і чи є в ній автограф автора. Усі ці подробиці напевно зацікавлять потенційного покупця. Поле Memo в нашій таблиці називатиметься NOTES.
Поля дати/часу
Поля дати/часу спеціально розроблені для зберігання відомостей про дату, часу або і том, і другом. У Access дата і час зберігаються у внутрішньому числовому форматі, що дозволяє використовувати їх в обчисленнях. Проте в Visual Basic і Access ці величини відображуються у форматі дати/часу, до того ж ви можете вибрати потрібний формат. Введення даних досить гнучке: наприклад, дату 27 квітня 1998 року можна ввести наступними способами:
4 27 98;
27 Арг
April
04/27/1998.
Незалежно від формату введення, дата завжди відображується у форматі, вибраному для цього поля. Якщо рік не вказаний, зберігається і відображується поточний рік. Так, щоб ввести дату 27 квітня 1989 року, доведеться явно вказати 89 або 1989.
Поле дати/часу згодиться і в базі BookList. У нім можна зберігати дату вступу книг на склад - нас цікавить значення календарної дати, а не часу. Ці відомості представляють більший інтерес для рідкісних видань, оскільки по них можна упізнати термін, протягом якого у вас знаходиться та або інша книга. Наприклад, якщо рідкісна книга порошиться на полиці більше року, пора подумати про зниження ціни. Ви можете зажадати у Visual Basic або Access вивести список таких книг і автоматично понизити ціну на них. У нашій таблиці поле дати/часу називатиметься ACQUIRED.
Зміна таблиці
У попередньому розділі були перераховані деякі поля і типи даних, таблиці BookList, що збільшують корисність. Ha всякий випадок коротко перерахую ці поля і їх типи.
Зміна макету таблиці і додавання відповідних полів виконується так:
1. Якщо таблиця BookList не була відкрита в режимі конструктора, клацніть на ній правою кнопкою миші і виберіть з контекстного меню команду Design.
2. Натисніть кнопку Add Field, щоб додати в таблицю нове поле. У осередку Name введіть ім'я поля BOOK CODE. Перейдіть до осередку Type клавішею Tab, відкрийте список і виберіть з нього рядок Long. Щоб це поле стало полем лічильника, Встановіть прапорці AutoIncrField і Required. Натисніть кнопку ОК.
3. Введіть ім'я наступного поля, QUANTITY, і натисніть клавішу Tab. Це поле має бути числовим; виберіть із списку Type рядок Byte. Натисніть кнопку OK, щоб приступити до створення наступного поля.
4. Введіть ім'я наступного поля, PRICE, і натисніть клавішу Tab. Перейдіть до списку Type і введіть в нім букву з - при цьому із списку буде вибраний рядок Currency. Натисніть кнопку OK, щоб зберегти визначення поля і приступити до створення наступного.
5. Введіть ім'я наступного поля, RARE BOOK?. Виберіть для нього логічний тип (Boolean). Знову натисніть кнопку OK, щоб перейти до наступного поля.
6. Наступне поле повинне мати ім'я NOTES. Виберіть для нього тип даних Memo і натисніть кнопку ОК.
7. Залишилося ввести останнє поле. Введіть ім'я ACQUIRED, виберіть тип дати/часу (Date/Time) і збережете кнопкою ОК. Закрийте діалогове вікно Add Field кнопкою Close.
8. У діалоговому вікні Table Structure натисніть кнопку Add Index, введіть в поле Name текст BOOK CODE. Клацніть на рядку BOOK CODE в списку Available Fields, щоб включити його в список Indexed Fields.
Також звернете увагу на те, що прапорці Primary і Unique встановлені - це означає, що поле BOOK CODE призначене первинним ключем. У деяких ситуаціях таке використання лічильника виявляється небажаним, і тоді (за відсутності інших відповідних полів) як первинний ключ можна вибрати комбінацію декількох полий бази.
Наприклад, в бібліотечній базі даних первинним ключем не можна вибрати ні дату видачі книги, ні її номер. У обох випадках значення поля не є унікальним. У першому випадку воно повторюється для усіх читачів, що отримали книги цього дня, а в другому - для усіх читачів, що брали цю книгу в різні дні. Проте поєднання цих двох полів дає унікальне значення (за умови, що жодна книга не була видана, повернена і видана знову того ж дня).
Щоб призначити в базі даних складений первинний ключ, клацніть на іменах полів в списку, і вони будуть внесені в список Index Fields. Коли обидва поля будуть виділені, натисніть кнопку OK, щоб призначити цей індекс первинним ключем бази. При перегляді властивостей індексу у вікні бази даних з'ясовується, що властивості UNIQUE, PRIMARY і REQUIRED мають значення True. Тепер таблиця індексується по номеру книги (поле BOOK CODE), і кожне значення цього поля має бути унікальним. Оскільки ядро Access автоматично збільшує значення лічильника, можна бути упевненим в унікальності значення. У разі текстового поля вам довелося б простежити за тим, щоб його значення не повторювалося. Якщо цього не зробити, Access не дозволить зберегти запис-дублікат до тих пір, поки значення унікального поля не буде змінено.
9. Тепер проіндексуємо базу по інших полях. Введіть TITLE в текстовому полі Name, після чого клацніть на рядку TITLE в списку Available Fields. Зніміть прапорці Unique і Primary, це призводить до того, що в цьому полі будуть дозволені значення, що повторюються, - іншими словами, ви зможете включити в базу книги з однаковими назвами. Збережете індекс кнопкою ОК.
ПІДКАЗКА. Створення індексу, як і вибір первинного ключа, прискорює багато операцій в базах даних Access. Поле з унікальним індексом дозволяє організувати деяку подібність перевірки значень, що вводяться, - вам не вдасться ввести інформацію, що повторюється. Унікальний індекс у багатьох відношеннях схожий на первинний ключ, за винятком того, що первинний ключ є головним індексом таблиці і може використовуватися для установки зв'язків з іншими таблицями.
10. Повторите попередній етап і створіть індекс по полю LASTNAME. При цьому дотримуйтеся обережності і не перетворите його на унікальний індекс.
11. Закінчивши створення індексів, закрийте діалогове вікно кнопкою Close.
12. У списку Field List клацніть на рядку QUANTITY, щоб зробити це поле поточним. Введіть 1 в осередку DefaultValue - ця величина визначає кількість книг, що приймається за умовчанням.
При введенні нового запису Access автоматично поміщає в це поле значення за умовчанням. Це зручно для рідкісних книг, які зазвичай купуються і продаються в одиничному екземплярі. Якщо в магазині є декілька сучасних книг, вам доведеться вручну перевизначити значення цього поля. Значення за умовчанням надзвичайно корисні і можуть використовуватися для усіх типів полів, окрім лічильників і об'єктів OLE.
13. У списку Field List клацніть на рядку PRICE, щоб зробити це поле поточним.
Цього разу ми задамо не значення за умовчанням, а правило перевірки. Наприклад, значення поля QUANTITY можна перевіряти, щоб запобігти випадковому введенню негативної величини. З іншого боку, значення числового типу Byte не можуть виходити за межі інтервалу 0-255, так що перевірка насправді виявляється зайвою.
14. У осередку ValidatationRule введіть>0 and <1000. Хоча поле ціни має грошовий тип, воно може набувати і негативних значень.
Встановлене нами правило перевірки не дозволяє ввести негативну ціну і одночасно запобігає введенню цін, що перевищують тисячу доларів (чи фунтів, або іншої грошової одиниці, з якою ви працюєте). Передбачається, що наш магазин не торгує книгами, ціна яких перевищує $1000.
15. Клацніть на осередку ValidationText і введіть в ній текст Допустиме значення ціни - від 0 до 1000. Якщо ви спробуєте ввести ціну, що виходить за межі вказаного інтервалу, відкриється діалогове вікно з попередженням. Щоб повідомлення було змістовнішим (і, можливо, підказувало допустиме значення), слід ввести його текст в осередку ValidationText.
16. Збережете макет таблиці кнопкою Close.
Робота з таблицею закінчена. Спробуємо створити проект Visual Basic, в якому використовується нова база даних. Виконаєте в Visual Basic команду Add - Ins > Data Form Designer, щоб миттєво створити форму на основі таблиці або запиту. Існує і інший варіант - створіть на формі елемент даних і додайте текстові поля або інші елементи, пов'язані з ним. Серед найбільш важливих властивостей елементу даних - властивість DatabaseName, що посилається на базу даних Access (.MDB), і RecordSource, яке посилається на таблицю або запит в MDB - файлі. Властивість DataSource визначає елемент даних, а властивість DataField - поля джерела даних (таблиці або запиту), вказаного у властивості RecordSource елементу даних. У комбінованих полях або списках для отримання інформації від елементу даних використовується властивість RowSource (у поєднанні з ListField). Для пересилки інформації назад в базу через елемент даних застосовується властивість DataSource (і DataField).
