<Имя модуля данных>.<Имя компонента>
Глава 4. Технология создания информационной системы
79
Ниже приводится пример кода, в котором осуществляется обращение к компонентам модуля данных.
procedure TForml.FormCreate(Sender: TObject);
begin
DataModule2.Tablel.DatabaseName:= 'dbdemos';
DataModule2.Tablel.TableName:= 'Clients.dbf;
DataModule2.DataSourcel.DataSet:= DataModule2.Tablel;
DBGridl.DataSource: = DataModule2.DataSourcel;
DBNavigatorl.DataSource:= DataModule2.DataSourcel;
DataModule2.Tablel.Active:= True;
end;
Для компонентов устанавливаются значения свойств, связывающих между собой эти компоненты и таблицу БД. Значения свойств устанавливаются динамически в процессе выполнения приложения, для чего использован обработчик события создания главной формы приложения. В составных именах компонентов доступа к данным, которыми являются источник данных DataSourcel и набор данных Tablel, указывается имя модуля данных DataModuie2.
Чтобы обеспечить возможность доступа к компонентам модуля данных в модуле формы, в список uses раздела implementation необходимо включить ссылку на модуль данных:
uses unit2;
Ссылку на другой модуль можно написать самостоятельно, но Delphi позволяет вставить ее автоматически. При выборе команды File\Use Unit появляется диалоговое окно Use Unit. После выбора нужного модуля и нажатия кнопки ОК он добавляется в список.
Рис. 4.21. Диалоговое окно Information |
Если ссылка на требуемый модуль отсутствует, но в коде используется имя модуля данных, то при компиляции приложения появляется диалоговое окно Information (рис. 4.21). Оно сообщает, что форма ссылается на другую форму, объявленную в модуле, отсутствующем в списке uses формы. Для автоматического добавления модуля в список достаточно нажать кнопку Yes.
80
Часть I. Основы работы с базами данных
Помимо компонентов доступа к данным, которыми являются session,
|
Database, Table, Query, StoredProc, BatchMove И др., В модуле данных МОЖНО размещать невизуальные компоненты, не имеющие прямого отношения к БД, например, ImageList, OpenDialog ИЛИ Timer.
(____ ЗамечаниеJ
При работе с модулем данных в Палитре компонентов доступны только невизуальные компоненты.
Модуль данных позволяет:
□ отделить управление БД от обработки данных;
□ создать модуль, совместно используемый несколькими приложениями.
Основным назначением модуля данных является централизованное хранение компонентов доступа к данным, а также кода для этих компонентов, в частности, обработчиков событий. В модуле данных удобно размещать код, выполняющий управление БД, например, реализацию бизнес-правил.
Использование простого модуля данных несколькими приложениями позволяет ускорить разработку приложений, т. к. готовый модуль данных впоследствии можно включать в новые приложения. Кроме того, управление БД через общий модуль дает возможность определить для всех пользователей одинаковые режимы и правила работы с базой, а также делает более простым изменение этих режимов и правил.
Однако для небольших приложений использование простого модуля данных не всегда оправданно, т. к. может затруднить, а не облегчить разработку приложения.
Удаленный модуль данных предназначен для работы с удаленными БД в трехуровневой архитектуре "клиент-сервер" и используется для создания сервера приложения — промежуточного уровня между приложением и сервером БД.
Web-модуль предназначен для работы с БД в сети Интернет и является посредником между обозревателем (программой просмотра Web-документов) и сервером БД. Использование Web-модуля рассмотрено в главе 20, посвященной публикации баз данных средствами Delphi.
|
Глава 5
Компонентыдоступакданным
Компоненты доступа к данным являются невизуальными. В этой главе мы рассмотрим основные компоненты доступа к данным, которые используются при работе с локальными и удаленными БД с помощью механизма BDE. Компоненты Session и Database, применяемые для управления соединениями с БД и транзакциями, будут изучены в главах 7 и 13.
Наборы данных
Таблицы БД располагаются на диске и являются физическими объектами. Для операций с данными, содержащимися в таблицах, используются наборы данных. В терминах системы Delphi набор данных представляет собой совокупность записей, взятых из одной или нескольких таблиц БД. Записи, входящие в набор данных, отбираются по определенным правилам, при этом в частных случаях набор данных может включать в себя все записи из связанной с ним таблицы или не содержать ни одной записи. Набор данных является логической таблицей, с которой можно работать при выполнении приложения. Взаимодействие таблицы и набора данных напоминает взаимодействие физического файла и файловой переменной.
(_____ Замечание
В отличие от Delphi, многие СУБД вместо термина набор данных используют термины выборка или таблица.
В Delphi для работы с наборами данных при использовании механизма BDE служат такие компоненты, как Table, Query, UpdateSQL, DecisionQuery или storedProc. В случае других механизмов доступа для работы с наборами данных служат аналогичные компоненты ADOTable, ADOQuery и ADOStoredProc (для механизма ADO), SQLTable, SQLQuery и SQLStoredProc (для механизма dbExpress), iBTable, iBQuery, iBUpdateSQL и iBStoredProc (для механизма InterBease). Отличительные особенности последних мы рассмотрим при описании соответствующих механизмов доступа. Здесь остановимся на изучении компонентов для механизма доступа BDE.
|
82
Часть I. Основы работы с базами данных
Компонент storedProc используется для вызова хранимых процедур при организации взаимодействия с удаленными БД, а компонент UpdateSQL обеспечивает работу с котированными изменениями в записях. Эти компоненты рассматриваются при описании удаленных БД. Компонент DecisionQuery применяется при построении систем принятия решений. Наиболее универсальными и, соответственно, часто используемыми являются компоненты Table и Query, задающие наборы данных. Они будут подробно
ШШШ^ МбзЖйнй4тиедоступа к БД обеспечивает класс TDataSet, представляющий наборы данных в виде совокупности строк и столбцов (записей и полей). Этот класс содержит основные средства навигации (перемещения) и редактирования наборов данных.
Компоненты Table и Query являются производными от класса TDBDataSet — потомка класса TDataSet (через класс TBDEDataSet). Они демонстрируют схожие с базовыми классами характеристики и поведение, но каждый из них имеет и свои особенности. Здесь мы рассмотрим наиболее общие характеристики наборов данных. Большая часть свойств, методов и событий изучается на примере операций с наборами данных.
Расположение БД, с таблицами которой выполняются операции, указывает свойство DatabaseName типа string. Значением свойства является имя каталога, в котором находится БД (файлы ее таблиц), или псевдоним, ссылающийся на этот каталог. Если для БД определен псевдоним, то его можно выбрать в раскрывающемся списке окна Инспектора объектов.
(_____ ЗамечаниеJ
Желательно задавать имя БД через псевдоним. Это заметно облегчает перенос приложения и файлов БД в другие каталоги и на другие компьютеры, т. к. для обеспечения работоспособности приложения после изменения расположения БД достаточно изменить название каталога, на который ссылается псевдоним БД.
Для компонента Table использование свойства DatabaseName является единственной возможностью задать местонахождение таблиц БД. Для компонента Query дополнительно можно указать в запросе SQL путь доступа к каждой таблице.
(_____ ЗамечаниеJ
При задании расположения БД программным способом набор данных предварительно необходимо закрыть, установив его свойство Active в значение False. В противном случае генерируется исключение.
Вот пример, иллюстрирующий, как задается расположение БД:
Tablel.Active:= False;
Tablel.DatabaseName: = 'BDPlace';
Table2.Active:= False;
Table2.DatabaseName: = 'C:\SALE\BD';
Глава 5. Компоненты доступа к данным
83
Для набора данных Tablel таблицы БД расположены в каталоге, на который указывает псевдоним BDPlace. Таблицы БД для набора данных ТаЫе2 расположены в каталоге C:\SALE\BD. Для определения и изменения псевдонима и его параметров удобно использовать такие программы, как Database Desktop или BDE Administrator (рассматриваются в главе 12).
В зависимости от ограничений и критерия фильтрации один и тот же набор данных в разные моменты времени может содержать различные записи. Число записей, составляющих набор данных, определяет свойство RecordCount типа Longint. Это свойство доступно для чтения при выполнении приложения. Управление числом записей в наборе данных осуществляется косвенно — путем отбора записей тем или иным способом, например, с помощью фильтрации или SQL-запроса (для компонента Query).
В приводимом примере производится перебор всех записей набора данных:
var i: integer;
Tablel.First;
for i:= 1 to Tablel.RecordCount do begin
// Здесь можно расположить инструкции, выполняющие
// обработку очередной записи
Table1.Next;
end;
Перебор всех записей набора данных осуществляется в цикле, для чего переменная i цикла последовательно принимает значения от 1 до RecordCount. Перед началом цикла вызовом метода First выполняется переход к первой записи набора данных. В цикле для перехода к следующей записи вызывается метод Next.
Для локальных таблиц dBase или Paradox составляющие набор данных записи последовательно нумеруются, отсчет начинается с единицы. Номер записи в наборе данных определяет свойство RecNo типа Longint, которое доступно во время выполнения программы.
Номер текущей записи можно узнать, например, так:
Editl.Text:= IntToStr(Tablel.RecNo);
(_____ ЗамечаниеJ
При изменении порядка записей при сортировке или фильтрации нумерация записей также изменяется.
Для таблиц Paradox свойство RecNo можно использовать для перехода к требуемой записи, установив в качестве значения свойства номер записи. Так, в операции
Tablel.RecNo:= StrToInt(Editl.Text);
выполняется переход к записи, номер которой содержится в поле ввода Editl. Указанная запись становится текущей.
84
Часть I. Основы работы с базами данных
Для выполнения операций с наборами данных используются два способа доступа к данным:
□ навигационный; □ реляционный.
Навигационный способ доступа заключается в обработке каждой отдельной записи набора данных. Этот способ обычно используется в локальных БД или в удаленных БД небольшого размера. При навигационном способе доступа каждый набор данных имеет невидимый указатель текущей записи. Указатель определяет запись, с которой могут выполняться такие операции, как редактирование или удаление. Поля текущей записи доступны для просмотра. Например, компоненты DBEdit и DBText отображают содержимое соответствующих полей именно текущей записи. Компонент DBGrid указывает текущую запись с помощью специального маркера.
В разрабатываемом приложении навигационный способ доступа к данным можно реализовать, используя любой из компонентов Table или Query.
Реляционный способ доступа основан на обработке группы записей. Если требуется обработать одну запись, все равно обрабатывается группа, состоящая из одной записи. При реляционном способе доступа используются SQL-запросы, поэтому его называют также SQL-ориентированным. Реляционный способ доступа ориентирован на работу с удаленными БД и является для них предпочтительным. Однако его можно использовать и для локальных БД.
Реляционный способ доступа к данным в приложении можно реализовать с помощью компонента Query.
Состояния наборов данных
Наборы данных могут находиться в открытом или закрытом состояниях, на что указывает свойство Active типа Boolean. Если свойству Active установлено значение True, то набор данных открыт. Открытый компонент Table содержит набор данных, соответствующий данным таблицы, связанной с ним через свойство TableName. Для открытого компонента Query набор данных соответствует результатам выполнения SQL-запроса, содержащегося в свойстве SQL этого компонента. Если свойство Active имеет значение False (по умолчанию), то набор данных закрыт, и его связь с БД разорвана.
Набор данных может быть открыт на этапе разработки приложения. Если при этом к набору данных через источник данных DataSource подключены визуальные компоненты, например, DBGrid или DBEdit, то они отображают соответствующие данные таблицы БД.
(_____ ЗамечаниеJ
На этапе проектирования приложения визуальные компоненты отображают данные записей набора данных, но перемещение по набору данных и редактирование записей невозможны. Исключение составляет возможность перемещения текущего указателя с помощью полос прокрутки компонента DBGrid.
Глава 5. Компоненты доступа к данным
85
Если по каким-либо причинам открыть набор данных невозможно, то при попытке установить свойство Active в значение True выдается сообщение об ошибке, а свойство Active сохраняет значение False. Одной из причин невозможности открытия набора данных может являться неправильное значение свойства TableName или SQL.
(_____ ЗамечаниеJ
На этапе проектирования свойство Active наборов данных автоматически устанавливается в значение False при изменении значения свойств DataBaseName,
TableName или SQL.
Приводимый пример демонстрирует управление состоянием набора данных с помощью свойства Active, которое используется для открытия и закрытия набора данных Queryl:
procedure TForml.ButtonlClick(Sender: TObject);
begin
Queryl.Active:= False;
Queryl.SQL.Clear;
Queryl.SQL.Add('select * from Example1.db');
Queryl.Active:= True;
end;
Управлять состоянием набора данных можно также с помощью методов Open и Close.
Процедура Open открывает набор данных, ее вызов эквивалентен установке свойства Active в значение True. При вызове метода Open генерируются события BeforeOpen и AfterOpen, а также вызываются процедуры-обработчики этих событий.
Процедура close закрывает набор данных, ее вызов эквивалентен установке свойства Active в значение False. При вызове метода close генерируются события BeforeClose и AfterClose, а также вызываются процедуры-обработчики этих событий.
В примере показывается управление состоянием набора данных (открытие и закрытие) с помощью методов Open и close:
procedure TForml.Button2Click(Sender: TObject);
begin
Queryl.Close;
Queryl.SQL.Clear;
Queryl.SQL.Add('select * from Example2.db');
Queryl.Open;
end;
86
Часть I. Основы работы с базами данных
События BeforeOpen и AfterOpen имеют тип TDataSetNotifyEvent, который описывается так:
type TDataSetNotifyEvent = procedure(DataSet: TDataSet) of object;
В этом описании параметр DataSet определяет набор данных, для которого произошло событие.
Событие BeforeOpen возникает непосредственно перед открытием набора данных. В обработчике этого события можно выполнить проверку определенных условий, и если они не соблюдаются, то открытие набора данных может быть запрещено.
(Замечание^
Обработчик события не содержит специального параметра, с помощью которого можно запретить открытие набора данных. Одним из вариантов запрета открытия является принудительное возбуждение исключения.
Рассмотрим в качестве примера следующую процедуру:
procedure TForial.TablelBeforeOpen(DataSet: TDataSet);
begin
if not CheckBoxl.Checked then Abort;
end;
Если флажок CheckBoxl, управляющий возможностью открытия набора данных, не установлен, то открытие набора данных Tablel блокируется. Для этого с помощью вызова процедуры Abort генерируется "тихое" исключение. В результате операции, связанные с открытием набора данных, отменяются, а пользователю не выдается никаких сообщений об ошибках. В подобных случаях выдачу предупреждающих сообщений должен обеспечивать программист, как это реализуется, например, в приведенной ниже процедуре:
procedure TFo rial.TablelBeforeOpen(DataSet: TDataSet);
begin
if not CheckBoxl.Checked then begin MessageDlg ('Данные таблицы ' + Tablel.TableName + ' недоступны!',
mtError, [mbOK], Ob-Abort; end;
end;
Событие AfterOpen генерируется сразу после открытия набора данных. Это событие можно использовать, например, для выдачи пользователю сообщения о возможности работы с данными.
Глава 5. Компоненты доступа к данным
87
В примере демонстрируется открытие набора данных с выдачей соответствующего сообщения:
procedure TForml.TablelAfterOpen(DataSet: TDataSet);
begin
if CheckBox2.Checked then
MessageDlg('Данные таблицы ' + Table1.TableName + ' доступны для работы.',
mtWarning, [mbOK], 0);
end;
Если флажок checkBox2, управляющий возможностью выдачи сообщений, установлен, то при открытии набора данных Tabiei пользователю выдается сообщение.
Как уже говорилось, при закрытии набора данных возникают события Bef oreClose
и AfterClose. Они, как и события BeforeOpen и AfterOpen, имеют тип TDataSetNotifyEvent.
Отметим, что закрытие набора данных автоматически не сохраняет текущую запись, т. е. если набор данных при закрытии находился в режимах редактирования или вставки, то произведенные изменения данных в текущей записи будут потеряны. Поэтому перед закрытием набора данных нужно проверять его режим и при необходимости принудительно вызывать метод Post, сохраняющий сделанные изменения. Одним из вариантов сохранения изменений является вызов метода Post в обработчике события BeforeClose, возникающего непосредственно перед закрытием набора данных.
Рассмотрим следующий пример:
procedure TForml.TablelBeforeClose(DataSet: TDataSet);
begin
if (Tablel.State = dsEdit) or (Tablel.State = dslnsert) then Tablel.Post;
end;
Если набор данных Tablel находится в режиме редактирования или вставки, то перед его закрытием внесенные изменения сохраняются.
СЗамечание^
При закрытии приложения событие BeforeClose не генерируется, и несохранен-ные изменения теряются.
Событие AfterClose возникает сразу после закрытия набора данных, и его можно использовать для выдачи пользователю соответствующих сообщений, как это сделано в приведенной ниже процедуре:
procedure TForml.TablelAfterClose(DataSet: TDataSet);
begin
if CheckBox2.Checked then begin
88
Часть I. Основы работы с базами данных
Веер;
MessageDlg('Таблица ' + Tablel.TableName + ' закрыта.',
mtWarning, [mbOK], 0); end; end;
Если установлен флажок checkBox2, управляющий режимом выдачи сообщений, то после закрытия набора данных Tabiei выдается сообщение о закрытии таблицы, связанной с этим набором данных.
Необходимо иметь в виду, что если при работе приложения используется большое число таблиц, то выдача подобных сообщений может затруднять действия пользователя. Поэтому программист должен предусмотреть возможность отключения выдачи сообщений. В приведенных примерах для этой цели предназначен флажок CheckBox2.
Режимы наборов данных
Наборы данных могут находиться в различных режимах. Текущий режим набора данных определяется свойством State типа TDataSetState. Оно доступно для чтения во время выполнения приложения и может быть использовано только для текущего режима. Для перевода набора данных в требуемый режим используются специальные методы. Они могут вызываться явно (указанием имени метода) или косвенно (путем управления соответствующими визуальными компонентами, например, навигатором DBNavigator или сеткой DBGrid).
Набор данных может находиться в одном из перечисленных ниже режимов.
□ dsinactive (неактивен) — набор данных закрыт и доступ к его данным невозможен. В этот режим набор данных переходит после своего закрытия, когда свойство Active установлено в значение False.
□ dsBrowse (навигация по записям набора данных и просмотр данных) — в этот режим набор данных переходит так:
• из режима dsinactive — при установке свойства Active в значение True;
• из режима dsEdit — при вызове метода Post или Cancel;
• из режима ds Ins ert — при вызове метода Post или Cancel.
□ dsEdit (редактирование текущей записи) — в этот режим набор данных переходит из режима dsBrowse при вызове метода Edit.
□ dsinsert (вставка новой записи) — в этот режим набор данных переходит из режима dsBrowse при вызове методов Insert, insertRecord, Append или AppendRecord.
□ dsSetKey (поиск записи, удовлетворяющей заданному критерию) — в этот режим набор данных переходит из режима dsBrowse при вызове методов
Глава 5. Компоненты доступа к данным
89
SetKey, SetRangeXXX, FindKey, GotoKey, FindNearest или GotoNearest. Возможен только для компонента ттаЫе, т. к. для компонента Query отбор записей осуществляется средствами языка SQL.
□ dsCalcFields (расчет вычисляемых полей) — используется обработчик события OnCalcFields.
□ dsFilter (фильтрация записей) — в этот режим набор данных автоматически переходит из режима dsBrowse каждый раз, когда выполняется обработчик события OnFilterRecord. В режиме блокируются все попытки изменения записей. После завершения работы обработчика события OnFilterRecord набор данных автоматически переводится в режим dsBrowse.
□ dsNewValue (обращение к значению свойства TField.NewValue).
□ dsOldValue (обращение к значению свойства TField.OldValue).
□ dsCurValue (обращение к значению свойства TField.CurValue).
□ dsBlockRead (запрет изменения элементов управления и генерации событий при вызове метода Next).
□ dsinternalCalc (указание на необходимость вычислять значения полей, свойство TField. FieldKind которых имеет значение f klnternalCalc).
□ dsOpening (открытие набора данных).
Взаимосвязи между основными режимами наборов данных показаны на рис. 5.1, где приведены также некоторые методы и свойства, с помощью которых набор данных переходит из одного режима в другой.
90
Часть I. Основы работы с базами данных
Иногда при описании операций, выполняемых с записями набора данных, под режимом редактирования подразумевается не только режим dsEdit изменения полей текущей записи, но и режим dsinsert вставки новой записи. Тем самым режим редактирования понимается в широком смысле слова как режим модификации набора данных.
Набор данных использует режимы dsNewValue, dsOldValue, dsCurValue, dsBlockRead и dslnternalCalc для собственных нужд, обычно программист не анализирует их.
При выполнении программы можно определить режим набора данных с помощью одноименных свойств state типа TDataSetstate самого набора данных и связанного с ним источника данных DataSource. При изменении режима набора данных для источника данных DataSource генерируется событие
OnStateChange типа TNotifyEvent.
Рассмотрим пример:
procedure TForial.DataSourcelStateChange(Sender: TObject);
begin
case DataSourcel.State of
dslnactive: Labell.Caption:= 'Набор данных закрыт';
dsBrowse: Labell.Caption:= 'Просмотр набора данных';
dsEdit: Labell.Caption:= 'Редактирование набора данных';
dsinsert: Labell.Caption:= 'Вставка записи в набор данных'
else Labell.Caption:= 'Режим набора данных не определен';
end;
end;
В приведенной процедуре определяется режим набора данных, связанного с источником данных DataSourcel, и информация об этом режиме выводится в надписи Labell. При этом используется свойство state источника данных. Код, выполняющий анализ режима, помещен в обработчик события
OnStateChange компонента DataSourcel.
Доступ к полям
Каждое поле набора данных представляет собой отдельный столбец, для работы с которым в Delphi служат объект Field типа TField и объекты производных от него типов, например, TlntegerField, TFloatField или TStringField. Для доступа к этим объектам и, соответственно, к полям записей у набора данных есть специальные методы и свойства, доступные при выполнении приложения.
Свойство FieldCount типа integer указывает количество полей набора данных. Это свойство доступно только для чтения. Количество полей набора данных может отличаться от физического числа полей таблицы БД, поскольку в набор данных не обязательно включаются все поля таблицы. Состав полей формируется при разработке приложения с помощью Редактора полей набора данных и Редактора столбцов сетки DBGrid. Кроме того, возможно динамическое
Глава 5. Компоненты доступа к данным
91
изменение состава полей во время выполнения приложения. Для компонента Query состав полей набора данных зависит также от SQL-запроса.
Значение свойства Fields [Index: Integer] типа TFieId представляет собой поле (столбец) набора данных. К отдельному полю можно обратиться, указав его номер index в массиве Fields; номера полей находятся в пределах от нуля до FieldCount - 1. Номер объекта поля в массиве полей определяет свойство index типа integer. В отличие от Редакторов полей и столбцов, применяемых на этапе разработки приложения, свойство index можно использовать для определения и изменения порядка полей набора данных во время выполнения приложения.
В качестве примера рассмотрим чтение полей текущей записи:
procedure TForml.ButtonlClick(Sender: TObject);
var n: integer;
begin
for n:= 0 to Tablel.FieldCount - 1 do
ListBoxl.Items.Add(Tablel.Fields[n].AsString); end;
Здесь содержимое каждого поля текущей записи интерпретируется как строковое значение и добавляется к списку ListBoxl.
Номер поля в наборе данных не является заранее фиксированным и известным числом и зависит от порядка полей в таблице БД, от текущего состава полей набора данных, а также от значений свойств некоторых визуальных компонентов, связанных с этим набором, например, сетки DBGrid. Так, при изменении порядка расположения столбцов в компоненте DBGrid соответственно изменяется порядок следования полей набора данных. В связи с этим обращение к какому-либо полю по его номеру в массиве полей может вызвать обращение совсем к другому полю. Поэтому для доступа к полям чаще используются методы FindField И FieldByName.
Функция FindField (const FieldName: String): TField возвращает ДЛЯ набора данных поле, имя которого указывает параметр FieldName. В отличие от номера в массиве полей, имя поля более статично и изменяется реже. Кроме того, имя поля несет большую смысловую нагрузку, чем номер. Если заданное параметром FieldName поле не найдено, то метод FindField возвращает значение Nil. На практике чаще используется метод FieldByName, который отличается от метода FindField тем, что если заданное поле не найдено, то генерируется исключение.
(_____ ЗамечаниеJ
Имя поля, определяемое параметром FieldName, является именем физического поля таблицы БД, заданным при создании таблицы, а не именем (свойством Name) объекта Field, которое создано для этого поля.
92
Часть I. Основы работы с базами данных
Для набора данных Query имя FieldName физического поля можно переопределить в тексте SQL-запроса.
Свойство Fields и методы FindField и FieldByName наиболее часто используются для доступа к значению поля текущей записи совместно с такими свойствами объекта Field, как AsString, Aslnteger, AsFloat или AsBoolean, которые позволяют обращаться к значению поля как к строковому, целочисленному, вещественному или логическому значению соответственно.
Так,в коде
Var x: integer;
Labell.Caption:= Tablel.FieldByName('Name').AsString; x:= Tablel.FieldByName('Number').Aslnteger;
строковое значение поля Name отображается в надписи Labell, а переменной х присваивается целочисленное значение поля Number. Если же поле Number содержит значение, которое нельзя интерпретировать как целое число, то генерируется исключение.