Лаб раб ПОА №4
.pdfРАЗРАБОТКА ПРИЛОЖЕНИЙ БАЗ ДАННЫХ В СРЕДЕ DELPHI
Содержание
1.Цель работы
2.Теоретическая часть
2.1.Общие положения
2.2.Типы данных
2.3.Механизм BDE и другие средства Delphi для работы с базами данных
2.4.Компоненты Delphi для работы с базами данных
3.Практическая часть
3.1.Задание
3.2.Создание псевдонима базы данных
3.3.Создание таблиц базы данных
3.4.Разработка приложения
3.5.Разработка приложения для работы с двумя таблицами
3.6.Уточнение списка полей и настройка параметров столбцов в DBGrid
3.7.Определение визуальных компонентов для работы с полями записи набора данных
3.8.Реализация связи Master-Detail между наборами данных
3.9.Использование компонента Query для формирования набора данных из нескольких таблиц
1. |
Цель работы |
1. |
Знакомство со средствами Delphi для разработки приложений, использующих базы данных. |
2. |
Получение навыков разработки приложений в среде Delphi, использующих базы данных. |
2. |
Теоретическая часть |
2.1. Общие положения
База данных (БД) представляет собой совокупность специальным образом организованных данных, хранимых в памяти вычислительной системы и отображающих состояние объектов и их взаимосвязей в рассматриваемой предметной области. Организована в виде одного или более файлов данных, создание, модификация и обращение к которым осуществляется посредством системы управления базой данных (СУБД).
Система управления базой данных (СУБД) – система программного обеспечения, предназначенная для создания, ведения и совместного использования БД многими пользователями. Такая система имеет средства обработки на языке базы данных, которые позволяют обрабатывать обращения к БД, поступающие от прикладных программ (приложений) и (или) конечных пользователей, а также поддерживать целостность базы данных.
Приложение, использующее СУБД, представляет собой программу или комплекс программ, обеспечивающих автоматизацию обработки информации для прикладной задачи. Такие приложения могут создаваться в среде или вне среды СУБД – с помощью системы программирования, использующей средства доступа к БД, к примеру, Delphi или С++ Builder. Приложения, разработанные в среде СУБД часто называют приложениями СУБД, а приложения, разра-
ботанные вне СУБД, – внешними приложениями.
Для работы с базой данных зачастую достаточно средств СУБД и не нужно использовать приложения, создание которых требует программирования. Приложения разрабатывают глав-
1
ным образом в случаях, когда требуется обеспечить удобство работы с БД неквалифицированным пользователям или интерфейс СУБД не устраивает пользователей.
При работе с таблицами локальных БД базой данных считается каталог на диске, в котором хранятся файлы таблиц БД, индексов, примечаний (мемо-полей) и т.д. Для хранения одной таблицы создается отдельный файл. Такие же отдельные файлы создаются для хранения индексов таблицы и мемо-полей.
Для обращения к БД удобно не просто указывать путь доступа к таблицам БД, а использовать для этого некий заменитель – псевдоним, называемый алиасом (alias). Он регистрируется в файле конфигурации конкретного компьютера и позволяет исключить из программы прямое указание пути доступа к базе данных. Такой подход дает возможность располагать данные в любом месте, не перекомпилируя при этом программу. Кроме пути доступа, в алиасе указываются тип базы данных, языковый драйвер и много другой управляющей информации.
2.2. Типы данных
СУБД преимущественно применяются для решения финансово-экономических задач. При этом, независимо от модели представления, в базах данных использовались следующие основные типы данных:
–числовые. Примеры значений данных: 0.43, 328, 2Е+5;
–символьные (алфавитно-цифровые). Примеры значений данных: «пятница», «строка», «программист»;
–даты, задаваемые с помощью специального типа "Дата" или как обычные символьные данные. Примеры значений данных: 1.12.97, 23/2/1999.
В разных СУБД эти типы могут несущественно отличаться друг от друга по названию, диапазону значений и виду представления. В новых областях применения используются специализированные системы обработки данных, например, геоинформационные, обработки видеоизображений и т. д. В связи с этим в традиционных СУБД были введены новые типы данных. К числу сравнительно новых типов данных можно отнести следующие:
–временные и дата-временные, предназначенные для хранения информации о времени и/или дате. Примеры значений данных: 31.01.85 (дата), 9:10:03 (время), 6.03.1960 12:00 (дата и время);
–символьные переменной длины, предназначенные для хранения текстовой информации большой длины, например, документа;
–двоичные, предназначенные для хранения графических объектов, аудио- и видеоинформации, пространственной, хронологической и другой специальной информации. Например, в MS ACCESS таким типом является тип данных «Поле объекта OLE», который позволяет хранить в БД графические данные в формате ВМР (Bitmap) и автоматически их отображать при работе с БД;
–гиперссылки (hiperlinks), предназначенные для хранения ссылок на различные ресурсы (узлы, файлы, документы и т. д.), находящиеся вне базы данных, например, в сети Internet, корпоративной сети intranet или на жестком диске компьютера. Примеры значений данных:
http:\\www.chat.ru, ftp:\\chance4u.room.соm.
В современных СУБД с различными моделями данных могут использоваться все перечисленные типы данных. Например, в формате Paradox, используются следующие типы данных (таблица 1).
2.3. Механизм BDE и другие средства Delphi для работы с базами данных
BDE. Особенностью программ, созданных с помощью Delphi и предназначенных для работы с БД, является их зависимость от специальной библиотеки программ, которая называется
BDE (Borland Database Engine – машина баз данных фирмы Borland).
2
Т а б л и ц а 1
Тип поля |
Обозна- |
Хранимые значения |
|
чение |
|
Alpha |
A |
Символьные значения длиной до 255 символов |
Number |
N |
Числовые значения с плавающей точкой в диапазоне |
|
|
- 10307...+10308. Точность до 15 значащих цифр |
Money |
$ |
Аналогичен типу Number но предназначен для хранения денежных |
|
|
сумм. Число знаков после запятой по умолчанию – 2. При показе |
|
|
значения выводится знак денежной единицы |
Short |
S |
Целочисленные значения в диапазоне -32767…32 767 |
LongInteger |
I |
Целочисленные значения в диапазоне -2147483648 … 2147483647 |
BCD |
# |
Числовые значения, в том числе и дробные, в двоично-десятичном |
|
|
формате. Применяется в вычислениях, где важна точность (финан- |
|
|
совые, научные приложения). |
Date |
D |
Значения даты (в диапазоне от 01.01.9999 до н. э. до 31.12.9999) |
Time |
T |
Значения времени |
Timestamp |
@ |
Значения даты и времени |
Memo |
M |
Строковые значения длиной более 255 символов. Максимальная |
|
|
длина не ограничена. От 1 до 240 символов могут храниться вместе |
|
|
с таблицей БД; остальные хранятся в виде Memo-файла (*.МВ) |
Formatted |
F |
Аналогично мемо-полю, но может хранить форматированные тек- |
Memo |
|
сты, в которых фрагменты текста представлены разным шрифтом, |
|
|
цветом и стилями |
Graphic Fields |
G |
Графические изображения в формате файлов .ВМР, .РСХ, .ТIF, |
|
|
.GIF, .ЕРS, которые при хранении преобразуются к формату .ВМР. |
|
|
Хранятся отдельно от основной таблицы БД |
OLE |
O |
Информация в форматах, поддерживаемых технологией ОLЕ |
|
|
(Object Linking and Embedding) фирмы Microsoft |
Logical |
L |
Логические значения (“True”, “False”). |
Autoincrement |
± |
Автоинкрементное поле. Значения доступны только для чтения. |
|
|
При добавлении новой записи значение поля вычисляется автома- |
|
|
тически, чтобы в одной и той же таблице не было одинаковых зна- |
|
|
чений. Значения поля из удаленных записей повторно не исполь- |
|
|
зуются |
Binary |
B |
Произвольные двоичные значения. Должны интерпретироваться |
|
|
приложениями пользователя. Хранятся в отдельных от основной |
|
|
таблицы .МВ-файлах. Длина не определена |
Bytes |
Y |
Произвольные двоичные значения, интерпретируемые приложе- |
|
|
ниями пользователя, длиной от 1 до 240 байт. Хранятся вместе с |
|
|
таблицей БД |
3
Эта библиотека предназначена для низкоуровневого доступа к данным самых различных форматов. Она должна устанавливаться на каждом компьютере, который использует приложения для работы с БД, написанные на Delphi. Выполняет действия по доступу к данным и проверке их правильности.
BDE может работать с таблицами самых распространенных СУБД, как файл-серверных
(dBase, Paradox, FoxPro, Clipper), так и клиент-серверных (InterBase, MS SQL Server, Oracle
и др.). В BDE имеется собственный интерпретатор языка SQL, что позволяет создавать запросы не только к серверам БД, но и к таблицам файл-серверных СУБД.
SQL Links. Драйверы для работы с удаленными «промышленными»СУБД, такими как
Sybase, MS SQL Server, Oracle. Для работы с родным SQL-сервером Borland InterBase устанав-
ливать SQL Links нет необходимости.
BDE Administrator. Утилита для установки псевдонимов (имен) баз данных, параметров БД и драйверов баз данных на конкретном компьютере. Параметры БД, определяемой псевдонимом, действуют только для этой БД; параметры, установленные для драйвера БД, действуют для всех БД, использующих драйвер. Кроме этого, в утилите BDE Administrator можно произвести установку общих для всех БД параметров (формат даты и времени, форматы представления числовых значений, используемый языковой драйвер и т.п.).
Database Explorer (SQL Explorer). Утилита для конфигурирования псевдонимов БД, просмотра структуры БД, таблиц БД, выдачи запросов к БД, создания словарей данных.
Database Desktop (DBD). Средство для создания, изменения и просмотра БД. Эта утилита прежде всего ориентирована на работу с таблицами локальных СУБД (Paradox и dBase). В ряде случаев может использоваться и для работы с таблицами удаленных СУБД. Например, из DBD можно с некоторыми ограничениями создавать таблицы БД, работающих под управлением InterBase, Oracle, и просматривать их содержимое.
Data Module. Невизуальные компоненты типа TDataModule применяются для централизованного хранения наборов данных в приложении, работающем с БД. Этот компонент контейнерного типа (подобно TForm), хранящий в себе другие компоненты. Такими компонентами для Data Module могут служить только невизуальные компоненты БД – компоненты типа «набор данных» (TTable, TQuery) и компоненты типа TDataSource, являющиеся промежуточными компонентами, связывающими между собой компоненты типа «набор данных» и визуальные компоненты.
2.4. Компоненты Delphi для работы с базами данных
Вобщем случае приложение состоит из визуальных и невизуальных компонентов работы
сБД, компонентов выдачи отчетов (которые представляют собой разновидность визуальных компонентов), а также модулей данных.
Невизуальные компоненты служат для соединения приложения с таблицами БД. Имеют прямой выход на BDE, которая в свою очередь, контактирует с БД. Они расположены на странице компонентов Data Access палитры компонентов.
TSession. Содержит информацию о текущем сеансе работы с БД; позволяет определить список доступных БД и список активных БД, открывать, отыскивать и закрывать БД, управлять параметрами.
TDataSource. Служит промежуточным звеном в цепочке «Набор данных – TDataSource –
Визуальные компоненты для работы с данными”. Позволяет устанавливать некоторые пара-
метры набора данных, устанавливать состояние и отслеживать изменения в наборе данных. TTable. Реализует набор данных, источником данных для которого является одна таблица
БД. Содержит множество методов, свойств и событий, посредством которых можно выполнять над набором данных целый спектр операций.
TQuery. Реализует набор данных, источником данных для которого являются одна или несколько таблиц БД. Структура записи набора данных, состав набора данных определяются
4
SQL-запросом. Кроме выдачи набора данных, используется для групповых операций обновления, добавления или удаления в таблицах БД, а также может выполнять любые действия.
Визуальные компоненты служат для представления данных из невизуальных компонентов, т.е. служат целям обеспечения интерфейса пользователя при работе с данными. Предназначены для визуализации записей наборов данных (TDBGrid) или отдельных полей текущей записи набора данных (TDBEdit, TDBText). Компоненты расположены на странице Data Controls.
TDBText. Показывает только для чтения значение поля текущей записи НД.
TDBEdit. Обеспечивает просмотр и изменение значения поля текущей записи НД. Поля – любого типа, кроме полей комментариев и BLOB.
TDBMemo. Позволяет просматривать и корректировать значение поля комментария в режиме текстового редактора.
TDBImage.– Позволяет просматривать графические поля, заносить в них содержимое. TDBListBox.– Применяется, когда нужно выбрать значение поля из предустановленного
списка значений; значения показываются в виде строк в списке фиксированного размера. Содержимое списка определяется свойством Items.
TDBComboBox.– Для тех же целей, что и TDBListBox, но список выпадающий. TDBLookupListBox. Применяется для выбора значения поля из списка значений, который
формируется из определенного столбца другого набора данных. Высота списка фиксирована. TDBLookupComboBox. Применяется для тех же целей, что и TDBLookupListBox, но список
комбинированного вида (выпадающий).
TDBGrid. Показывает содержимое полей НД в табличном виде, когда записям соответствуют строки, полям – столбцы.
3. Практическая часть
3.1. Задание
Требуется создать в среде Delphi приложение, предназначенное для учета поступающих в цех заготовок. База данных состоит из двух таблиц: справочника “Заготовки” и операционной таблицы “Поступление заготовок”. Таблицы необходимо создать и хранить в формате Paradox. Отношение между таблицами “один-ко-многим”, то есть одному виду заготовки в таблице “Заготовки” может соответствовать более одной записи в таблице “Поступление заготовок”. Рабочая структура таблиц приведена на рисунке.
Таблица “Заготовки”
Смысл |
Название |
|
Тип |
Длина |
|
|
|
|
|
Номер заготовки |
N_Zag |
|
Строка |
12 |
Название заготовки |
Name |
|
Строка |
20 |
Материал |
Material |
|
Строка |
20 |
Примечание |
Prim |
|
Мемополе |
10 |
Изображение заготовки |
Picture |
|
Графическое поле |
|
|
Таблица “Поступление заготовок” |
|
||
|
|
|
|
|
Смысл |
Название |
|
Тип |
Длина |
|
|
|
|
|
Номер прихода |
N_Prih |
Автоинкремент |
|
|
Номер заготовки |
N_Zag |
Строка |
12 |
|
Дата поступления |
Dat_Post |
Дата |
|
|
Количество |
Kol_vo |
Целочисленный |
|
5
Для таблицы “Заготовки” необходимо построить первичный ключ по полю N_Zag а для таблицы “Поступление заготовок” – по полю N_Prih. Для реализации ссылочной целостности “Поступление заготовок” с таблицей “Заготовки” необходимо построить внешний ключ по полю N_Zag. Для сортировки записей при их выводе в приложение необходимо создать индекс по полям Dat_Post, N_Zag.
3.2 Создание псевдонима базы данных
База данных должна находиться в каталоге “C:\Projects\Sklad_n”, а имя ее псевдонима будет “Sklad_n” (где n – номер подгруппы). Выберите в главном меню Delphi элемент
Database\Explore. Выберите в главном меню Database Explorer пункт меню Object|New. В поя-
вившемся окне оставьте тип создаваемой БД без изменений (STANDARD).
В левом окне Database Explorer будет видна строка с именем STANDARD1. Измените это имя на “Sklad_n”. Для этого щелкните мышью на названии БД и введите новый текст. В правом окне приведены параметры БД. Измените параметр РАТН, указывающий путь к каталогу, в котором расположена БД.
Запомните определение псевдонима, для чего в левом окне администратора БД необходимо щелкнуть по имени псевдонима правой кнопкой мыши и во всплывающем меню выбрать элемент Арр1у. Затем следует выйти из утилиты Database Explorer. Cоздание псевдонима завершено и к нему можно будет обращаться из других утилит и приложений.
3.3. Создание таблиц базы данных
3.3.1 Объявление полей. Запустите утилиту Database Desktop (DBD) и установите рабочий псевдоним, с которым утилита будет работать по умолчанию. Для этого нужно выбрать элемент главного меню File|Working Directory и в выпадающем списке Aliases выбрать имя псев-
донима Sklad_n.
Выберите элемент главного меню File|New|Table. В появившемся окне Create Table установите тип создаваемой таблицы (Paradox 7). После этого появится окно определения структуры таблицы БД.
Определите поля, входящие в таблицу “Заготовки”. Введите N_Zag в столбец Field Name. Чтобы определить тип поля, щелкните мышью по столбцу Туре и нажмите клавишу пробела. В ответ на это будет выдан список типов полей, из которых необходимо произвести выбор нужного типа.
Для того, чтобы определить тип поля N_Zag, следует указать Alpha и затем в столбце Size
– значение 12. В столбце Key поместите звездочку, означающую, что данное поле входит в состав первичного ключа. Для этого нажмите любой символ на клавиатуре. Повторное нажатие любого символа снимает отметку звездочкой в столбце Key.
6
Введите определения и других столбцов таблицы “Заготовки”. Для каждого поля определите требование обязательного заполнения поля значением. Для этого, переходя от поля к полю, включите переключатели Required Field.
3.3.2 Запоминание таблицы. Чтобы запомнить сохраненную таблицу на диске, следует нажать кнопку Save As. Затем в появившемся окне следует указать имя таблицы. При желании можно указать каталог или псевдоним, отличающиеся от принятых по умолчанию. Напомним, что по умолчанию принимается рабочий каталог или каталог, определяемый рабочим псевдонимом.
После того, как будет определено имя создаваемой таблицы (Zagotovki.DB) в каталоге С:\Projects\Sklad_n (он назначен псевдониму Sklad_n, используемому в качестве рабочего) будет создан файл Zagotovki.DB и файлы индексов с соответствующими расширениями.
3.3.3. Изменение структуры существующей таблицы. Чтобы изменить структуру таб-
лицы, выберите элемент меню Table|Restructure. Вслед за этим будет показано диалоговое окно для определения структуры таблицы. Закройте диалоговое окно.
3.3.4 Определение индексов. Определите структуру таблицы “Поступление заготовок” (п.3.1). Всем полям необходимо назначить атрибут Required Field (требование обязательного существования значения у поля на момент его запоминания в БД), кроме поля N_Prih (заполнение последнего значением производится автоматически при запоминании новой записи поскольку это поле автоинкрементное).
Создайте индекс по полям Dat_Post, N_Zag. Для этого в комбинированном списке Table Properties (в правом верхнем углу окна) нужно выбрать элемент Secondary Indexes.
Чтобы определить новый индекс, нажмите кнопку Define. В появившемся диалоговом окне Fields содержится список полей определяемой таблицы. Поле Index Fields предназначено для хранения полей, входящих в создаваемый индекс. Чтобы скопировать конкретное поле из списка Fields в список Index Fields, нужно нажать кнопку с изображением правой стрелки. Последовательность добавления полей в список важна, она определяет порядок чередования полей в списке. После внесения соответствующих полей в список Index Fields, нажмите кнопку Оk. Будет запрошено имя индекса. Следует ввести имя Sort_DatPost_NZag и нажать Оk.
7
Не рекомендуется составлять название индекса только из имен полей, поскольку такой способ именования индексов используется автоматически при создании ссылочной целостности между таблицами.
Сохраните созданную таблицу под именем Postuplenie.DB.
3.3.5 Определение ссылочной целостности между таблицами. Как известно из поста-
новки задачи, таблицы “Заготовки” и “Поступление заготовок” находятся в отношении “один- ко-многим”, то есть с одной записью в таблице Zagotovki может быть связано несколько записей по приходу того же товара в таблице Postuplenie. В качестве поля связи выступает поле N_Zag, присутствующее в обеих таблицах.
Определите ссылочную целостность между данными таблицами, которая в Paradox определяет, во-первых, связь между таблицами, а во-вторых, вид каскадных воздействий.
Для этого необходимо с помощью утилиты DBD открыть таблицу Postuplenie (элемент меню File|Table|Open) и войти в режим изменения структуры таблицы (Table|Restructure). В выпадающем списке Table Properties выберите элемент Refrential Integrity и нажмите кнопку Define. В появившемся диалоговом окне в списке Fields показаны поля таблицы Postuplenie, а в списке Tables – таблицы базы данных Sklad_n.
Выберите в списке Fields поле N_Zag и нажмите кнопку с изображением стрелки вправо. Название N_Zag будет записано в поле Child Fields (поле внешнего ключа дочерней таблицы).
Выберите в списке Table таблицу Zagotovki и нажмите кнопку с изображением стрелки влево. В поле Parents Key (ключ родительской таблицы) будут показаны поля из первичного ключа таблицы Zagotovki. В данном случае это поле N_Zag.
Переключатели Update rules определяют вид каскадных воздействий на таблицу Postuplenie при изменении значения поля связи в таблице Zagotovki или при удалении записи в таблице Zagotovki:
Cascade – каскадные изменения и удаления подчиненных записей в таблице Postuplenie; Prohibit – запрет на изменение поля связи или удаление записи в таблице, если для данной записи есть связанные записи в таблице.
Выберите Cascade и нажмите кнопку Ok.
Будет запрошено имя (в Paradox ссылочные целостности именуются). Введите имя, например Zagotovki_Postuplenie_Integrity, и нажмите кнопку Ok. Теперь имя созданной ссылочной целостности будет помещено в список.
8
Сохраните изменения в таблице Postuplenie (кнопка Save) и заново войдите в режим рест-
руктуризации таблицы Postuplenie (Table|Restructure). В выпадающем списке Tables properties
выберите элемент Secondary indexes (индексы таблицы, кроме индекса, построенного по определению первичного ключа). В списке индексов можно будет увидеть новый индекс с именем N_Zag (по полю N_Zag). Этот индекс построен автоматически по неявному определению внешнего ключа при создании ссылочной целостности.
Завершите реструктуризацию и закройте утилиту DBD.
3.4 Разработка приложения
Создадайте в каталоге С:\Projects\Sklad_n подкаталог Program_1, в котором будут храниться файлы разработанного приложения.
Запустите Delphi. Воспользуйтесь формой, создаваемой средой Delphi при запуске. В палитре компонентов на странице Data Access выберите мышью невизуальный компонент Table и поместите его на форме.
Установите свойства компонента Table в инспекторе объектов. Значение свойства DatabaseName (псевдоним БД) в Sklad_n при помощи выпадающего списка или введя его вручную. Установите значение свойства TableName (имя таблицы БД) в Zagotovki.DВ при помощи выпадающего списка. После этого установите значение свойства Active в Тruе. Произойдет реальное связывание компонента Table (он по умолчанию имеет имя Table1) с реально существующей таблицей Zagotovki.DВ.
Расположите в форме компонент DataSource. Установите свойство DataSet (имя набора данных) компонента DataSource в значение Table1 путем выбора из выпадающего списка.
Расположите в форме компонент DBGrid, взяв его из палитры компонентов (страница
Data Controls). Установите свойство DataSource компонента DBGrid в значение DataSource1 (это имя, присваивается Delphi по умолчанию созданному перед этим компоненту DataSource).
Расположите в форме компонент DBMemo. Установите свойство DataSource компонента
DBMemo в значение DataSource1, а свойство DataField в значение Prim.
Расположите в форме компонент DBImage. Установите свойство DataSource компонента
DBImage в значение DataSource1, а свойство DataField в значение Picture.
Выберите элемент главного меню среды Delphi File|Save Project As и сохраните проект в папке С:\Projects\Sklad_n\Program_1\. Сохраните модуль под именем “Main.раs”, а сам проект – под именем “Prog_1.dpr”. После этого запустите приложение и введите данные в таблицу “Заготовки”.
Для заполнения поля Picture воспользуйтесь тем, что компонент DBImage поддерживает работу с буфером обмена Windows, позволяя копировать изображения в буфер и вставлять изображения из буфера. Для выполнения этих действий используются обычные для Windows-
9
программ комбинации клавиш: копирование в буфер – <Ctrl>+<Insert>, удаление из буфера –
<Shift>+<Delete>, вставка из буфера – <Shift>+<Insert>.
Для заполнения поля Picture необходимо выполнить следующие действия:
1.Откройте графический редактор Paint (Пуск|Программы|Стандартные|Paint), не завершая выполнение приложения;
2.Откройте файл Pictures.bmp (пункт меню Файл|Открыть…);
3.Выделите соответствующую схему и скопируйте ее в буфер обмена (пункт меню Правка|Копировать);
4.Вернитесь к выполняемому приложению, щелкните левой кнопкой мыши по компоненте DBImage и вставьте из буфера схему нажатием клавиш <Shift>+<Insert>.
3.5 Разработка приложения для работы с двумя таблицами
Создадайте в каталоге С:\Projects\Sklad_n подкаталог Program_2, в котором будут храниться файлы разработанного приложения. Сохраните модуль в папке С:\Projects\Sklad_n\Program_2\ в файле “Main.раs”, а проект приложения – в файле “Prog_2.dpr”.
Добавьте в приложение компонент Table (с именем Table2) для работы с таблицей Postuplenie базы данных Sklad_n (значения свойств такие же, как у компонента Table1, но свойство TableName ссылается на имя таблицы Postuplenie.DВ). Установите свойство Table2.Active в True. Поместите в форму компонент DataSource (имя по умолчанию DataSource2). Установите свойство DataSet этого компонента в значение Таble2. Разместите в форме компонент DBGrid (имя по умолчанию DBGrid2) и установите его свойство DataSource в значение DataSource2. Сохраните приложение.
Запустите приложение на выполнение. Введите данные в таблицу Postuplenie из компо-
нента DBGrid.
Обратите внимание, значение поля N_Prih формируется автоматически.
10