Глава 38работа з базами даних форматаdbf

Реалізація баз даних формату DBF має на увазі, що кожна таблиця зберігається в окремому файлі. Тому в подальшому ми будемо застосовувати тер-мін «файл бази даних» або «файл БД», маючи на увазі таблицю бази даних.

Для організації упорядкування вмісту файлу БД і пошуку в ній за значенням одного або декількох полів застосовується механізм індексів. Його застосування можна порівняти з сортуванням картотеки за певним при-знаку (сукупності ознак). Однак, на відміну від картотеки, файл БД може мати відразу кілька індексів, і, відповідно, бути уперед-ченним одночасно за кількома ознаками. Кожен індекс має Наиме-вання. прізнакунікальності. вираженіеіндекса і фільтр. Найменування індексу використовується для ідентифікації індексу. Вираз індексу і фільтр є написані на спеціальній мові вирази, обчислення значення яких для кожного запису дозволяє визначити її ме-сто при упорядкуванні та необхідність приміщення її в упорядкований спи-сок (індекс може містити згадку не про всі записах таблиці, а толь-ко про що задовольняють висловом фільтра). Детальніше вираження індексу і фільтра, стосовно об'єктів XBase, розглянуті в кінці даного розділу. Унікальний індекс (має встановленим ознака унікально-сти) дозволяє мати в індексі посилання на записи тільки з різним значени третьому індексного виразу.

Індекси зберігаються в індексному файлі. Індексний файл може містити інформацію більш ніж про одне індексі.

Призначення агрегатного типу даних XBase

Для роботи з базами даних формату DBF в системі може використовувати-ся спеціальний агрегатний тип даних - XBase. Механізм роботи з базами даних формату DBF призначений для забезпечення можливості маніпулято-вання ними безпосередньо з вбудованої мови програми 1С: Підприємство. Кожен XBase-об'єкт може бути пов'язаний з одним файлом бази даних.

Об'єкти XBase мають змінюваний набір атрибутів, склад і тип яких залежить від структури файлу бази даних, з яким пов'язаний кон-конкретного об'єкт. Об'єкт містить в своїх атрибутах інформацію про одну поточного запису. Кожному полю файлу бази даних відповідає один атрибут об'єкта. Найменування атрибута збігається з ім'ям поля.

Кожен об'єкт являє собою структуру даних, розташованих в пам'яті комп'ютера і зміна вмісту його атрибутів викликає не-повільного зміни в файлах бази даних. Після увімкнення режиму автозбереження запис вмісту об'єкта в файли БД відбувається при зраді-ванні позиціонування (перехід з наступного запису, пошук по ключу і т. Д.), При вимкненому режимі автосохранения запис змін відбувається толь-ко при виклику відповідного методу об'єкта.

Слід мати на увазі, що одночасно XBase-об'єкт може бути пов'язаний не більше, ніж з одним індексним файлом. Всі зміни в базі даних, зро-ланние в сеансі роботи з одним індексним файлом, ніяк не відбиваються на інших. Тому не рекомендується мати більше одного індексного файлу для БД. В іншому випадку, після кожного відкриття БД з індексним файлом, відмінним від відкритого в попередньому сеансі роботи з базою, слід вироб-дить переіндексацію (оновлення вмісту індексного файлу).

Метод стиснення бази викликає фізичне знищення записів, позначений-них як віддалені. Метод очищення бази викликає фізичне знищення всіх записів. Після застосування цих методів відновлення видалених запи-сей стає неможливим.

Крім роботи з існуючими базами даних, агрегатний тип XBase має набір методів, що дозволяють створити нову базу даних довільної структури, нові індекси і новий індексний файл. Слід зазначити, що, якщо використання методів, які змінюють структуру БД, можливо тільки для об'єктів, не пов'язаних з базою даних (т. Е. Для новостворюваних БД), то створення нових індексів і індексного файлу можливо як для створюваних БД, так і для вже існуючих і відкритих.

Основне призначення об'єктів XBase - організація експорту-імпорту ін-формації в / із зовнішніх файлів формату DBF. Використання методів Xbase для доступу безпосередньо до даних інформаційної бази системи 1С: Підприємство не рекомендується.

