Це керівництво описує основи розробки баз даних з використанням компонента TDbf (by Micha Nelissen) в Lazarus. Додаткова документація по TDbf також доступна. Ця сторінка була створена Tony Maro але інші контрибуторів також вітаються!
Документацію компонента TDbf в форматі pdf дивіться на SourceForge. Корисно зберегти цей pdf і звертатися до нього в міру прочитання цієї статті.
Що нам знадобиться
Цей документ був написаний з версією Free Pascal Compiler 2.3.1 / Lazarus 0.9.23.
Пакет DbfLaz встановлений за замовчуванням.
Що забезпечує TDbf
TDbf забезпечує доступ до таблиць баз даних dBase і FoxPro для Lazarus (і інших IDE), з огляду на читання, запис і створення dBase III +, dBase IV, Visual dBase VII і FoxPro таблиць. Все це робиться без використання додаткових бібліотек або движків бази даних. Просто розмістіть компонент TDbf на вашій формі, і Ви маєте миттєвий доступ в навколишньому середовищі бази даних на різних платформах. TDbf працює і в Windows і в Linux використовуючи Лазарус.
Як створити нову таблицю бази даних
Оскільки для Lazarus може бути відсутня програма на зразок "Database Desktop", ми повинні створити нову базу даних в коді.
установка шляху
Доброю думкою буде виділення для бази даних Вашого застосування власного каталогу. Це спростить резервування даних. Є два варіанти установки шляху. Ви можете встановити повний шлях використовуючи властивість FilePathFull, або встановити шлях щодо застосування своїх за допомогою властивості FilePath. Ніпрімер, установка "FilePath" під час виконання до "data /" буде використовувати субдіректоріі data тільки в директорії виконуваного файлу. Установка властивості "FilePathFull" до "/ var / data /" буде розміщувати точно за вказаним шляхом, ігноруючи розташування додатки.
вибір TableLevel
За замовчуванням, TDbf створює таблиці dBase IV. Хоча це і найбільш сумісне, деякі можливості, які Вам можуть знадобитися, не підтримуються. Для підтримки Автоінкрементний полів ви повинні використовувати дещо новіше. Типи таблиць можуть бути наступними.
- 3 dBase III +
- 4 dBase IV
- 7 Visual dBase VII
- 25 FoxPro
Ви вибираєте тип таблиці установкою властивості TableLevel відповідно.
Додавання полів
Створення полів для Вашої нової таблиці під час виконання в більшості слід старим стандартом Delphi. Як тільки ви встановили свої значення для властивостей FilePath, TableLevel, і TableName, маніпулюйте властивістю FieldDefs щоб визначити структуру. наприклад:
Типи полів визначені як:
- ftUnknown
- ftString
- ftSmallInt
- ftInteger
- ftWord
- ftBoolean
- ftFloat
- ftCurrency (TableLevel 25)
- ftBCD (TableLevel 25)
- ftDate
- ftTime
- ftDateTime
- ftBytes (TableLevel 25)
- ftVarBytes
- ftAutoInc (TableLevel 7 or 25)
- ftBlob
- ftMemo
- ftGraphic
- ftFmtMemo
- ftParadoxOle
- ftDBaseOle
- ftTypedBinary
- ftCursor
- ftFixedChar
- ftWideString
- ftLargeInt
- ftADT
- ftArray
- ftReference
- ftDataSet
- ftOraBlob
- ftOraClob
- ftVariant
- ftInterface
- ftIDispatch
- ftGuid
- ftTimeStamp
- ftFMTBcd
Виділені жирним типи полів підтримуються
Йдемо далі і створюємо!
Як тільки ви визначили поля, які хочете використовувати у вашій новій таблиці, ви можете йти далі і створити таблицю:
Як додати індекси в таблицю
Якщо Ваша база даних складається з великого числа записів, Вам може знадобитися визначити індекси щоб здійснювати більш швидкий пошук по таблиці. Щоб змінити структуру індексів таблиці, ми повинні мати ексклюзивний доступ до таблиці - який ми так чи інакше име чи б, створюючи таблицю.
Тепер, нам необхідно просто додати індекси.
Зберемо все разом і отримаємо.
Наступний приклад створює нову таблицю "customers" в коді. Звичайно, це необхідно виконати тільки один раз, і після цього всього лише ВІДКРИВАТИ таблицю, не створюючи її заново ;-)
Зовнішні індексні файли
TDbf також підтримує зберігання вторинних індексів в роздільних файлах. Це може допомогти в разі якщо очікується дуже великий розмір бази даних. Файли вторинних індексів створюються ідентично звичайним індексам, але з додаванням розширення файлу '.ndx':
Кожен раз при відкритті TDbf, необхідно завантажити файл індексів:
Також індекси повинні бути опис включаючи розширення:
Індексні файли можуть бути упаковані простим використанням:
Як приєднати TDbf до компонентів доступу до даних
Приклад, описаний раніше, показує, як створити нову таблицю бази даних програмно. Використання цієї таблиці більш ніж просте.
Компоненти доступу до даних в Lazarus (як наприклад TDbEdit) вказують на компонент TDataSource використовуючи свої властивості "DataSource" і "DataField". Компонент TDataSource обробляє з'єднання між движком бази даних і компонентами доступу до даних. Потім компонент TDataSource вказує на компонент TDbf використовуючи його властивість "DataSet". Зв'язок нагадує наступне:
Переконайтеся, що Ви встановили властивості FilePath (або FilePathFulll), TableLevel, і TableName вашого компонента TDbf перед викликом
Можна сказати набагато більше про програмуванні баз даних в Lazarus, і я рекомендую хорошу книгу або дві про програмування баз даних в Delphi, так як основні поняття однакові. Я постійно звертаюся до своєї копії "Delphi 2 Unleashed" тому що концепції та базовий код не змінюються вже 8 років.
Упаковка і перебудова таблиць
Коли запис видаляється, насправді вона фізично залишається в таблиці. Періодично Ви повинні "пакувати" таблицю щоб відновити втрачене місце. Це може бути зроблено установкою ексклюзивного режиму доступу.
Ставлення головною / підпорядкованої таблиць
Справжня сила програмування баз даних починається тоді, коли Ви маєте кілька таблиць, які посилаються один на одного. Поки TDbf не підтримує кількість посилань цілісність, але підтримує уявлення "головна / підпорядкована" між таблицями TDbf.
Припустимо, що є дві взаємопов'язані таблиці, наприклад:
Якщо ви хотіли показати все накладні для наданого клієнта, підпорядкована таблиця (invoices) може залишатися синхронізованою з головною таблицею (customers) автоматично.
На компоненті накладні TDbf встановлюють наступне:
Приклад програми - DB Browser
необхідно врахувати
В даний час немає ніякої підтримки посилальної цілісності або шифрування всередині .dbf файлів.