Содержание
-
Основы баз данных
-
База данных – это совокупность данных, которая предназначена для машинной обработки и служит для удовлетворения нужд многих пользователей в рамках одной или нескольких организаций. База данных состоит из одной или нескольких таблиц: строки таблицы называются записями, столбцы – полями. Все записи таблицы разные.
-
Первичный ключ – это одно или несколько полей таблиц, по которым можно однозначно найти запись. Чаще в качестве первичного ключа используют целое число, которое увеличивается при добавлении новой записи в таблицу.
-
Совокупность таблиц, связанных между собой определенным образом, называется реляционной базой данных (РБД). Виды связей между таблицами БД: Один к одному (1 : 1) Один ко многим (1 : М) Многие к одному (М : 1) Многие ко многим (М : N)
-
Основное достоинство РБД – повышение эффективности использования БД за счет Применения специальных языков манипулирования данными (SQL) Ликвидации избыточности представления информации
-
Локальные БД – располагаются на одном компьютере вместе с обращающимся к ним приложением. Работа с такими БД производится обычно в однопользовательском режиме. Локальная БД может также работать в сети. В таком случае файлы БД и приложения располагаются на сервере, и при запуске этого приложения на компьютере пользователя запускается его копия. Такой принцип работы с БД соответствует архитектуре файл-сервер.
-
Удаленные БД размещаются на сервере сети, а приложение, работающее с этой БД, располагается на компьютере пользователя, что соответствует архитектуре клиент-сервер (двухуровневая архитектура). Клиентом является приложение пользователя, которое формирует запрос (на языке SQL) для получения данных и посылает его на удаленный сервер, где находится БД. При получении такого запроса, удаленный сервер отправляет его серверу БД (SQL-серверу). Сервер БД представляет собой программу, с помощью которой осуществляется управление удаленной БД и обеспечивает выдачу клиенту результатов выполнения поступившего запроса. Вся работа происходит непосредственно на удаленном сервере.
-
-
Основы баз данных
В двухуровневом клиент-серверном приложении, как правило, все функции по формированию пользовательского интерфейса реализуются на клиенте, все функции по управлению данными - на сервере, а вот бизнес-правила можно реализовать как на сервере используя механизмы программирования сервера (хранимые процедуры, триггеры, представления и т.п.), так и на клиенте. В трехуровневом приложении появляется третий, промежуточный уровень, реализующий бизнес-правила, которые являются наиболее часто изменяемыми компонентами приложения Наличие не одного, а нескольких уровней позволяет гибко и с минимальными затратами адаптировать приложение к изменяющимся требованиям бизнеса.
-
-
Механизмы доступа к данным
-
Универсальный механизм доступа обычно реализован в виде библиотек и дополнительный модулей, называемых драйверами или провайдерами Библиотеки содержат стандартный набор функций и классов для работы с данными Дополнительные модули, специфичные для той или иной СУБД, реализуют непосредственное обращение к функциям клиентского API конкретных СУБД.
-
Наиболее популярными среди универсальных механизмов доступа к данным являются следующие: ODBC (Open DataBase Connectivity) OLE DB (Object Linking and Embedding, DataBase) ADO (ActiveX Data Objects) BDE (Borland Database Engine) ODBC, OLE DB, ADO – (Microsoft) промышленные стандарты BDE – механизм, применяемый в средствах разработки фирмы Borland (устаревший механизм, применяется для обратной совместимости с ранее разработанными БД)
-
ODBC, OLE DB, ADO – (Microsoft) промышленные стандарты
-
ODBC
Для доступа к конкретным СУБД через ODBC нужен ODBC-администратор – приложение, позволяющее определить: Какие источники данных доступны для данного компьютера с помощью ODBC ODBC-драйвер для доступа к этой БД Для каждой используемой СУБД нужен соответствующий ODBC-драйвер
-
-
Настройка источника данных ODBC
-
OLE DB
В середине 1990-х годов, с развитием и распространением технологии COM (ComponentObjectModel), компания Microsoft объявила о постепенном переходе от ODBC к использованию новой технологии OLEDB. OLE DB – представляет собой программный интерфейс для доступа к различным источникам данных: реляционные и нереляционные данные, текстовая и графическая информация и т.д.) Любой программный компонент, применяющий OLE DB, является потребителем
-
Потребители могут обращаться к данным посредством ADO или применять OLE DB непосредственно, используя OLE-DB-провайдер. Провайдер – это часть ПО, в которой реализованы интерфейсы OLE DB. Существуют два типа провайдеров: провайдеры данных и сервисные компоненты.
-
-
OLE DB
Провайдеры данных – это компоненты ПО, манипулирующие данными. Они располагаются между потребителями данных и БД. Примеры: Microsoft Jet 4.0 OLE DB Provider Microsoft OLE DB Provider for ODBC Drivers Microsoft OLE DB Provider for SQL Server Microsoft OLE DB Provider for Oracle и др
-
Сервисный компонент (провайдер сервисов) – реализует расширенную функциональность, не поддерживаемую обычными провайдерами данных. Сервисный компонент может обращаться к хранилищу данных непосредственно или с помощью соответствующего провайдера данных – в этом случае провайдер сервисов является одновременно и поставщиком и потребителем. Примеры: Microsoft Cursor Service for OLE DB Microsoft Data Snapping Service for OLE DB
-
Каждый OLE DB-провайдер должен содержать реализацию объектов:
-
Объект DataSource – предоставляет данные из источника данных потребителю; инкапсулирует информацию, связанную с соединением (включая имя пользователя и пароль). Объект Session - предоставляет контекст для транзакций, может генерировать наборы данных (rowsets) из источников данных, а также команды для запросов к источнику данных. Объект Command – используется для выполнения команд, представляющих собой строки, передаваемые от потребителя данных объекту DataSource для выполнения. Объект Rowset(набор данных) позволяет OLE DB-провайдеру данных представлять данные из источников данных в табличном формате, также используется для обновления, добавления или удаления строк
-
ADO
-
OLEDB является интерфейсом системного уровня, который используется системными программистами. ADO – представляет собой высокоуровневый программный интерфейс для доступа к OLE DB-интерфейсам. ADO позволяет манипулировать данными с помощью любых OLE DB-провайдеров. ADO содержит набор объектов, используемых для соединения с источником данных, для чтения, добавления, удаления и модификации данных. Технология ADO является наиболее эффективной и универсальной.
-
Для работы с ADO в Delphiпредусмотрены компоненты, расположенные на странице ADO (в последних версиях на странице dbGo). Они инкапсулируют такие объекты ADO как Connection, Command и RecordSet.
-
Для связи с набором данныхиспользуются компоненты ADO: ADOConnection – используется для соединения с различными источниками ADO, ADODataSet – используется для выборки данных из одной или нескольких таблиц и доступа к ним посредством ADO, ADOTable – используется для работы с одной таблицей в базе данных
-
ADOQuery – служит для определения SQL-операторов, позволяющих осуществить доступ к одной или нескольким таблицам в БД, ADOStoredProc – предназначена для исполнения хранимых процедур БД, ADOCommand – обеспечивает выполнение команд, не возвращающих результаты
-
Для обмена информацией между набором данных и компонентами визуализации и управления данными используется компонент DataSourse. Для визуализации и управления данными применяются компоненты DBGrid, DBText, DBNavigator и др.
-
-
Компонент ADOConnection
-
Данный компонент связывается с набором данных ADO. Компонент ADOConnection позволяет настроить процедуру аутентификации, контролировать транзакции, напрямую выполнять команды, адресованные БД, кроме того, он позволяет сократить количество подключений, существующих в рамках приложения. Для использования данного компонента необходимо разместить его на форме и настроить его свойство ConnectionString.
-
свойство ConnectionStringпредставляет собой строку, содержащую в себе несколько параметров соединения, которые разделяются друг от друга точками с запятой: Provider – имя провайдера, используемое для соединения, File name– имя файла, содержащего информацию о соединении, Remote provider– имя провайдера, используемое со стороны клиента, Remote Server – путь и имя сервера. и др.
-
При выборе первой опции необходимо указать Data Link File –файл связи с данными, содержащий информацию о подключаемой БД. Файл может иметь любое расширение, но обычно это файл с расширением *.udl.
-
-
-
-
-
-
Компонент ADOConnection
Строка соединения - ConnectionString Provider=MSDASQL.1; Persist Security Info=False; Extended Properties="DSN=MS Access Database;DBQ=D:\Мои базы SQLSERVER\base.accdb;DefaultDir=D:\Мои базы SQL SERVER;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;"
-
Read—только чтение; ReadWrite — чтение и запись; ShareDenyNone— режим совместной работы невозможен; ShareDenyRead— нельзя совместно использовать данные, открытые в режиме чтения; ShareDenyWrite— нельзя совместно использовать данные, открытые в режиме записи; ShareExclusive— нельзя совместно использовать данные, открытые в режиме чтения и/или записи; Write – только запись.
-
Компонент ADOConnection
Соединение с БД ADOConnection1.Open; или ADOConnection1.Connected := true; Метод Open, содержащего два необязательных параметра: UserID– идентификатор пользователя, Password – пароль пользователя. Закрытие соединения с БД ADOConnection1.Close; или ADOConnection1.Connected := false;
-
Свойства: LoginPromt :Boolean – определяет необходимость ввода пароля и идентификатора пользователя . Если LoginPromt=false– пароль можно не задавать ни в строке соединения, ни при вызове метода Open. свойство KeepConnection– используется для проверки соединения компонента ADOConnection с базой данных.
-
Соединение с базой данных может работать в синхронном или асинхронном режиме - свойство ConnectOptions: ConnectOptions=coСonnectUnspecifiedв синхронном режиме, ConnectOptions=coAsyncСonnectв асинхронном режиме. Синхронное соединение всегда ожидает результат последнего запроса, асинхронное соединение может выполнять новые запросы, не дожидаясь ответа от предыдущих запросов.
-
Работа с БД
Для создания приложения БД через механизм ADO потребуются 3 группы компонентов: Компоненты – наборы данных (вкладка ADO / dbGo) Компоненты доступа к данным (вкладкаData Access) Компоненты управления данными (вкладкаData Controls)
-
Компоненты – наборы данных
-
Компоненты ADOTable и ADOQuery
КомпонентADOTable: обеспечивает доступ к одной таблице базы данных. основное свойство TableNameс помощью которого задается имя таблицы. КомпонентADOQuery: используется для выполнения запросов на языке SQL, позволяет получать данные из одной или нескольких таблиц БД . основное свойство SQL,которое содержит текст запроса
-
Компонент ADODataset
КомпонентADODataSet используется для выборки данных из одной или нескольких таблиц и доступа к ним посредством ADO. С помощью этого компонента можно: получить все данные из таблицы, установить фильтры для того, чтобы выбрать ту информацию, которая отвечает некоторым условиям, выполнять SQL-запросы, запускать системные и определенные пользователем хранимые процедуры, а также сохранять наборы данных в файле и загружать их.
-
Способ работы компонента определяется свойством CommandType. В зависимости от выбранного типа выставляется соответствующее значение свойстваCommandText Например, если выбран тип cmdTable, то в свойстве CommandText указывается название таблицы;
-
Для задания запроса, используется тип cmdText. В этом случае, свойство CommandText является составным и редактируется посредством редактора CommandText Editor
-
Компоненты доступа к данным
-
Компонент DataSource
Вкладка Data Access Компонент DataSourceпредставляет собой «мост» между визуальными компонентами интерфейса БД и компонентами TDataSet. Необходим для работы практически любого из компонентов интерфейса БД. Позволяет устанавливать некоторые параметры НД, устанавливать состояние НД, отслеживать изменения НД
-
Компоненты управления данными (data controls)
-
Компоненты управления данными
-
-
-
-
-
Отображение данных из наборов
-
НАБОР ДАННЫХ ADODataSet ADOTable ADOQuery ИСТОЧНИК ДАННЫХ DataSource КОМПОНЕНТ УПРАВЛЕНИЯ И ОТОБРАЖЕНИЯ ДАННЫХ DBGrid, DBEdit, DBMemo, DBNavigator, … ADOConnection База данных ConnectionString Connection DataSet DataSource
-
Компоненты - наборы
Свойства Active:boolean; – свойство определяет открыт ли набор CurrentRecord – номер текущей записи DataSource – свойство, указывающее родительскую таблицу (для таблиц, связанных отношением родитель-потомок) BOF – определяет, находится ли курсор в первой записи набора EOF – определяет, достигнут ли конец набора
-
State– текущее состояние набора данных. Возможные состояния наборов: dsInactive – набор закрыт dsBrowse – режим просмотра данных dsEdit – режим редактирования активной записи dsInsert – режим добавления данных dsSetKey – просмотр ограниченного множества записей или поиск записи dsCalcFields, dsFilter – выполняются обработчики onCalcFields или onFilterRecord, соответственно. dsOpening – режим открытия набора
-
Отслеживать состояние набора данных удобно через событие компонента DataSource - OnStateChange procedure TForm1.DataSource1StateChange (Sender:TObject); var s:string; begin case ADOTable1.Stateof dsInactive : s := ‘Inactive’; dsEdit : s := ‘Edit’; dsBrowse : s := ‘Browse’; dsInsert : s := ‘Insert’; else s := ‘other’; end; Label1.Caption := s; end; В результате в тексте метке выводится информация о текущем состоянии набора данных
-
Свойства Modified – свойство определяет, была ли изменена активная запись RecordCount – общее число записей в наборе Методы Open – открыть набор данных Close – закрыть набор данных
-
Открытие / закрытие наборов
Открытие наборов данных ADOTable1.Active := true; или ADOTable1.Open; Закрытие наборов данных ADOTable1.Active := false; или ADOTable1.Close;
-
Поля наборов данных
-
Работа с полями набора данных
Любой НД содержит как минимум одно поле. В Delphi каждому полю набора данных приложения соответствует собственный объект. Основой объектов полей является класс TField, который инкапсулирует основные свойства абстрактного поля, не зависящего от типа данных. От класса TFieldпорождены другие классы, обеспечивающие функционирование реальных объектов полей, зависящих от типа данных.
-
-
Свойства класса TField Fields – массив полей набора данных (нумерация полей с 0). FieldCount – количество полей набора данных FieldName– имя поля Value – значение поля FieldByName(имя_поля):TField– доступ к полю по имени FieldValues[имя_поля]:Variant– текущее значение выбранного поля
-
Пример: Записать в список имена полей таблицы var S: String; begin ComboBox1.Items.BeginUpdate; ComboBox1.Items.Clear; fori:=0 toADOTable1.FieldCount-1 do begin S :=ADOTable1.Fields[i].FieldName; ComboBox1.Items.Add(s); end; ComboBox1.Items.EndUpdate; end;
-
Свойства приведения типов полей AsString– значение поля как строка AsInteger – значение поля как целое число AsDateTime – значение поля как дата/время AsBoolean – значение поля trueили false AsSingle – значение поля как веществ.число AsFloat –как веществ.число двойной точности и др.
-
Массив Fields предоставляет доступ к полям по номеру. При этом поля нумеруются в порядке следования при их объявлении Пример: Считать значение полей активной записи var S: String; x, y:integer; … S :=ADOTable1.Fields[0].asString; X :=ADOTable1.Fields[1].asInteger; y := ADOTable1.Fields[2].Value; …
-
Для доступа к полям по имени, используются свойства FieldByNameилиFieldValues(обращение по умолчанию) Пример: Считать значения полей активной записи в переменные var S: String; x,x1:integer; … S:=ADOTable1.FieldByName(‘CustName’).asString; X := ADOTable1.FieldValues[‘CustNo’]; … X1 := ADOTable1[‘CustNo’];
-
Имена объектов поля формируются путем объединения имени набора данных и имени поля. Например, если в таблице ADOTable1 имеется поле CustName, то объект класса TField данного поля получит имя ADOTable1CustNo Пример: Считать значения поляCustNo: Способы: S:=ADOTable1.FieldByName(‘CustNo’).asInteger; X := ADOTable1.FieldValues[‘CustNo’]; X1 := ADOTable1[‘CustNo’]; X2 := ADOTable1CustNo.asInteger;
-
Свойства класса TField DisplayLabel – имя поля при выводе DisplayWidth – ширина поля при выводе isNull – определяет содержит ли поле NULL-значение в текущей записи Required – является ли поле обязательным к заполнению CanModify – определяет, может ли поле изменяться идр
-
Пример: Для поля CustNo задать название «ИД заказчика», а ширину поля вывода - 30: ADOTable1.FieldByName(‘CustNo’).DisplayLabel := «ИД заказчика»; ADOTable1CustNo.DisplayWidth = 30;
-
Пример 2: Если значение поля CustNameне заполнено, выдать соответствующее сообщение: If ADOTable1.FieldByName(‘CustName’).isNull then ShowMessage(‘Поле не заполнено!’); If ADOTable1CustName.isNull then ShowMessage(‘Поле не заполнено!’);
-
Редактирование списка полей
-
Работа с полями набора данных
В Delphi предусмотрено два способа создания объектов полей: статические и динамические поля. Динамические объекты полей автоматически создаются при открытии набора данных в соответствии со структурой связанной таблицы БД. Статические объекты полей создаются программистом на этапе разработки при помощи специализированного Редактора полей, их свойства доступны в Инспекторе объектов.
-
Для редактирования состава полей используется специальный редактор полей, который открывается двойным щелчком по объекту-набору данныхили через контекстное меню набора данных – Fields Editor
-
Кроме обычных полей данных, также можно создать вычисляемые поля и поля выбора
-
Вычисляемые поля – это поля, которые не существуют в реальных таблицах, а вычисляются по значениям других полей Для задания вычисляемого поля – используется Field type – Calculated Выражение для вычисления нужно задать в обработчике события onCalcFields набора данных. Данное событие возникает при открытии НД, а также при перемещении курсора от одной записи к другой. Если свойство AutoCalcFields = true, то событие onCalcFields возникает при каждой модификации невычисляемых полей этого набора данных.
-
Вычисляемые поля
Пример: Для всех сотрудников выдать информацию по текущей зарплате, а также значение зарплаты, увеличенной на 20% Procedure TForm1.ADOTable1CalcFields(DataSet:TDataSet); Begin ADOTable1HighSalary.asFloat :=1.2*ADOTable1Salary.asFloat; End; Требуется: В список полей добавить новое вычисляемое поле «HighSalary» Создать обработчик события onCalcFields таблицы
-
Поля выбора
Поля выбора (lookup-поля) – это поля, которые автоматически получают значения, выбранные из списка, формируемого на основе значений определенного поля из другого набора. Поля выбора позволяют отображать данные из таблицы, связанной отношением «многие-к-одному» с исходной таблицей. Для создания таких полей необходимо обязательно указать поле, через которое таблицы связаны друг с другом.
-
-
Для определения поля выбора необходимо в редакторе полей создать новое поле типа Lookup.
-
Далее в группе параметров Lookup definitionследует настроить параметры для связи таблиц: Key Fields – поле в исходной таблице (НД-1), используемое в качестве внешнего ключа Dataset – набор данных (НД-2), из которого поле выбора должно получать значения Lookup Keys– поле для связи, определенное в НД-2 ResultField – поле результата, значение которого нужно выводить в исходной таблице (НД-1)
-
Вид таблицы с добавленным полем выбора
-
Навигация по набору данных
-
First – перейти к первой записи набора Last – перейти к последней записи набора Next – перейти к следующей записи Prev – перейти к предыдущей записи MoveBy(Distance:integer) – перейти на указанное в параметре Distance число записейвперед или назад
-
Пример:Найти сумму значений 4-го столбца таблицы ADOTable1.First; s := 0; While not ADOTable1.EOFdo begin x := ADOTable1.Fields[3].AsInteger; s := s + x; ADOTable1.Next; end;
-
Пример:Найти сумму значений 4-го столбца таблицы ADOTable1.Last; s := 0; While not ADOTable1.BOFdo begin x := ADOTable1.Fields[3].AsInteger; s := s + x; ADOTable1.Prev; end;
-
Пример:Найти сумму значений 4-го столбца таблицы ADOTable1.Last; s := 0; While not ADOTable1.BOFdo begin x := ADOTable1.Fields[3].AsInteger; s := s + x; ADOTable1.Move(-1); end;
-
Модификация данных
-
Append – добавление новой записи в конец набора Delete – удаление текущей записи набора Edit – перевод текущей записи в режим редактирования Cancel – отмена изменений, сделанных в текущей записи Post – сохранение изменений, сделанных в текущей записи SetFields(const Values: array of const) – используется для изменения значений всех или некоторых полей текущей записи
-
Refresh – обновление результирующего набора путем повторного извлечения данных из набора Insert – вставляет новую запись в текущую позицию InsertRecord – вставляет новую запись в текущую позицию со значениями, указанными в параметрах AppendRecord – вставляет новую запись в конец набора со значениями, указанными в параметрах
-
Перед модификацией данных, нужно вызвать метод Edit, Append или Insert, для перевода набора данных в состояние редактирования или добавления. Для сохранения измененных значений записи, требуется вызвать метод PostилиNext, для отмены изменений – метод Cancel Непосредственное изменение значения текущего поля активной записи выполняется одним из следующих способов: ADOTable1.Fields[1].AsString := ‘Иванов’; ADOTable1.FieldByName(‘CustName’).asString := ‘Иванов’; ADOTable1.FieldValues[‘CustName’] := ‘Иванов’; ADOTable1[‘CustName’] := ‘Иванов’;
-
Добавление записи
Пример:В таблицу добавить запись со следующими значениями: CustNo = 1345, CustName = ‘Петров’, Price = 120.56; With ADOTable1 do Begin Append; FieldValues[‘CustNo’] := 1345; FieldValues[‘Price’] := 120.56; FieldByName(‘CustName’).asString :=‘Петров’; Post; end;
-
Редактирование записи
Пример:В выбранной записи таблицы увеличить значение поля Price на 10% var x:single; … With ADOTable1 do Begin Edit; x := FieldValues[‘Price’]; FieldValues[‘Price’] := 1.1*x; Post; end;
-
Пример:Для всех записей таблицы увеличить значение поля Price на 10% var x:single; … With ADOTable1 do begin First; While not EOF do Begin Edit; x := FieldValues[‘Price’]; FieldValues[‘Price’] := 1.1*x; Next; end; end; Для сохранения результатов используется метод Next
-
Пример:В текущей записи изменить значения полей таблицы: CustNo = 1345, CustName = ‘Петров’, Price = 120.56; (Предположим, в таблице имеются следующие поля: CustNo, City, CustName,Price) With ADOTable1 do Begin Edit; SetFields([1345, nil, ‘Петров’, 120.56]); Post; end; Константа nil используется для сохранения предыдущего значения поля
-
Поиск данных
-
Фильтрация данных
Свойства Filter:string; – свойство для задания фильтра. Фильтр определяет условие, которому должны удовлетворять доступные записи Filtered: boolean– определяет, используется ли фильтр, заданный свойством Filter Событие onFilterRecord – возникает, когда свойство Filtered устанавливается в True. В параметре Accept события можно указывать дополнительные (к Filter) условия фильтрации
-
Пример: Найти всех сотрудников с номерами > 1200, имена которых начинаются от буквы ‘A’ до ‘D’ ADOTable1.Filtered :=False; ADOTable1.Filter :='CustNo>1200 andContact1200 andContact
-
Поиск данных
Поиск записей может осуществляться следующими методами: Found, FindFirst, FindPrev, FindNext, FindLast – логические функции, возвращающие True, если найдена запись, удовлетворяющая заданному фильтру (при этомзначение свойства Filtered может быть как Trueтак иFalse). Locate Lookup
-
Пример: Определить, есть ли в таблице сотрудники, номера которых > 2000 ADOTable1.Filtered :=False; ADOTable1.Filter :='CustNo>2000’; if ADOTable1.FindFirst thenShowMessage(‘Естьтакие сотрудники’) elseShowMessage(‘Нет таких сотрудников’);
-
Пример: Определить минимальную зарплату (поле Price)сотрудников с номерами > 2000 ADOTable1.Filtered :=False; ADOTable1.Filter := 'CustNo>2000’; If ADOTable1.FindFirstthenmin_price := ADOTable1.FieldValues[‘Price’]; While ADOTable1.Founddo begin x := ADOTable1.FieldValues[‘Price’]; if x
-
Метод Locate FunctionLocate(constKeyFields; constKeyValues: Variant; Options:TLocateOptions):Boolean; KeyFields – поле/поля, по которым ведется поиск в виде строки, разделитель «;» KeyValues – вариантный массив критериев поиска Options – множество режимов поиска: [] – пустое множество означает полное совпадение с критерием [loCaseInsensitive] – без учета регистра [loPartialKey]– частичное совпадение с критерием поиска
-
Поиск данных – метод Locate
Метод Locate производит поиск по любым полям. Первая запись, удовлетворяющая критериям поиска становится активной. Пример – поиск по одному полю:Найти сотрудника по следующему критерию: CustName=‘Петров’ if ADOTable1.Locate(‘CustName’, ‘Петров’,[]) thenShowMessage (‘Запись найдена’) elseShowMessage(‘Запись не найдена’);
-
Пример – поиск по нескольким полям:Найти запись по следующим критериям: CustName=‘Петров’, City = ‘Москва’, Price = 1235 Установить режим частичного совпадения. if ADOTable1.Locate(‘CustName;City;Price’, VarArrayOf(‘Петров’, ‘Москва’, 1235), [loPartialKey]) thenShowMessage (‘Запись найдена’) elseShowMessage(‘Запись не найдена’);
-
Поиск данных
Метод Lookupнаходит запись, удовлетворяющую критериям поиска, но не делает её текущей, а возвращает значения некоторых полей этой записи. FunctionLookup(constKeyFields; constKeyValues: Variant; constResultFields:String):Variant; KeyFields – поле/поля, по которым ведется поиск в виде строки, разделитель «;» KeyValues – вариантный массив критериев поиска
-
Метод Lookup ResultFields – список полей, значения которых возвращает метод Lookup, если запись, удовлетворяющая критериям поиска найдена: Если указано одно поле, то результат – либо значение этого поля, либо NULL Если указано несколько полей, то результат – вариантный массив, число элементов которого не превышает количество результирующих полей Для проверки типа результата (переменная, или вариантный массив) используется логическая функция VarIsArray
-
Поиск данных – метод Lookup
Пример – поиск по одному полю:Определить зарплату сотрудника по следующему критерию: CustName= ‘Петров’ VarRes:Variant; s:string; … Res :=ADOTable1.Lookup(‘CustName’, ‘Петров’, ‘Price’); caseVarType(Res) of varEmpty : s:= ‘Нет данных о зарплате’; varNull : s:= ‘Запись не найдена’; else s := Res; end; ShowMessage(s);
-
Пример – поиск по нескольким полям:Определить зарплату и город сотрудника по следующему критерию: CustName= ‘Петров’,
-
VarRes:Variant; s:string;x:integer; … Res :=ADOTable1.Lookup(‘CustName’, ‘Петров’, ‘Price;City’); ifVarIsArray(Res) then begin x:= Res[0]; ifRes[1]Null then s:= Res[1]; endelse caseVarType(Res) of varEmpty : s:= ‘Нет данных о зарплате’; varNull : s:= ‘Запись не найдена’; else s := Res; end; ShowMessage(s);
-
Связанные курсоры
-
Связанные курсоры позволяют программистам определить отношение «один ко многим» Для этих целей используются следующие свойства наборов данных: MasterSource:TDataSource; MasterFields:WideString; Свойство MasterSource– определяет источник данных родительской таблицы Свойство MasterFields– определяет поле/поля для связи родительской таблицы с дочерней
-
Для создания связи нужно: в свойстве поля MasterSourceдочерней таблицы установить DataSource, связанный с родительской таблицей. Открыть свойство MasterFields В появившемся окне выбрать связанные поля и нажать на кнопку ADD. В результате при перемещении по родительской таблицы, в дочерней таблице будут отображаться только связанные записи
-
-
Условие соединения
Нет комментариев для данной презентации
Помогите другим пользователям — будьте первым, кто поделится своим мнением об этой презентации.