Об'єкти XBase не підтримують поля типу memo (див. ДобавітьПоле).

Підтримувані об'єктом XBase фукции, які можна використовувати у виразах і фільтрах індексів перераховані в розділі «Вираз і фільтр індексу».

Об'єкти XBase підтримують тільки монопольний доступ до файлів. XBase-об'єкти підтримують індексні файли в форматі CDX. Однак, використання зовнішніми програмами (наприклад, FoxBase) індексних файлів, створених за допомогою об'єктів XBase, так само, як і використання об'єктивним тами індексних файлів, створених зовнішніми програмами, не рекомендується через можливу несумісність версій.

Контекст роботи з XBase

У всіх програмних модулях для роботи з базами даних формату DBF слід використовувати об'єкти типу XBase. Можна створити довільне число об'єктів типу XBase за допомогою функції СоздатьОб'ект. Щоб звернути-ся до атрибуту об'єкта або викликати його метод, ім'я атрибута або методу (з вка-пізнанням необхідних параметрів) пишеться через точку після імені об'єкта.

Російськомовне написання ключового слова XBase відсутня.

ФС.ВибратьФайл (0, имяфайла, ІмяПуті. "*. *".);

ПутьДБ = ІмяПуті + имяфайла;

Якщо ДБФ.Открита () = 1 Тоді

Попередження ( "База відкрита", 2);

ПІБ = ДБФ. FIO; // Мається на увазі, що поле FIO мається на відкритій БД

Попередження ( "Першим в" + ПутьДБ + "згаданий т." + ПІБ, 5);

Попередження ( "НЕ змогли відкрити Базу!", 2);

Атрибути об'єкта XBase

Надає доступ до поля запису з ім'ям «Поле». Ім'я поля має збігатися з ім'ям поля бази даних, з якою пов'язаний об'єк-ект.

Атрибут <Поле> надає доступ до поля запису з ім'ям «Поле». У тексті програмного модуля під терміном <Поле> розуміється ім'я конкурують-ного стовпчика файлу бази даних, з яким пов'язаний об'єкт.

Атрибут має сенс тільки якщо файл бази даних знаходиться у відкритому стані.

Склад атрибутів об'єкта може динамічно змінюватися в процесі вико-нання 1С: Підприємства і визначається набором полів файлу бази даних, з яким об'єкт пов'язаний в даних момент часу.

Надає доступ до агрегатному типу даних типу «Ключ».

Агрегатний тип даних типу «Ключ» має тільки атрибути. Склад атрі-бутов повністю повторює атрибути XBase-об'єкта за винятком того, що відсутня атрибут «Ключ». Значення атрибутів використовуються XBase-об'єктом для обчислення виразу індексу при використанні методу НайтіПоКлючу.

Методи об'єкта XBase

Числове вираження. Режим пошуку записів:

0 - шукає запис на точну відповідність ключу (=);

1 - шукає запис на точну відповідність з ключем або велику (> =);

2 - шукає запис з великим ключем (>);

-1 (мінус одиниця) - шукає запис на точне відпо-ствие з ключем або меншу (<=);

-2 (мінус два) - шукає запис з меншим ключем (<).

Число: 1 - якщо дія виконана (запис знайдений); 0 - якщо дія не виконана.

Метод Знайти дозволяє знайти запис, яка відповідає певному значенню <Ключ> ключа за поточним індексом і режиму пошуку, переданому в якості параметра. Покажчик встановлюється на знайдену запис.

Слід зазначити, що обчислення значення індексу при роботі XBase-об'єкта з базою даних здійснюється об'єктом самостійно на підставі виразу, переданого йому при створенні ключа (див. Опис методу ДобавітьІндекс). При виклику даного методу значення <Ключ> має бути обчислено засобами вбудованої мови, що може представляти визначено-ні труднощі, якщо індекс складовою, поля, включені в вираз індексу, відмінні від строкових, і т. д. Тому застосовність даного методу ограниче-на випадком використання простих строкових виразів індексу. У більш складних випадках слід застосовувати універсальний метод НайтіПоКлючу.

ЗапісьНайдена = ДБФ.Найті ( "Іванов", 0);

Знайти запис за індексом.

Числове вираження. Режим пошуку записів:

