
2. Робота з базою даних
У VFoxPro під базою даних розуміють набір зв’язаних між собою таблиць та індексів, створених до цих таблиць. У VFoxPro можна також працювати з таблицями, які не належать БД: Free – вільні таблиці (з такими таблицями ми працювали у 1 лаб. роб.)
Під терміном БД у VFoxPro мають на увазі спеціальний табличний файл, у якому зберігається інформація про таблиці, зв’язки між таблицями, індекси, структуру таблиць, правила перевірки даних у полях таблиць та ін. Такий файл називається контейнерним файлом і має розширення *.dbc. У контейнерному файлі містяться посилання на таблиці та індекси, які належать до БД, а також деякі властивості таблиць та їх полів. Часто автоматично крім .dbc-файлу створюється ще два додаткові файли: *.dct – містить memo-поля контейнерного файлу, та *.dcx – є структурним індексом контейнерного файлу.
(Контернерний файл можна спробувати відкрити та переглянути за допомогою команд use та наприклад browse)
Створення бази даних
Створити базу даних можна одним з наступних способів:
У вікні диспетчера проекту Project Manager вибрати вкладку Data, а потім вибрати пункт Databases і натиснути командну кнопку <New>.
За допомогою команди
CREATE DATABASE [<ім’я БД>]
За допомогою меню VFoxPro вибрати опції File | New та Database.
П
ри
кожному з трьох вказаних способів
з'явиться діалогове вікно Create (рис.3), у
якому необхідно вказати ім'я бази даних
(якщо у команді create database вказати ім’я
БД вікно не з’явиться).
Рис. 3.
Наступним кроком Visual FoxPro автоматично відкриває вікно проектування бази даних Database Designer. Одночасно може бути відкрито кілька БД та кілька вікон дизайнера БД. На рис.4 показане вікно диспетчера проекту Project Manager, у якому створена база даних. Праворуч у вікні Visual FoxPro відображене вікно проектування бази даних і набір інструментарію Database Designer. Вміст елемента списку у вікні диспетчера проекту розкрито і відображає назви всіх основних складових компонентів бази даних. При виборі поточним вікном вікна проектування бази даних меню Project головного меню Visual FoxPro заміняється на меню Database.
Рис. 4.
Кнопки меню Database:
-
New Table
Створює нову таблицю
Add Table
Доповнює існуючу таблицю до БД
Remove Table
Видаляє таблицю з БД
New Remote View
Створює віддалене представлення (віртуальну таблицю) даних
New Local View
Створює локальне представлення даних
Modify Table
Модифікує структуру таблиці
Browse Table
Перегляд та редагування даних таблиці
Edit Stored Procedures
Редагування збережених процедур (процедур, які створюються при створені таблиці для контролю та роботи з даними таблиці)
Connections
Створення або модифікація з’єднання з віддаленими даними
Тепер всі таблиці, які будуть створюватися автоматично будуть належати до активної БД.
У проекті можна створювати декілька БД.
Одночасно в додатку можна обробляти дані, що знаходяться в різних базах даних.
Відкрити одну чи кілька баз даних можна одним із наступних способів:
за допомогою диспетчера проекту: вибрати ім'я бази даних і клацнути на командній кнопці <Modify> чи <Open>;
за допомогою команди
OPEN DATABASE [<ім’я файлу>] | ?]
[EXCLUSIVE | SHARED] [NOUPDATE] [VALIDATE]
де
EXCLUSIVE - БД буде відкрита у монопольному режимі роботи, тобто недоступною для інших користувачів.
SHARED - БД буде відкрита в загальнодоступному режимі.
Якщо ви не використовуєте EXCLUSIVE або SHARED, доступ до БД буде встановлено за змовчанням у залежності від режиму встановленого командою SET EXCLUSIVE... .
NOUPDATE - опція, яка не дозволяє проводити зміни у БД (the database is read-only).
VALIDATE - при відкритті БД проводиться її перевірка на цілісність даних (наявність всіх прописаних у БД таблиць, полів таблиць та індексів).
Незважаючи на те що, одночасно може бути відкрито декілька баз даних, у окремий момент часу тільки одна база є поточною. Для установки поточної бази даних використовується команда
SET DATABASE TO [<ім’я БД>]
або випадаючий спиок на стандартній панелі FoxPro – Databases (рис.5)
Рис.5
Вибір поточної БД на стандартній панелі
FoxPro
Взнати ім’я активної БД можна за допомогою функції
DBC( )
- повертає ім’я та шлях до поточної БД
Визначити чи відкрита БД можна за допомогою функкції
DBUSED(<ім’я БД>) – повертає .T., якщо вказана БД відкрита, інакше повертає .F.
Перегляд і зміна структури бази даних
Переглянути структуру відкритої бази даних можна у вікні View.
Змінити структуру бази даних можна одним з наступних способів:
Виконати команду MODIFY DATABASE.
Викликати вікно проектування бази даних з диспетчера проекту.
Вікно проектування бази даних Database Designer завжди відображує схему бази даних.
Отримати іннформацію про активну БД можна також за допомогою команд LIST або DISPLAY:
DISPLAY DATABASE / LIST DATABASE
[TO PRINTER [PROMPT] | TO FILE <ім’я файлу>] [NOCONSOLE]
де
NOCONSOLE – не виводить інформацію на консоль (на екран),
TO PRINTER / TO FILE FileName – направляє вивід інформаці на принтер або у файл;
PROMPT – викликає вікно налаштування принтера.
DISPLAY TABLES / LIST DATABASE
[TO PRINTER [PROMPT] | TO FILE <ім’я файлу>] [NOCONSOLE]
- виводить шлях та назву таблиць БД
Закрити поточну БД та її таблиці можна за допомогою команди
CLOSE DATABASES [ALL] / TABLES [ALL]
CLOSE DATABASES [ALL] – закриває активну БД та її таблиці. Якщо немає активної БД, закривається активна free table та її індекси. ALL – закриває всі активні БД та їх таблиці або всі відкриті free tables, індекси та файли з поточної робочої області.
CLOSE TABLES [ALL] – зактиває активну таблицю або всі таблиці БД
Видалення бази даних
Видалення файлу бази даних можна виконати такими способами:
за допомогою диспетчера проекту, вибравши в списку елементів ім'я бази даних і натиснувши на командну кнопку <Remove>
за допомогою команди
DELETE DATABASE <ім’я БД> | ? [DELETETABLES]
Відзначимо, що команда DELETE DATABASE без фрази DELETETABLES не видаляє одночасно з базою даних усі включені в неї таблиці, а тільки видаляє в цих таблицях зв'язок з базою даних і залишає їх на диску як вільні таблиці.
Додавання таблиць до бази даних
Кожна БД може містити любу кількість таблиць, але кожна таблиця може бути частиною тільки однієї БД. Створені таблиці автоматично додаються до активної БД, за винятком таблиць, які створюються з опцією FREE. Якщо активна БД не визначена (наприклад не відкрита жодна БД), таблиці автоматично створюються як FREE–таблиці. У табліці, яка належить до БД замість Free прописана назва БД, а у БД прописана таблиця та її характеристики. Окремі вільні таблиці завжди можна додати до БД.
Додати таблицю можна тільки до відкритої бази даних шляхом створення нової таблиці чи підключенням вже існуючої таблиці. Це можливо одним із наступниих спосібів:
використовуючи диспетчер проекту, вибравши в ньому елемент списку Tables на вкладці Data і натиснувши потім на командну кнопку <New> чи <Add>;
використовуючи для відкритої бази даних команду CREATE TABLE...;
використовуючи для відкритої бази даних команду
ADD TABLE <ім’я таблиці> | ? [NAME <довге ім’я таблиці>]
Відзначимо, що додати існуючу таблицю можна тільки в тому випадку, якщо це вільна таблиця. Якщо таблиця включена в яку-небудь іншу базу даних, то її варто попередньо виключити з цієї бази даних командою REMOVE TABLE.
Видалення таблиць з бази даних
Видалення таблиць з бази даних можна виконати одним з наступних способів:
за допомогою диспетчера проекту, вибравши зі списку елементів на вкладці Data ім'я таблиці, що видаляється, і клацнувши на командній кнопці <Remove>;
за допомогою команди меню Database|Remove з вікна проектування бази даних Database Designer.
за допомогою команду
REMOVE TABLE <ім’я таблиці> | ? [DELETE]
Відзначимо, що команда REMOVE TABLE без фрази DELETE видаляє таблицю тільки з бази даних, залишаючи її на диску як вільну таблицю. Таблиця стає вільною, з неї забирається первинний індекс, правила перевірки даних, значення за змовчаням ... . З БД забираються (відмічаються для видалення) зсилки на таблицю.
Команда
FREE TABLE <ім’я таблиці>
- видаляє у вказаній таблиці зсилку на належність до БД.
При видаленні таблиці з БД, а також при зміні структури таблииці, яка належить БД, або при виключенні якихось елементів у контейнерному файлі БД, в dbc-файлі з’являються записи, відмічені для видалення. Для фізичного видалення таких записів використовується команда:
PACK DATABASE
Після неодноразової модифікації БД корисно перевірити цілісність її структури. Інтегрованість даних у поточній базі даних перевіряється командою
VALIDATE DATABASE
[RECOVER]
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE <ім’я файлу>]
- перевіряє наявність таблиць та індексів на диску відповідно до записів у активній БД, а також наявність у таблицях потрібних полів та вірність встановлених зв’язків.
Опція RECOVER виводить на екран діалогове вікно, у якому можна вказати місцезнаходження таблиць та індексних файлів, якщо воно невірно записане у БД.
Створення копій таблиць з бази даних
Створити нову таблицю у FoxPro можна також під час створення копії з активної таблиці за допомогою команди
COPY TO <ім’я файлу>
[DATABASE <ім’я БД> [NAME <довге ім’я таблиці>]]
[FIELDS <список полів> | FIELDS LIKE <шаблон>]
[<діапазон>Scope] [FOR <умова>] [WHILE <умова>]
[[WITH] CDX]
[[TYPE] [FOXPLUS | FOX2X | WKS | WRK | XL5 | DELIMITED ... ]]
- створюється нова таблиця, яка містить дані активної таблиці. За змовчанням тип розширення створеного файлу .DBF.
DATABASE <ім’я БД> - вказується БД, до якої буде належати створена таблиця. За змовчанням таблиця додається до поточної БД.
NAME <довге ім’я таблиці> - нова таблиця буде включена до БД із вказаним <довгим іменем>, довжина яккого не повинна перевищувати 128 символів.
FIELDS <спивок полів> - вказуються поля, які будуть включені до нової таблиці. Якщо у результаті копіювання буде створено не таблиця, а файл іншого типу, memo-поля до копії не будуть включатися.
FIELDS LIKE <шаблон> - вказується маска імен полів, яккі будуть включені до нової таблиці. COPY TO mytable FIELDS LIKE A*,P*
<діапазон> вказує діапазон записів, які будуть включені до створеної таблиці. Діапазон можна вказати за допомогою наступних виразів: ALL, NEXT <nЗаписів>, RECORD <№ запису, REST.
FOR <умова> - до нової таблиці будуть включені записи, які задовольняють умову. Для оптимізації <умови> див. технологію Rushmore™ у SET OPTIMIZElngSET_OPTIMIZE and “Understanding Rushmore Technology” in Chapter 15, “Optimizing Applications,” in the Developer’s Guide.
WHILE <умова> - записи у нову таблицю копіюються доки виконується вказана <умова>.
[WITH] CDX - для створеної таблиці автоматично створюється структурний індексний файл, аналогічний файлу первинної таблиці.
TYPE – вказується тип нового файлу. Створений файл може бути типу FOXPLUS (СКБД FoxBASE+), FOX2X (FoxPro versions 2.0, 2.5, and 2.6), WKS (Lotus 1-2-3), WRK (Lotus Symphony), XL5 (Microsoft Excel version 5.0), DELIMITED (ASCII text file) та ін.
Створити нову таблицю можна також за допомогою команди
COPY STRUCTURE TO <ім’я файлу>
[FIELDS <список полів>]
[[WITH] CDX | [WITH] PRODUCTION]
- команда створює нову пусту free таблицю, структура якої кпіюється з активної таблиці.
FIELDS <спивок полів> - вказуються поля, які будуть включені до нової таблиці. Якщо у результаті копіювання буде створено не таблиця, а файл іншого типу, memo-поля до копії не будуть включатися.
[WITH] CDX - для створеної таблиці автоматично створюється структурний індексний файл, аналогічний файлу первинної таблиці. У Visual FoxPro primary index у новій таблиці конвертується у candidate index. CDX та PRODUCTION ідентичні класи.
Таблиці можна також зберегти форматі HTML (див. додаток 1)