MaxEdu.ru

Робота з таблицями засобами Lazarus

Подібно до Delphi, Lazarus є середовищем RAD (від англ. Rapid application development - швидка розробка додатків), що дозволяє швидко створювати для користувача інтерфейс. На відміну від Delphi, Lazarus є кроссплатформенним середовищем.Підтримуються такі ОС, як GNU/Linux, Microsoft Windows, Mac OS X, FreeBSD, WinCE.Можливо перетворення Delphi проектів в проекти Lazarus.
Lazarus містить набір візуальних компонентів LCL (аналог VCL в Delphi).У версії 0.9.26 повністю підтримуються віджити Win32/Win64 та GTK, частково підтримуються віджити GTK2, QT, Carbon, Cocoa, WinCE і fpGUI.За кількістю компонентів Lazarus поки поступається Delphi.Тим не менш, є основний набір компонентів, а також компоненти для зв'язку з базами даних. IDE переведена на різні мови, в тому числі і на російську. Досить вибрати потрібну мову при установці Lazarus.
Lazarus підтримує такі бази даних:
·dBaseтаFoxProза допомогою компонента TDbf
·InterBaseтаFirebirdза допомогою компонента TIBConnection
·Oracleза допомогою компонента TOracleConnection
·PostgreSQLза допомогою компонента TPQConnection
·ODBCза допомогою компонента TODBCConnection.
·MySQLза допомогою компонента TMySQL50Connection
Також підтримуються бази даних MS SQL Server, для цього потрібно встановити бібліотеку Zeoslib.
DBase таFoxPro
dBase - родина широко поширених систем управління базами даних, а також мова програмування, що використовується в них.Найперша СУБД цього сімейства називалася dBase II і була випущена в 1980 році компанією Ashton-Tate під CP/M, пізніше з'явилися версії для Apple II, Apple Macintosh, UNIX, VMS і IBM PC під DOS.Версія для PC разом з пришедшими їй на зміну dBase III і dBase IV були кілька років однією з найбільш розповсюдженіших програм.Довгий час dBase не портували під Microsoft Windows, в результаті чого у програми з’явилися сильні конкуренти - Paradox, Clipper, FoxPro та Microsoft Access. Оскільки формат даних dBase не був закритим, з середини 80-х безліч компаній стали виробляти свої діалекти мови і версії системи.У результаті з'явилося безліч схожих на dBase програм - FoxPro (сучасна Visual FoxPro), Arago, Force, dbFast, Clipper, Xbase + +, FlagShip, Recital, CodeBase, MultiBase, Harbour / xHarbour.Разом їх усіх іменують xBase.
InterBase таFirebird
В даний час останньою версією є InterBase 2009 (2009), у якій з'явилася підтримка Unicode та шифрування AES/DES. InterBase 7.5/2007 і Firebird 1.5/2.0 схожі, але вже далекі від повної сумісності - то є міграція між їхніми форматами баз даних легше, ніж між форматами зовсім «чужих» баз даних, але все-таки пов'язана з певними проблемами.
Основними перевагами останньої версії InterBase є низькі вимоги до системи, з одночасною масштабність на кілька процесорів, плюс розвинена система моніторингу, тимчасові таблиці, що вбудовується аутентифікація користувачів, журнал роботи. Традиційним гідністю вважається крос-платформеність – InterBase підтримує GNU/Linux, Microsoft Windows, Unix і Solaris.
Oracle
Перша у світі база даних, розроблена спеціально для роботи в мережах розподілених обчислень Grid, призначена для ефективного розгортання на базі різних типів обладнання, від невеликих серверів до потужних симетричних багатопроцесорних серверних систем, від окремих кластерів до корпоративних розподілених обчислювальних систем.СУБД надає можливість автоматичного налаштування і управління, яка робить її використання простим і економічно вигідним.
PostgreSQL
Опції є блоками коду, що виконуються на сервері, а не на клієнті бази даних.Хоча вони можуть писатися на чистому SQL, реалізація додаткової логіки, наприклад, умовних переходів і циклів, виходить за рамки власне SQL і вимагає використання деяких мовних розширень. Функції можуть писатися з використанням однієї з наступних мов:
· Вбудований процедурний мову PL/pgSQL, багато в чому аналогічний мови PL / SQL, що використовується в СУБД Oracle;
· Скриптові мови - PL/Lua, PL/LOLCODE, PL/Perl, pIPHP, PL/Python, PL/Ruby, PL/sh, PL/Tcl і PL/Scheme;
· Класичні мови - C, C + +, Java (через модуль PL/Java);
· Статистична мова R (через модуль PL/R).
PostgreSQL допускає використання функцій, що повертають набір записів, який далі можна використовувати так само, як і результат виконання звичайного запиту.Функції можуть виконуватися як з правами їх творця, так і з правами поточного користувача.Іноді функції ототожнюються з збереженими процедурами, однак між цими поняттями є різниця.
ODBC
ODBC це програмний інтерфейс (API) доступу до баз даних. Дозволяє однаково оперувати з різними джерелами даних, абстрагуючись від особливостей взаємодії в кожному конкретному випадку. При застосуванні ODBC потрібно пам'ятати, що дана технологія доступу до даних не розрахована на роботу з великою кількістю клієнтів.У тому випадку, якщо необхідно, щоб з базою даних одночасно працювало багато активних клієнтів, потрібно використовувати SQL API або спеціальний інтерфейс для взаємодії з конкретною базою даних.
Створення і робота з таблицями за допомогою DBase
Робота з базами даних типу DBase реалізується за допомогою компоненти TDbf. TDbf забезпечує доступ до таблиць баз даних dBase і FoxPro для Lazarus (та інших IDE), з огляду на читання, запис і створення dBase III+, dBase IV, Visual dBase VII і FoxPro таблиць.Все це робиться без використання додаткових бібліотек або движків бази даних. Просто розмістіть компонент TDbf на вашій формі, і Ви маєте миттєвий доступ в навколишньому середовищі бази даних на різних платформах.
TDbf є безкоштовним компонентом прямого доступу, для сумісних середовищ фірми Borland Delphi language. Це включає Delphi, C ++ Builder і Kylix.Він дозволяє створювати дуже компактні програми роботи з базою даних, яка не вимагає застосування програм інсталяції.Код роботи з базою включається до виконуваної код.Це забезпечує наступні можливості:
· Робота без BDE.
· Дозволяє використовувати рідні dBase типи (character, numeric, logical, date і memo).Див властивість TableLevel.
· Підтримує обидва типи Memo полів - text і binary, так можна використовувати поля без обмеження розміру.
· Формат файлів на 100% сумісний з dBase III + or dBase IV або dBase for Windows.
· Підтримка таблиць Clipper і Visual FoxPro.
· Модифікація існуючих таблиць включає видалення, додавання або модифікацію поточної таблиці без втрати даних.
· Багато користувальницький доступ сумісний по блокуванню з BDE.Тільки один користувач може блокувати запис для запису, але інші користувачі можуть читати цей запис.
· Підтримка індексів для швидкого сортування, пошуку і виділення діапазону на великих таблицях.Підтримка індексів для NDX і MDX індексних файлів.
· Вирази підтримуються як для індексів, так і для фільтрів.
TDbf працює і в Windows і в Linux використовуючи Lazarus. Оскільки в Lazarus немає програми на зразок "Database Desktop", ми повинні створити нову базу даних в коді.
Гарною думкою є створення для БД окремого каталогу. Це спростить резервування даних. Є два варіанти встановлення шляху.Ви можете встановити повний шлях використовуючи властивість FilePathFull, або встановити шлях щодо варіанти застосування за допомогою властивості FilePath.Наприклад, інсталяція "FilePath" під час виконання до "data/" використовуватиме субдиректорію data тільки в директорії здійснимих файлу.Інсталяція властивості "FilePathFull" до "/var/data/" буде розміщувати точно за вказаною шляху, ігноруючи розташування програми.
За замовчуванням, TDbf створює таблиці dBase IV.Хоча це і найбільш сумісно, деякі можливості, які Вам можуть знадобитися, не підтримуються.Для підтримки автоінкрементних полів ви повинні використовувати дещо більш нове.Типи таблиць можуть бути наступними:
· 3 dBase III+
· 4 dBase IV
· 7 Visual dBase VII
· 25 FoxPro
Створення полів для Вашої нової таблиці під час виконання у більшості випадках слідує старому стандарту Delphi.Як тільки ви встановили свої значення для властивостей FilePath, TableLevel, і TableName, маніпулюйте властивістю FieldDefs щоб визначити структуру. Наприклад:
MyDbf.FilePathFull:= ‘/location/to/my/data’;
MyDbf.TableLevel := 7;
MyDbf.TableName := ‘customers.dbf’;
With MtDbf/FieldDefs do
Begin
Add(‘Id’,ftAutoInc,0,True);
Add(‘Name’,ftString,80,True);
End;
Типи полів визначено як:
· 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
Жирним виділені типи полів які підтримуються.
Як тільки ви визначили поля, які бажаєте використовувати у вашій новій таблиці, ви можете йти далі і створити таблицю:
MyDbf.CreateTable;
Якщо Ваша база даних складається з великої кількості записів, Вам може знадобитися визначити індекси щоб здійснювати більш швидкий пошук по таблиці.Щоб змінити структуру індексів таблиці, ми повинні мати ексклюзивний доступ до таблиці - який ми так чи інакше мали б, створюючи таблицю.
MyDbf.Exclusive := True;
MyDbf.Open;
Тепер, нам необхідно просто додати індекси:
MyDbf.AddIndex(‘custid’,’Id’,[ixPrimary,ixUnique]);
MyDbf.AddIndex(‘cutname’,’Name’,[ixCaseInsensitive]);
MyDbfClose;
Наступний приклад створює нову таблицю "customers" в коді.Звичайно, це необхідно виконати тільки один раз, і після цього всього лише ВІДКРИВАТИ таблицю, не створюючи її заново:
{$MODE OBJPC}
Program DataBaseTest;
Uses Dbf, db, Dbf_Common;
Var
MyDbf : Dbf;
Begin
MtDbf := TDbf.Create(nil);
Try
MtDbf.FilePath := ‘data/’;
MtDbf.TableLevel := 7;
MtDbf.Exclusive := True;
MtDbf.TableName := ‘customers.dbf’
With MtDbf.FieldDefs do
Begin
Add(‘Id’,ftAutoInc,0,True);
Add(‘Name’,ftString,80,True);
End;
MtDbf.CreateTable;
MtDbf.Open;
MyDbf.AddIndex(‘custid’,’Id’,[ixPrimary,ixUnique]);
MyDbf.AddIndex(‘custname’,’Name’,[ixCaseInsensitive]);
MyDbfClose;
Finally
MyDbf.Free;
End;
End;
TDbf також підтримує зберігання вторинних індексів в окремих файлах.Це може допомогти в разі якщо буде дуже великий розмір бази даних.Файли вторинних індексів створюються ідентично звичайним, але з додаванням розширення файлу '. ndx':
MyDbf.AddIndex(‘custname.ndx’,’Name’,[ixCaseInsensitive]);
Кожного разу при відкритті TDbf, необхідно завантажити файл індексів:
MyDbf.OpenIndexFile(‘custname.ndx’);
Також індекси повинні бути описані включаючи розширення:
MyDbf.IndexName := ‘custname.ndx’;
Індексні файли можуть бути упаковані простим використанням:
MyDbf.CompactIndexFile(‘custname.ndx’);
Приклад, описаний раніше, показує, як створити нову таблицю бази даних програмно. Використання цієї таблиці більш ніж просте.Компоненти доступу до даних у Lazarus (як наприклад TDbEdit) вказують на компонент TDataSource використовуючи свої властивості "DataSource" і "DataField".Компонент TDataSource обробляє сполучення між движком бази даних і компонентами доступу до даних.Потім компонент TDataSource вказує на компонент TDbf використовуючи його властивість "DataSet".Зв'язок нагадує таке:
Переконайтеся, що Ви встановили властивості FilePath (або FilePathFulll), TableLevel, і TableName вашого компоненту TDbf перед викликом:
TDbf.Active := True;
Коли запис видаляється, насправді він фізично залишається в таблиці.Періодично Ви повинні "пакувати" таблицю щоб відновити втрачене місце.Це може бути зроблено установкою ексклюзивного режиму доступу:
MyDbf.Exclusive := True;
MyDbf.Open;
MyDbf.PackTable;
//давайте, також, переробимо індекси
MyDbf.Regenerate.Indexes;
MyDbf.Close;
MyDbf.Exclusive := False;