0 - шукає запис на точну відповідність ключу (=);

1 - шукає запис на точну відповідність з ключем або велику (> =);

2 - шукає запис з великим ключем (>);

-1 (мінус одиниця) - шукає запис на точне відпо-ствие з ключем або меншу (<=);

-2 (мінус два) - шукає запис з меншим ключем (<).

Число: 1 - якщо дія виконана (запис знайдений); 0 - якщо дія не виконана.

Метод НайтіПоКлючу дозволяє знайти запис, що відповідає значени-ям атрибутів агрегатного об'єкта типу «Ключ» XBase-об'єкта за поточним індексом і режиму пошуку, переданому в якості параметра. Покажчик уста-новлюється на знайдену запис. Перед викликом методу слід встановити значення всіх атрибутів агрегатного об'єкта типу «Ключ», які беруть участь в обчисленні виразу поточного індексу (див. Опис методу ДобавітьІндекс).

ДБФ.Ключ.DIV_ID = 15; // відділ нових розробок

ЗапісьНайдена = ДБФ.НайтіПоКлючу (0); // пошук по складеному, неоднорідного ключу

Отримати значення поля запису.

При роботі з індексами під час виконання 1С: Підприємства XBase-об'єкти виробляють обчислення виразу індексу і фільтра. Вираз індексу і фільтра - це рядкові вирази, складені на спеціальному мові об'єктів XBase.

Вираз індексу використовується для обчислення значення ключа для каж-дой записи бази даних. Результатом обчислення вираження повинно бути значення одного з наступних типів: числове, строкове, дата або булево. Вираз фільтра має повертати результат типу булево. Якщо значення виразу фільтра для конкретної записи бази даних одно істині, інфор-мація про цей запис буде включена в індексний файл, в іншому випадку індексний файл не буде містити інформацію про цей запис і позиційні-вання на цю запис XBase-об'єкта з даними поточним індексом вироб-диться не буде.

Атрибути (крім "Ключ"), константи і функції можуть бути використані як частини виразів. Частини вирази можуть об'єднуватися за допомогою інших функцій або операторів. Найпростішим вираженням може бути ім'я атрибута: "FULL_NAME". В такому випадку тип виразу буде відповідати типу ат-рібута.

Константи можуть мати числовий, строковий і булевий тип. Строкові константи полягають в одиничні лапки ( 'Строкова константа'). При необхідності включити до складу строкової константи символу подвійної ка-вичкі, його слід випереджати зворотною косою межею, наприклад, 'Фірма "Вега"'. Булеві константи записуються як. TRUE. або. Т. для позначення-ня істини і. FALSE. або. F. в іншому випадку.

Оператори використовуються для об'єднання частин висловлювання. Частини Вира-вання повинні мати тип, відповідний оператору, наприклад, оператор "/" (поділ) працює з двома числовими значеннями.

Порядок виконання операторів в вираженні відповідає загальноприйнято-му - з урахуванням дужок і пріоритетів операторів. Наприклад вираз "1 + 2 * 3" поверне 7, а "(1 + 2) * 3" поверне 9.

Оператор "Об'єднання 2" трохи відрізняється тим, що прогалини в кінці першого рядка будуть переміщені в кінець результату. Наприклад, результатом обчислення виразу " 'Іванов' + 'І. І.' "Буде" Іванов І.І. ', а "' Іванов '-' І. І. ' "- 'ІвановІ.І.'.

Менше або дорівнює

Більше або дорівнює

" 'CD' $ 'ABCD'" поверне ". Т."

"8 <7 " вернет ". F ."

Тип дати. Системна дата.

Число. Номер дня в місяці.

Рядок. Значення цієї дати у форматі ММ / ДД / РР

Рядок. Значення цієї дати у форматі РРРРММДД

IIF (Log, IfTrue, IfFalse)

Log - висловлю-ня булева ти-па.

IfTrue. IfFalse - тип визначається під час исполне-ня. Повинні мати однаковий-ву довжину і тип.

Тип збігається з типом IfTrue і IfFalse.

Повертає IfTrue, якщо зна-ня обчисленого виразу Log одно істині, і IfFalse в про-тивно випадку.

Схожі статті