Компоненты до роботи з БД: TTable і TQuery
Свойство |Опис — |property Active: Boolean; |Открывает/закрывает НП — |property AutoCalcFields: Boolean; |Разрешает/запрещает виникнення — | |події OnCalcFields — |Type TBookmarksStr: String; |Визначає закладку на поточної записи. — |property BookMark: TBookMarkStr; |До позначеної записи можна швидко — | |перейти методом GotoBookMark — |property CanModify: Boolean; |Вказує, чи може користувач… Читати ще >
Компоненты до роботи з БД: TTable і TQuery (реферат, курсова, диплом, контрольна)
МІНІСТЕРСТВО ОСВІТИ І НАУКИ.
РЕСПУБЛІКА КАЗАХСТАН.
ІНСТИТУТ «ЖЕТЫСУ».
КАФЕДРА ФІНАНСОВО-ЕКОНОМІЧНИХ ДИСЦИПЛИН.
Юнусов Рінат ИСЭ 410а.
Компоненти до роботи з базами данных:
TTable і TQuery.
(курсова работа).
Науковий руководитель:
Шлембаев К.Т.
Талдыкорган 2003.
|1. Запровадження… |2 | |2. Компоненти до роботи з БД середовища Delphi 6… |2 | |3. Набори даних… |3 | | | | |3.1 Основні прийоми роботи з TDataSet… |4 | | | | |3.2 Основні властивості, методи лікування й події TDataSet… |7 | |4. Огляд компонента TTable… |10 | |5. Огляд компонента TQuery… |11 | |6. Порівняння компонентів TTable і TQuery… |15 | |7. Укладання… |17 | |8. Додаток… |18 | |Список використаної літератури… |21 |.
1.
Введение
.
Базами даних (БД) називають електронні сховища інформації, доступом до яких здійснюються з допомогою однієї чи кількох комп’ютерів. Зазвичай БД створюється для збереження і доступу до даних, що містить інформацію про деякою предметної області, тобто деякою області людської діяльності або області реального мира.
Системи управління базами даних (СУБД) — це програмні кошти, призначені до створення, наповнення, відновлення і видалення баз данных.
По архітектурі СУБД діляться на автономні, файл — серверні, клієнт — серверні і многозвенные. У цьому курсової роботі буде розглядатися робота тільки з автономними СУБД.
Автономні БД є простими. Вони зберігають є дані в локальної файлової системі у тому комп’ютері, у якому встановлено систему управління й престижний автомобіль баз даних, що здійснює до них доступ, перебуває в те ж саме комп’ютері. Мережа не используется.
Автономні бази даних корисні розвитку тих додатків, які поширені чимало користувачів, кожен із яких підтримує окрему базі даних. Це, наприклад, докладання, обробні документацію невеликого офісу, персонал невеликого підприємства, бухгалтерські документи. Кожен користувач такого докладання маніпулює власними даними своєму комп’ютері. Користувачу немає необхідності мати доступом до даним іншого користувача, отже окрема БД тут цілком приемлема.
У цьому курсової роботі буде приведено приклад докладання котрий з автономними БД — «Довідник співробітника ДАІ», Додаток було розроблено автором серед Delphi 6.
2. Компоненти до роботи з БД середовища Delphi 6.
Кожне додаток, що використовує бази даних, зазвичай має по крайньої мері за одним компоненту наступних типів:. Компоненти — набори даних (Data set), безпосередньо связывающиеся з базою даних. Для BDE це такі компоненти, як Table, Query, Stored.
Proc, BDEClientDataSet. Для інших є такі компоненти наборів даних.. Компонент — джерело даних (Data source), здійснює обміну інформацією між компонентами першого типу, і компонентами візуалізації та управління даними. Таким компонентом є DataSource.. Компоненти візуалізації даних, і управління даними, такі, як DBGrid,.
DBTExt, DBEdit і безліч других.
Зв’язок цих компонентів друг з одним і з базою даних можна схемою наведеної ниже:
Схема взаємодії компонентів Delphi з базою данных.
3. Набори данных.
Під набором даних (НВ) розуміється група записів з однієї або кількох таблиць БД, доступна для компонентов-наборов TTable, TQuery чи TStoredProc. Ці компоненти породжені від загального батьківського класу TDBDataSet і успадковують усі його властивості, методи лікування й события.
Клас TDataSet.
TDataSet клас — одне з найбільш важливих БД. Щоб почати працювати з нею, треба поглянути для наступної иерархию:
TDataSet.
|.
TDBDataSet.
|.
|— TTable.
|— TQuery.
|— TStoredProc.
TDataSet містить абстрактні методи там, де має бути безпосереднє управління даними. TDBDataSet знає, як з паролями і те, що потрібно зробити, щоб підключитися до визначеної таблиці. TTable знає (тобто. вже всі абстрактні методи переписані), як поводження з таблицею, її індексами і т.д.
TDataSet — інструмент, що використовується наприклад відкриття таблиці, і пересування ній. Звісно, непотрібно безпосередньо створювати об'єкт типу TDataSet. Натомість, потрібно використовувати TTable, TQuery чи інших нащадків TDataSet (наприклад, TQBE). На найбільш фундаментальному рівні, Dataset це набір записів, як зображено на рис. 1.
Мал.1: Будь-який dataset складається з низки записів (кожна містить N полів) і покажчик на поточну запись.
Найчастіше DataSet матиме пряме, одне одного, відповідність до фізичної таблицею, що є на диску. Проте, в інших випадках можна виконувати запит чи інший дію, повертають dataset, який містить або будь-яке підмножина записів однієї таблиці, або об'єднання (join) між кількома таблицами.
3.1 Основні прийоми роботи з TDataSet.
Открытие і закриття DataSet.
Є два різних способи відкрити таблицю під час виконання програми. Можна написати наступний рядок кода:
Table1.Open;
Чи можна встановити властивість Active однакову True:
Table1.Active := True;
Немає ніякого різницю між результатом виробленим цими двома операціями. Метод Open, проте, сам закінчується установкою властивості Active в True, отже може навіть трохи більше змогли ефективно використати властивість Active напрямую.
Також, як є способу відкрити a таблицю, і є дві способу закрити її. Найпростіший спосіб просто викликати Close:
Table1.Close;
Чи можна написати: Table1. Active := False;
Навігація (Переміщення по записям).
Великий набір методів і їхні властивості TDataSet забезпечує усе, що потрібно для доступу до будь-якої конкретної записи всередині таблицы:
Огляд їх функціональних можливостей описаний нижчий за таблиці методів класу TDadaSet.
TDataSet.BOF — read-only Boolean властивість, використовується для перевірки, перебуває чи курсор на початку таблиці. Властивості BOF повертає true у трьох випадках: Потому, як файл відкрили; Потому, як зголосився метод TDataSet. First; Потому, як і выполнился виклик методу TDataSet.Prior.
Перші дві пункту — очевидні. Коли відкривається таблиця, Delphi поміщає курсор на першу запис; коли викликається метод First, Delphi також переміщає курсор на початок таблиці. Третій пункт, проте, вимагає невеликого пояснення: по тому, як викликався метод Prior кілька разів, курсор міг дістатись початку таблиці, і такий виклик Prior буде невдалим — після цього BOF і повертатиме True.
Наступний код показує найзагальніший досвід використання Prior, коли курсор потрапляє до першого запису: while not Table. Bof do.
Table1.Prior; end;
Цикл триватиме до того часу, поки виклик Table1. Prior зможе більше переміщати курсор на попередню запис в таблиці. Саме тоді BOF поверне True і яскрава програма вийде з цикла.
Усе щодо BOF також застосовно і до EOF. Іншими словами, код, наведений нижче показує найпростіший спосіб пробігти за всі записам у a dataset:
Table1.First; while not Table1. EOF do.
Table1.Next; end;
EOF повертає True у таких три випадки: Потому, як файл відкрили;; Потому, як зголосився метод TDataSet. Last; Потому, як і выполнился виклик методу TDataSet.Next.
Єдина навігаційна процедура, котра ще не згадувалася — MoveBy, що дозволяє переміститися на N записів уперед, чи у таблиці. Якщо потрібно переміститися на дві записи вперед, слід написати наступний оператор:
MoveBy (2); или.
MoveBy (-2);
Prior і Next — це прості функції, що викликають MoveBy.
З використанням цієї функції потрібно завжди пам’ятати, що DataSet — це изменяющиеся об'єкти, і запис, що була п’ятої за рахунком в попередній момент, тепер то, можливо четвертої чи шостий чи загалом бути удалена…
Поля.
Найчастіше, коли не треба отримання доступу з програми до індивідуальні полях записи, можна використовувати один з наступних властивостей чи методів, кожен із яких належать TDataSet:
property Fields[Index: Integer]; function FieldByName (const FieldName: string): TField; property FieldCount;
Властивість FieldCount повертає число полів в поточної структурі записи. Якщо потрібно програмним шляхом прочитати імена полів, то використовується властивість Fields для доступу до ним:
var.
P.S: String; begin.
P.S := Fields[0]. FieldName; end;
Інакше кажучи, індекс рухаючись в Fields (який з нуля), і визначає номер поля якого Ви отримаєте доступ, тобто. перше полі - нуль, друге сам і так далее.
Якщо ви хочете прочитати поточне зміст конкретного поля конкретної записи, то використовується властивість Fields чи метод FieldsByName. А, щоб знайти значення першого поля записи, прочитайте перший елемент масиву Fields:
P.S := Fields[0]. AsString;
Припустимо, перше полі записи містить номер замовника, тоді код, показаний вище, повернув б рядок типу «1021», «1031» чи «2058». Якщо потрібне одержати доступ цей перемінний, як до числової величині, тоді треба використовувати AsInteger замість AsString. Аналогічно, властивість Fields включають AsBoolean, AsFloat і AsDate.
Можна також використовувати функцію FieldsByName замість властивості Fields:
P.S := FieldsByName (‘CustNo').AsString;
Як зазначено в прикладах вище, і FieldsByName, і Fields повертають самі самі дані. Два різних синтаксису використовуються лише заради того, щоб забезпечити програмістів гнучким і дуже зручним набором інструментів для програмного доступу до DataSet.
Властивість Fields дозволяє вибрати тип результату Ось список доступних методів що можна знайти у описі класу TField: property AsBoolean property AsFloat property AsInteger property AsString property AsDateTime.
Щоразу (коли це можна буде), Delphi зможе його зробити перетворення. Наприклад, Delphi може перетворювати полі Boolean до Integer чи Float, чи полі Integer до String. Не буде перетворювати String до Integer, хоч і може перетворювати Float до Integer.
Основні властивості, методи лікування й події НД.
Свойства.
|Свойство |Опис | |property Active: Boolean; |Открывает/закрывает НП | |property AutoCalcFields: Boolean; |Разрешает/запрещает виникнення | | |події OnCalcFields | |Type TBookmarksStr: String; |Визначає закладку на поточної записи. | |property BookMark: TBookMarkStr; |До позначеної записи можна швидко | | |перейти методом GotoBookMark | |property CanModify: Boolean; |Вказує, чи може користувач | | |змінювати НП | |property Database: TDatabase; |Визначає компонент TDatabase, | | |пов'язані з даним НП | |property DatabaseName: String; |Місти псевдонім бази даних | |property DataSource: TDataSource; |Використовується в нащадках для вказівки | | |детального НП, у зв’язку з один до багатьох | |property EOF: Boolean; |Містить True, якщо курсор НВ змістився| | |за останню запис | |property FieldCount: Integer; |Містить кількість полів в НП | |property Fields: TFields; |Дозволяє звернутися до полях з їхньої | | |індексу. Перше полі НП має індекс 0 | |property FieldValues[const FieldName: |Дозволяє звернутися до значенням полів | |String]: Variant; |під назвою поля | |property Filter: String; |Задає фільтруюче вираз | |property Filtered: Boolean; |Разрешает/запрещает фільтрацію записів | | |НП | |type TFilterOption = |Визначає умови фільтрації в | |(foCaseInsensitive, |текстових полях: foCaseInsensitive | |foNoPartialCompare); TFilterOptions = |-враховувати регістр літер; | |set of TFilterOption; |foNoPartialCompare — пошук на точне | | |відповідність зразком | |property Modifed: Boolean; |Містить True, якщо поточна запис НП | | |змінено | |property RecNo: LongInt; |Визначає номер поточної записи | |property RecordCount: LongInt; |Містить кількість записів нинішнього року | | |НВ | |type TDataSetState = (dsInactive, |Вказує стан НП: | |dsBrowse, dsEdit, dsInsert, dsSetKey, |dsInactive-закрыт, dsBrowse-просмотр, | |dsCalcFields, dsFilter, dsNewValue, |dsEdit-редактирование, | |dsOldValue, dsCurValue, dsBlockRead, |dsInsert-вставка, dsSetKey-поиск | |dsInternalCalc) |записи, dsCalcFields-установка | | |вычисляемых полів, dsFilter-фильтрация | | |записів, dsNewValue-обновление, | | |dsOldValue-обновление, | | |dsCurValue-обновление, | |property State: TDataSetState; |dsBlockRead-чтение блоку записів, | | |dsInternalCalc-обновление |.
Методы:
|procedure Append; |Додає порожню запис насамкінець НП | |procedure AppendRecord (const Values: |Додає нову запис, заповнює її | |Array of const); |поля значеннями Values і відсилає їх у | | |БД | |procedure ApplyUpdates; |Записує кеш відновлення до таблиць БД | |procedure Cancel; |Скасовує зміни поточної записи, | | |які було збережено в БД | |procedure CancelUpdates; |Очищає кеш відновлення | |procedure CheckBrowseMode; |Якщо НВ був у стані | | |редагування чи вставки, викликає | | |метод Post для записи змін — у БД | |procedure ClearFields; |Очищає все поля поточної записи | |procedure Close; |Закриває НВ | |procedure |Закриває базі даних Database | |CloseDatabase (Database:TDatabase); | | |procedure CommitUpdates; |Очищає кеш після успішного відновлення | | |даних в БД | |function ControlsDisabled: Boolean; |Повертає True, якщо показ даних в | | |візуальних компонентах тимчасово | | |заборонено методом DisableControls | |procedure Delete; |Видаляє поточну запис | |function DisableControls; |З метою поліпшення продуктивності | | |при навігації по НП тимчасово забороняє | | |зміну даних в візуальних компонентах | |procedure Edit; |Редагує поточну запис | |procedure EnableCointrols; |Скасовує дію методу | | |DisableControls | |function FieldByName (const FieldName: |Забезпечує доступом до полю з його імені| |String):TField; |FieldName | |function FindField (const FieldName: |Шукає полі FieldName в НП і повертає | |String):TField; |посилання полі бою або NIL, якщо полі не | | |знайдено | |function FindFirst: Boolean; |Намагається встановити курсор на першу | | |запис НП і повертає True у разі | | |успіху | |function FindLast: Boolean; |Намагається встановити курсор на останню| | |запис НВ і повертає True у разі | | |успіху | |function FindNext: Boolean; |Намагається встановити курсор для наступної| | |запис НВ і повертає True у разі | | |успіху | |function FindPrior: Boolean; |Намагається встановити курсор на | | |попередню запис НП і повертає True | | |при успішному ході | |function First: Boolean; |Встановлює курсор на першу запис в| | |НВ | |procedure FreeBookMark (BookMark: |Звільняє пам’ять пов’язану з | |TBookMark); virtual; |закладанням BookMark | |function GetBookMark: TBookMark; |Створює закладку на поточної запису і | |virtual; |повертає покажчик її у | |procedure GotoBookMark (BookMark: |Забезпечує повернення до записи, | |TBookMark); |що з закладанням BookMark | |procedure Insert; |Перекладає НВ в режим вставки записів | |procedure InsertRecord (const Values: |Створює порожню запис, наповнює її | |array of const); |поля значеннями Values і вставляє їх у| | |НП | |function isEmpty: Boolean; |Повертає True, тоді як НП немає записів | |procedure Last; |Встановлює курсор на останню | | |запис | |function Locate (const KeyFields: |Шукає в полях переказаних у параметрі | |String; const KeyValues: Variant; |KeyFields, значення, вказаних у | |Options: TLocateOptions): Boolean; |KeyValues за умов, заданих | | |параметром Options. Якщо запис | | |знайдено, робить її поточної і повертає| | |True | |function LookUp (const KeyFields: |Використовується в детальних НВ на допомогу пошуку | |String; const KeyValues: Variant; |в полях KeyFields значень KeyValues. | |const ResultFields: String): Variant; |При успіху повертає значення полів | | |ResultFields | |function MoveBy (Distance: |Переміщає курсор на Distance записів | |Integer):Integer; |вгору чи вниз щодо поточної | | |записи | |procedure Next; |Переміщає курсор до наступній записи | |procedure Open; |Відкриває НВ | |procedure Post; virtual; |Зберігає уставлену чи | | |відредаговану запис в таблиці БД | |procedure Prior; |Переміщає курсор до попередньої записи | |procedure Refresh; |Оновлює НВ даними з БД | |procedure SetFields (const Values: |Встановлює значення Values в усі | |array of const); |поля поточної записи |.
События:
|type TDataSetNotifyEvent = procedure | | |(DataSet: TDataSet) of object | | |property AfterCancel: |Виникає відразу після скасування змін — у | |TDataSetNotifyEvent; |поточної записи | |property AfterClose: |Виникає відразу після закриття НП | |TDataSetNotifyEvent; | | |property AfterDelete: |Виникає відразу після видалення поточної | |TDataSetNotifyEvent; |записи | |property AfterEdit: |Виникає відразу після переходу НП в режим | |TDataSetNotifyEvent; |редагування | |property AfterInsert: |Виникає відразу після вставки записи | |TDataSetNotifyEvent; | | |property AfterOpen: |Виникає відразу після відкриття НВ | |TDataSetNotifyEvent; | | |property AfterPost: |Виникає відразу після виконання методу | |TDataSetNotifyEvent; |Post | |property AfterScroll: |Виникає відразу після початку інший | |TDataSetNotifyEvent; |записи | |property BeforeCancel: |Виникає безпосередньо перед скасуванням | |TDataSetNotifyEvent; |змін — у поточної записи | | |Виникає безпосередньо перед закриттям | |property BeforeClose: |НВ | |TDataSetNotifyEvent; | | |property BeforeDelete: |Виникає безпосередньо перед видаленням | |TDataSetNotifyEvent; |поточної записи | |property BeforeEdit: |Виникає безпосередньо перед переходом | |TDataSetNotifyEvent; |НВ в режим редагування | |property BeforeInsert: |Виникає безпосередньо перед в режим | |TDataSetNotifyEvent; |вставки | |property BeforeOpen: |Виникає безпосередньо перед відкриттям | |TDataSetNotifyEvent; |НП | |property BeforePost: |Виникає безпосередньо перед | |TDataSetNotifyEvent; |виконанням методу Post | |property BeforeScroll: |Виникає безпосередньо перед до нової | |TDataSetNotifyEvent; |записи | |property OnCalcFields: |Виникає за необхідності | |TDataSetNotifyEvent; |перевизначення вычисляемых полів |.
4. Огляд компонента TTable.
Оскільки компонент TTable є спадкоємцем класу TDataSet, він успадковує усі його властивості, методи лікування й події. Він служить до роботи з таблицями БД.
Наступні методи дозволяють змінювати дані, пов’язані з TTable:
procedure Append; procedure Insert; procedure Cancel; procedure Delete; procedure Edit; procedure Post;
Всі ці методи — частина TDataSet, вони успадковані й закони використовують TTable і TQuery.
Щоразу, коли не потрібно змінити дані, потрібно спочатку перевести DataSet в режим редагування чи вставки.
Є типова послідовність, що можна б послуговуватись при зміні поля поточної записи:
Table1.Edit;
Table1.FieldByName (‘CustName').AsString := ‘Fred';
Table1.Post;
Перша рядок переводить БД в режим редагування. Наступна рядок привласнює значення ‘Fred' полю ‘CustName'. Нарешті, дані записуються на диск, коли викликається Post.
З використанням такий підхід, Ви завжди працюєте з записами. Сам факт переміщення до наступній записи автоматично зберігає дані на диск. Наприклад, наступний код матиме той самий ефект, як і код показаний вище, плюс цьому буде переміщати курсор для наступної запись:
Table1.Edit;
Table1.FieldByName (‘CustNo').AsInteger := 1234;
Table1.Next;
Загальне правило, яка хоче слідувати — щоразу, коли курсор зсувається із поточною записи, запроваджені дані будуть записані автоматично. Це означає, що виклики First, Next, Prior і Last завжди виконують Post. Можете скасувати результати редагування у час, до того часу, поки не викликали безпосередньо чи опосередковано метод Post. Наприклад, якщо НВ переведений у режим редагування, і такі було змінено щодо одного або як полів, можна повернути запис у початковий стан викликом методу Cancel.
Існують два методу, Append і Insert, який використовуються при додаванні нової запис у DataSet. Вочевидь має більшого глузду використовувати Append для DataSets які индексированы, але Delphi не генеруватиме exception якщо використовується Append на індексованої таблиці. Фактично, можна використовувати й Append, і Insert.
Приклад додавання записи:
begin.
Table1.Insert;
Table1.FieldByName («Name »).AsString := «Іван » ;
Table1.FieldByName («Fam »).AsString := «Сидоров » ;
Table1.Post; end;
Видалення записи: Table1. Delete;
Процедура показана тут спочатку переводить таблицю в режим вставки (нова запис з незаповненими полями вставляється у поточну позицію dataset). Після вставки порожній записи, наступним етапом потрібно призначити значення одній або більшій кількості полів. Існує, звісно, кілька різних шляхів привласнити цих значень. У конкурсній програмі можна просто запровадити інформацію на нову запис через DBGrid. Або розмістити на формі стандартну рядок введення (TEdit) і далі встановити кожне полі рівним значенням, яке користувач надрукував цієї строке:
Table1.FieldByName (‘Name').AsString := Edit1. Text;
Можна також використовувати компоненти, спеціально призначені до роботи з даними в DataSet, наприклад DBEdit, DBLabel і т.д.
5. Огляд компонента TQuery.
Скорочення SQL означає Structured Query Language — Мова Структурованих Запитів, і звичайно произноситься або як «Sequel «або «Ess Qu El». SQL — це потужний мову БД, який легко доступний з Delphi, а проте відрізняється рідного мови Delphi. Delphi може використовувати затвердження SQL для перегляду таблиць, виконувати об'єднання таблиць, створювати відносини один-ко-многим, чи виконати майже будь-яку дію, яке може зробити основні інструменти БД.
1. Більшість серверів можуть обробляти SQL запити нас дуже швидко, що СРСР розвалився, що використовуючи SQL для віддалених даних, відповідь отримають нас дуже швидко. 1. Є можливість складати SQL запити, які змусять сервер виконати спеціалізовані завдання, недоступні через рідний язык.
Delphi.
SQL запит можна створити використовуючи компонент TQuery наступним способом:
1. Призначити Псевдонім (Alias) DatabaseName. 1. Використовуючи властивість SQL щоб запровадити SQL запит типа.
«Select * from Country». 2. Встановити властивість Active в True.
Якщо звернення йде до локальних даним, то замість псевдоніма можна вказати повний шлях до каталогу, де є таблицы.
Об'єкт TQuery одне з найбільш корисних і гнучких компонентів, доступних в Delphi. З допомогою можна скористатися всієї міццю, наданої лідерами серед промислових SQL серверів, на кшталт InrterBase, Oracle чи Sybase.
Властивість SQL.
Властивість SQL — мабуть, найважливіша частина TQuery. Доступ до цього властивості відбувається або через Інспектор Об'єктів під час конструювання проекту (design time), чи програмно під час виконання програми (run time).
Цікавіший, звісно, одержати доступ властивості SQL під час виконання, щоб динамічно змінювати запит. Наприклад, якщо потрібно виконати три SQL запиту, то ми не треба розміщувати три компонента TQuery на формі. Замість цього можна розмістити сам і просто змінювати властивість SQL тричі. Найефективніший, простий та потужний спосіб — зробити це через параметризованные запити, які пояснити у наступному частини. Проте, спочатку досліджуємо основні особливості властивості SQL, і потім розглянемо складніші теми, типу запитів з параметрами.
Властивість SQL має тип TStrings, що означає що це ряд рядків, сохраняемых у списку. Список діє як і масив, але, фактично, це спеціальний клас зі своїми унікальними можливостями. У наступних кількох абзацах розглядатимуться найчастіше використовувані свойства.
При програмному використанні TQuery, рекомендується спочатку закрити поточний запит і очистити список рядків властивості SQL:
Query1.Close;
Query1.SQL.Clear;
Потрібно зверніть увагу, що можна «безпечно» викликати Close. Навіть тому разі, якщо запит вже закритий, виняткова ситуація генеруватися не будет.
Наступний крок — додавання нових рядків запрос:
Query1.SQL.Add (‘Select * from Country');
Query1.SQL.Add (‘where Name = ''Argentina''');
Метод Add використовується для додавання одній або кількох рядків до запиту SQL. Загальний обсяг обмежений лише кількістю пам’яті за вашої машине.
Щоб Delphi відпрацював запит і повернув курсор, у якому результат в вигляді таблиці, можна викликати метод:
Query1.Open;
Наприклад, наступний SQL запрос:
Select * form Country where Name like 'З%' повертає DataSet, у якому все записи, де полі Name починається з літери ‘З'. Наступний запит дозволить побачити всі країни, в назві яких зустрічається літера ‘C':
Select * from Country where Name like ‘%C%';
Ось запит, яке знаходить усе країни, назва яких закінчується на ‘ia':
Select * from Country where Name like ‘%ia';
TQuery і Параметры.
Delphi дозволяє скласти «гнучку» форму запиту, звану параметризованным запитом. Такі запити дозволяють підставити значення перемінної замість окремих слів у висловлюваннях «where» чи «insert». Ця змінна можна змінити практично у час. (Якщо використовується локальний SQL, можна зробити заміну майже кожного слова в затвердженні SQL, та заодно те ж саме можливість не підтримується більшістю серверов.).
Перш ніж, як розпочати використовувати параметризованные запити, розглянемо знову одна з простих вищезгаданих пропозицій SQL:
Select * from Country where Name like 'C%'.
Можна перетворити це твердження в параметризованный запит замінивши праву частина перемінної NameStr: select * from County where Name like: NameStr.
У цьому вся пропозиції SQL, NameStr перестав бути визначеною константою і може змінюватися або під час дизайну, або під час виконання. SQL parser (програма, яка розбирає текст запиту) розуміє, що вона має працювати з параметром, а чи не константою оскільки параметру передує двокрапка " :NameStr ". Це двокрапка повідомляє Delphi необхідність замінити зміну NameStr деякою величиною, яка відома позже.
Потрібно зверніть увагу, що слово NameStr вибрали абсолютно випадково. Використовувати можна будь-яке дозволене ім'я перемінної, так само, як вибирається ідентифікатор перемінної в программе.
Є дві шляху привласнити значення перемінної в параметризованном запиті SQL. Один спосіб у тому, щоб використовувати властивість Params об'єкта TQuery. Другий — використовувати властивість DataSource щоб одержати інформації з іншого DataSet. Ось ключові властивості задля досягнення цих целей:
property Params[Index: Word]; function ParamByName (const Value: string); property DataSource;
Якщо підставляти значення параметра в параметризованный запит через властивість Params, то зазвичай потрібно зробити чотири шага:
1. Закрити TQuery 1. Підготувати об'єкт TQuery, викликавши метод Prepare 2. Присвоїти необхідні значення властивості Params 3. Відкрити TQuery.
Другий крок виконується у разі, якщо це текст запиту виконується вперше, у його можна опустить.
Ось фрагмент коду, що складає як може виконати практически:
Query1.Close;
Query1.Prepare;
Query1.Params[0]. AsString := ‘Argentina';
Query1.Open;
Params — це индексированное властивість, що має синтаксис як в властивості Fields для TDataSet. Наприклад, можна отримати роботу доступом до першої перемінної в SQL запиті, адресуючи нульової елемент в масиві Params:
Params[0]. AsString := ‘"Argentina"';
Якщо параметризованный SQL запит така: select * from Country where Name = :NameStr то кінцевий результат (тобто. те, що виконане буде насправді) — це таку пропозицію SQL: select * from Country where Name = «Argentina».
Усі, що сталося, це перемінної :NameStr надали значення «Аргентина «через властивість Params.
Якщо запиті міститься більше параметра, щоб мати доступу до них треба міняти індекс у властивості Params.
Params[1]. AsString :=‘SomeValue'; або використовуючи доступ під назвою параметра.
ParamByName (‘NameStr').AsString:='"Argentina"';
Отже, параметризованные SQL запити використовують перемінні, які завжди розпочинаються з двокрапки, визначаючи місця, куди передадуть значення параметров.
Перш, ніж використовувати зміну Params, спочатку можна викликати Prepare. Цей виклик змушує Delphi розібрати ваш SQL запит і підготувати властивість Params те щоб воно «був готовий прийняти» відповідне кількість змінних. Можна привласнити значення перемінної Params без попереднього виклику Prepare, але це буде працювати кілька медленнее.
Потому, як було вызыван метод Prepare, і по тому, як було надано необхідні значення перемінної Params, Потрібно викликати метод Open, щоб закінчити прив’язку змінних й одержати бажаний DataSet. У нашому разі, DataSet має включати записи де у полі «Name» стоїть «Argentina».
Open чи ExecSQL?
Потому, як складено SQL запит, є дві різних способи виконати її. Якщо потрібне отримати курсор, потрібно викликати Open. Якщо вираз SQL має на увазі повернення курсору, потрібно викликати ExecSQL. Наприклад, якщо з’являється вставка, видалення або відновлення даних (тобто. SQL запити INSERT, DELETE, UPDATE), потрібно викликати ExecSQL. Теж самісіньке можна сказати інакше: Open викликається при запиті типу SELECT, а ExecSQL — в інших случаях.
Ось типовий SQL запит, що використовується видалення записи з таблицы:
delete from Country where Name = ‘Argentina';
Цей запит видалив б будь-яку запис з таблиці COUNTRY, має значення «Argentina «на полі Имя.
Неважко помітити, що це той випадок, коли зручно використовувати параметризованный запит. Наприклад, варто було б змінювати ім'я країни, яку потрібно видалити: delete from Country where Name = :CountryName.
І тут змінна :CountryName можна змінити під час выполнения:
Query2.Prepare;
Query2.Params[0] := ‘Argentina';
Query2.ExecSQL;
Код спочатку викликає Prepare, щоб повідомити Delphi що він має розібрати SQL запит і властивість Params. Таким кроком присвоюється значення властивості Params і далі виконується підготовлений SQL запит. Потрібно зверніть увагу, що він виконується через ExecSQL, а не Open.
6. Подібності й відмінності TTable і TQuery.
Хоча компоненти TTable і TQuery і є класу TDataSet і багато в чому, методика роботи з об'єктом TQuery справляє враження методику роботи з TTable, проте є свої особенности.
Бо у деяких випадках компоненти TTable і TQuery в додатках взаємозамінні, постає питання — якою ж їх использовать?
Працюючи з локальними базами даних частіше використовується Table. З його допомогою простіше як переглядати таблицю бази даних, а й модифікувати записи, видаляти їх, вставляти нові. Але час роботи з клієнт — серверными базами даних компонент Table стає мало ефективним. У цьому випадку створює за комп’ютером користувача тимчасову копію серверної бази даних, і працює із цієї копією. Природно, що така процедура потребує великих ресурсів немає і істотно завантажує сеть.
Цей недолік немає у компоненті Query. Якщо запит SQL зводиться до перегляду таблиці (запит Select), то результат цього запиту (а чи не сама вихідна таблиця) поміщається в часі файлі за комп’ютером користувача. Щоправда, на відміну від набору даних, створюваного Table, це таблиця лише для читання і допускає якихось змін. Втім, це обмеження можна обминути. Якщо ж запит SQL пов’язані з змінами змісту таблиці, те тимчасових таблиць не створюється. BDE передає запит на сервер, там він обробляється й у додаток повертається з’явилася інформація, успішно чи завершено відповідна операція. Завдяки такій організації роботи ефективність Query під час роботи у мережі стає набагато вища, ніж ефективність Table. До того ж мову SQL, позволяет формулювати складні запити, які можна реалізовувати Table.
З іншого боку під час роботи з локальними даних ефективність Query помітно нижча ефективності Table. Уповільнення обчислень виходить дуже ощутимым.
Виходячи з цього стислого огляду можливостей Table і Query, можна укласти, що у клієнт — серверних додатках доцільніше використовувати компонент Query, а під час роботи з локальними базами даних де немає потрібна міць компонента Query простіше використовувати Table.
7.
Заключение
.
Який компонент вибрати розробки додатків баз даних Table чи Query? Відповідь це питання нескладний. Якщо додаток клієнт — серверне, то однозначно доцільніше використовувати компонент Query, оскільки вперших, він більше гнучкий й значно міцніше Table, а по-друге не завантажує мережу, і якщо база даних локальна, то у часто можна обійтися Table, оскільки роботу з ним набагато простіше й де немає потрібно міць SQL — запитів цілком може замінити Query.
8. Приложение.
Щоб показати реальну роботу компонентів Delphi до роботи з базами даних я наведу приклад докладання котрий з БД «Довідник співробітника ГИБДД».
Мета цього докладання — облік автомобілів їх характеристик, даних про їх власників, різних порушеннях допущених ними, і навіть інформацію про тех.осмотрах.
База даних складається з 6 таблиц:
1. Autos — даних про автомобилях.
2. Colors — цвета.
3. Construction — типи кузова.
4. Driver — даних про водителях.
5. Marks — марки автомобилей.
6. Ugon — даних про викрадених автомобилях.
[pic].
рис. 1. Головна форма приложения.
Робота докладання починається з підключення до БД з допомогою пункту меню БДПідключитися чи натискання комбінації клавіш «Alt+C». Відключення — БДОтключиться/Выход чи натискання клавіші F10.
Пункт меню «Робота» містить у собі такі підпункти: «Пошук автомобіля» (мал.2) і «Запрошення на тех. осмотр» (рис.3). У першому підпункті ведеться пошук, є можливість для пошуку транспортний засіб за критеріями. [pic].
рис 2. Форма пошуку на допомогу пошуку транспортного средства.
[pic].
рис 3. Форма транспортних засобів які підлягають тех.осмотру.
У другому підпункті меню «Робота», ведеться роботу з власниками транспортних засобів, просрочивших дату тех.осмотра. Є можливість пошуку власника на прізвище, і навіть можливість друку запрошення технічний огляд транспортний засіб. Вигляд вікна друку даного запрошення наведено на рис. 4. [pic].
рис 4. Вигляд вікна звіту «Запрошення на т. е. осмотр».
Також через пункти меню виробляється виклик довідників до роботи з даними. У додатку існує 6 видів довідників: автомобілі, водії, марки, тип кузова, колір, викрадені автомобили.
Основним довідником є довідник «Автомобілі» (див. мал.6), тут зосереджені дані про автомобілях та зареєстрованих у базі данных.
[pic].
рис 5. Довідник автомобилей.
Список використаної литературы:
1. В. Фаронов «Програмування баз даних в Delphi 6» Пітер 2003.
2. А. Я. Архангельский «Програмування в Delphi 6» Біном 2003.
3. В. Бобровский «Delphi 5» Пітер 2001.
4. И. Ю. Баженова «Delphi 5 Самовчитель програміста» Кудиц-Образ 2001.
———————————;
Таблиця бази данных.
data set.
Table, Query чи StoredProc.
data source.
DataSource.
Візуалізація і управління: DBGrid, DBEdit, DBNavigator.
[pic] ?