Справжня сила програмування баз даних починається коли Ви маєте декілька таблиць які посилаються один на одного.Поки TDbf не підтримує довідкову цілісності, але підтримує подання головна/підпорядкована між таблицями TDbf.
Якщо ви хотіли показати всі накладні для наданого клієнта, підпорядкована таблиця (invoices) може залишатися синхронізованою з головною таблицею (customers) автоматично.
На компоненті накладні TDbf встановлюють наступне:
InvDbf.IndexName := ‘idxcustid’;
InvDbf.MasterSource := dsCustomers;
InvDbf.MasterFields := ‘Id’;
Можливості TDbf на цьому не закінчуються. Для більш складних програм знадобляться багато інших властивостей TDbf. Нижче розглянемо всі методи та властивості компонента TDbf.

1. Методы
1.1 GetFieldData
function GetFieldData(Field:TField; Buffer:Pointer): Boolean;override;
Більшості додатків не потрібно викликати GetFieldData.Об'єкт TField викликає цей метод, через реалізацію в методі GetData.Параметр Field або FieldNo вказує поле, з якого мають бути вилучені дані.Параметр Field вказує на сам компонент, у той час як FieldNo вказує на номер поля.Параметр Buffer це буфер в пам'яті, який повинен бути достатнього розміру, щоб помістити значення поля, так як вона подана в базі (не відформатовано і не перетрансльовано).Параметр NativeFormat вказує, що компонент dataset витягує поле в рідному форматі C Builder для зазначеного типу поля.Коли NativeFormat дорівнює false, компонент dataset повинен конвертувати значення поля в належний тип.Це дозволяє обслуговувати дані з наборів різних типів (ADO, BDE або інших) витрат платника податку.GetFieldData повертає значення вказує, що дані були витягнуті успішно.GetFieldData повертає true, якщо буфер успішно заповнений даними з поля, і false, якщо дані не були витягнуті.
1.2 Resync
procedure Resync(Mode: TResyncMode); override;
TDbf підтримує заборону виклику resync.
Див. властивість DisableResyncOnPost.
1.3 CreateBlobStream
function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override; {virtual}
Викличте CreateBlobStream для створення потоку (stream) для читання з BLOB поля або для запису в нього (binary large object BLOB).Параметр Field повинен вказувати на компонент TBlobField з властивості Fields.Параметр Mode вказує, як використовується потік - для читання, для запису або для оновлення вмісту поля.Потоки Blob створюються в зазначеному режимі для конкретної запису.Додатки повинні створювати новий потік щоразу, коли змінюється запис, замість повторного використання існуючого потоку.
1.4 Translate
{$ifdef DELPHI_4}
function Translate(Src, Dest: PChar; ToOem: Boolean): Integer;
override; {virtual}
{$else}
procedure Translate(Src, Dest: PChar; ToOem: Boolean); override; {virtual}
{$endif}
Дані записуються в DBF файл в конкретній кодової сторінці, "OEM".Windows використовує кодові сторінки "ANSI" для показу даних.Ця функція перетрансльовує між цими кодовими сторінками.Вказівка true в ToOem транслює з Windows в DBF.Вказівка false в ToOem транслює з DBF в Windows.
1.5 ClearCalcFields
procedure ClearCalcFields(Buffer: PChar); override;
Внутрішній метод.

1.6 CompareBookmarks
function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Integer; override;
Викличте CompareBookmarks для визначення того, що обидві закладки (bookmarks) ідентичні чи ні.Параметри Bookmark1 і Bookmark2 це закладки для порівняння.Якщо закладки розрізняються, то CompareBookmarks повертає 1.Якщо закладки ідентичні або обидві закладку рівні NULL, то CompareBookmarks повертає 0.
1.7 ChekDbfFieldDefs
procedure CheckDbfFieldDefs(DbfFieldDefs: TDbfFieldDefs);
Робить перевірку на допустимість типів полів ваших визначеннь в TDbfFieldDef на відповідність поточному стану TableLevel.При використанні TableLevel менш ніж 7, не всі типи є допустимими.
1.8 AddIndex
{$ifdef DELPHI_5}
procedure AddIndex(const AIndexName, Fields: String;
Options: TIndexOptions; const DescFields: String = '');
{$else}
procedure AddIndex(const AIndexName, Fields: String;
Options: TIndexOptions);
{$endif}
Параметр AIndexName це ім'я нового індексу.AIndexName повинен містити ім'я індексу, довжиною не більше 10 символів.
Параметр Fields це значення типу AnsiString value містить поле або вираз на основі якого базується новий індекс.
Параметр Options це безліч атрибутів для індексу.Параметр Options може містити одне, декілька або жодного значення TIndexOptions: ixPrimary, ixUnique, ixDescending, ixCaseInsensitive і ixExpression.
1 . Значення ixPrimary вказує на справді унікальний індекс.При спробі вставки двох однакових ключів буде порушено виняток.
2 . Значення ixUnique вказує на унікальний індекс.Повторні ключі ігноруються.
3 . Значення ixDescending вказує зворотний порядок сортування.
4 . Значення ixCaseInsensitive не використовується.
5 . Значення ixExpression не обов'язково вказувати, це визначається автоматично при розборі параметра Fields.
1.9 RegenerateIndexes
procedure RegenerateIndexes;
Очищає всі підключені індекси і потім створює їх з нуля.
1.10 CancelRange
procedure CancelRange;
Викличте CancelRange для видалення встановленого діапазону в поточній таблиці.Видалення діапазону відновлює доступ до всіх записів набору даних.
1.11 SearchKey
function SearchKey(Key: Variant; SearchType: TSearchKeyType): Boolean;
function SearchKeyPChar(Key: PChar; SearchType: TSearchKeyType): Boolean;
Ця функція припускає, що Ви використовуєте на належний індекс, властивість IndexName.Параметр Key вказує значення для пошуку з активного індексу.Ви можете вказати ключ, як варіантний тип або передати буфер, використовуючи функцію SearchKeyPChar.У даному випадку, передача буфера повинна відповідати таким правилам, заснованим на індексі і типу параметра key:
· Рядковий індекс: вказівник на перший символ рядка, обмежений нулем.
· MDX, цифровий: покажчик на буфер, який містить BCD, у форматі dBase.
· NDX, цифровий: покажчик на тип double.
Параметр SearchType це одне з наступних значень:
· Значення stEqual пошук точної відповідності ключа.Повертає false, якщо ключ не знайдено.
· Значення stGreaterEqual пошук точної відповідності ключа або якщо не знайдено, то такий запис по порядку, яка більше за значенням, ніж ключ. Повертає false, якщо досягнуто кінець файлу.
· Значення stGreater пошук першого запису, значення якої більше значення ключа.Повертає false, якщо досягнуто кінець файлу.
Якщо повертається значення false то вказівник не рухається.
1.12 SetRange
procedure SetRange(LowRange: Variant; HighRange: Variant);
procedure SetRangePChar(LowRange: PChar; HighRange: PChar);
Ця функція припускає, що Ви використовуєте на належний індекс, властивість IndexName. Функція встановлює діапазон записів для поточного набору записів.Параметр LowRange вказує початкову границю, а параметр HighRange вказує кінцеву.Для форматування параметра дивіться функцію SetRangePChar і SearchKeyPChar.

1.13 UpdateIndexDefs
procedure UpdateIndexDefs; override;
Внутрішній метод, який викликає оновлення визначень полів (FieldDefs), оновлює обидва визначення для полів і для індексів, читаючи їх з dbase і індексних файлів.
1.14 GetIndexNames
procedure GetIndexNames(Strings: TStrings);
Параметр Strings вказує список, який при поверненні буде містити список всіх індексів.Значення з цього списку можуть бути використані для установки властивості IndexName.
1.15 TryExclusive
procedure TryExclusive;
Вимагає установки властивості Active в true.Викличте TryExclusive для отримання монопольного доступу до відкритого файлу, без виклику Close, встановлює властивість Exclusive в значення true і заново відкриває таблицю.Властивість Exclusive оновлюється для відображення нового стану.Перевірте властивість Exclusive для того, щоб переконатися, що встановлення режиму пройшла успішно.
1.16 EndExclusive
procedure EndExclusive;
Якщо Ви працювали в монопольному режимі, то виклик EndExclusive повертає вас у попередній стан.

1.17 LockTable
function LockTable(const Wait: Boolean): Boolean;
Викличте функцію LockTable для блокування всієї таблиці.Параметр Wait вказує, що компонент повинен чекати установки блокування або відмови, якщо блокування не вдається встановити.
Різниця між режимами LockTable і Exclusive полягає в тому, що в режимі Exclusive інші не можуть відкрити файл за винятком, коли властивість ReadOnly встановлено у true, а для LockTable вони можуть відкривати файл в режимі читання/запису.У режимі LockTable спроби зміни записів будуть відкинуті.
1.18 UnlockTable
procedure UnlockTable;
Коли таблиця була заблокована за допомогою LockTable, виклик UnlockTable призведе до розблокуванні табліци.

Внимание, отключите Adblock

Вы посетили наш сайт со включенным блокировщиком рекламы!
Ссылка для скачивания станет доступной сразу после отключения Adblock!

Скачать полную версию
Курсовые работы по информатике Подібно до Delphi, Lazarus є середовищем RAD (від англ. Rapid application development - швидка розробка додатків), що дозволяє швидко створювати для
Оценок: 399 (Средняя 5 из 5)

Специалисты RetsCorp работают в digital-сфере более 7 лет. За это время мы разработали более 500+ успешных проектов. Основываясь на своем опыте и знании рынка, мы с уверенностью можем сказать, что будет работать, а что — нет. Заказывая создание лендинга для бизнеса в нашей студии, вы получаете работающие решения, необходимые именно вашему бизнесу.

Сотрудничая с нами, вы будете не клиентом, а нашим партнером. Благодаря этому мы будем развивать ваш бизнес как собственный. Мы так же как и вы заинтересованы в успехе проекта, поскольку ваша успешность будет нашей рекламой.

© 2014 - 2022 MaxEdu.ru