Программирование баз данных в Delphi 7: Запись данных в таблицу (Append, TTable,AssignFile, FieldByName)
Сегодня мы загрузим в нашу базу данных товары из текстового файла. Этот тактовый файл вы можете скачать здесь.
Создаем новый проект, кидаем на форму компонент TTable, он у нас на закладке DBE*:
Затем кладем на форму кнопочку (TButton). Напомню, она у нас на закладке Standart*:
Сменим заголовок и идентификатор кнопки. Пусть выглядит кнопка как "Старт", а свойство Name будет равно btnStart.
Затем переключимся на компонент TTable, что бы выбрать у него свойство DatabaseName*:
Свойство DatabseName установим в StorePrj, а свойство TableName нужно сделать wares.db.
Теперь пишем обработчик события OnClick кнопочки:
procedure TfrmLoader.btnStartClick(Sender: TObject);
var VF:textfile; s:string;
begin
Table.Open;
//связываем файловую переменную (типа дискриптор) с файлом
AssignFile(VF,'d:\1\wares.txt'); //это разовая программа, поэтому не время тратим
//на всякие диалоги выбора файлов и прочие "красивости"
// открываем файл
Reset(VF);
//в цикле читаем файл
while not(eof(VF)) do
begin
ReadLn(VF,s); //читаем наименование товара
Table.Append; // добавляем запись в базу данных
Table.Fields.FieldByName('name').Value:=s; //записываем в поле
ReadLn(VF,s); // читаем цены
Table.Fields.FieldByName('price').Value:=StrToInt(s);
end;
CloseFile(VF);
Table.Close;
end; |
Запускаем программу и нажимаем кнопочку "Старт"
После нажатия на кнопку программа "подумаем" пару секунд, и все, товары загружены. Посмотреть их мы сможем пую мри помощи нашей заготовки программы складского учета, которую мы делали на предыдущем уроке:
Если у вас загруженные товары не показывает, то нужно в процедуре acWaresListExecute строку
CreateMDIChild(copy(SessionParams[i],6,Length(SessionParams[i])-5)+'/wares.db', WaresFields);
заменить нас строку
CreateMDIChild(copy(SessionParams[i],6,Length(SessionParams[i])-5)+'\wares.db', WaresFields);
Программирование баз данных в Delphi 7: Используем SQL-запрос для создания справочника складов (TQuery, select, from, join)
Сегодня мы продолжим создание справочников. На этот раз будет создавать более сложный справочник: "Склады". В отличии от справочника "Товар" он будет связан с другим справочником - "Сотрудники" (employees.db). И так, сначала мы организуем доступ с справочнику сотрудников, аналогично тому, как это мы делали на уроке 8.5.1.- создаем новые событие в TActionList, связываем с меню и туллбаром, в обработчик копируем содержимое обработчика события acWarsList, но в нем открываем файл employees.db. Если вы не знаете где взять пример, скачайте его здесь. Да, и еще, давайте сразу добавим перевод полей на русский язык, перепишем процедуру TfrmStoreForm.FormCreate:
procedure TfrmStoreForm.FormCreate(Sender: TObject);
begin
SetLength(WaresFields, 6);
WaresFields[0].Name:='Id';
WaresFields[0].Caption:='Код';
WaresFields[1].Name:='Name';
WaresFields[1].Caption:='Товар';
WaresFields[2].Name:='Price';
WaresFields[2].Caption:='Цена';
WaresFields[3].Name:='Fio';
WaresFields[3].Caption:='Фамилия Имя Отчество';
WaresFields[4].Name:='Address';
WaresFields[4].Caption:='Адрес';
WaresFields[5].Name:='Phone';
WaresFields[5].Caption:='Телефон';
end; |
Вот что в итоге у нас должно получиться:
А теперь, воспользовавшись знаниями, полученными на уроке 8.1 создадим базу данных stores.db (склады), со следующими полями:
Поле |
Тип |
Назначение |
Id |
Autoincrement |
Уникальный идентификатор склада |
Name |
String 30 |
Наименование склада |
Storeman |
Number |
УИД сотрудника кладовщика |
Полученную таблицу заполним чем нибудь, используя Database Desktop. В поле Storeman записываем Id какого нибудь сотрудника (убедимся, что это существующий Id)*:
А теперь создаем новую форму. Обзовем ее frmStores. Положим на форму компонент TQuery с закладки BDE, его имя с Query1 исправим на Query:
Так же положим на форму TDataSource и TDBGrid*:
Свяжем между собой эти компоненты, как мы это делали на уроке 8.2. В компоненте TQuery свойство DatabaseName установим StorePrj. А вот свойство TableName не ищите, его там нет. Вместо него есть свойство SQL. В его поле редактирования имеется кнопочка с тремя точками*:
Нажмем на эту кнопку. У нас вылезет диалог редактирования текста. Введем туда вот такой текст:
select
stores.id AS Id,
stores.Name AS Name,
employees.Fio AS FioStoreman
from stores left join employees on employees.id=stores.storeman |
Это мы создали SQL-запрос, или говоря иными словами, мы написали запрос к базам данным на специальном языке запросов, который называется SQL. Слово select в данном тексте означает создание выборки. Эта команда имеет вот такой синтаксис:
select [список полей] from [список таблиц и их соединения]
Поля в списке полей перечисляются через запятую. Синтаксис описания поля такой:
[Имя таблицы].[Имя поля] AS [Имя поля в выборке]
После последнего поля из списка запятая не ставиться.
После слова from у нас идет список участвующих в запросе таблиц. в нашем случае их две stores и employees. Они связаны между собой: поле storeman из таблицы stores однозначно соответствует полю id из таблицы employees. Столбцы таблицы stores расположены слева, к ним добавляются столбцы таблицы employees. Это правило в данном SQL запросе описывается так:
from stores left join employees on employees.id=stores.storeman
А теперь давайте сделаем так, что бы эту форму можно было открыть из программы. Нам всего то осталось создать новый пункт меню, новый Action, кнопочку туллбара и связать их. Это мы уже умеем.
И, последний штрих, добавляем в раздел uses основного модуля программы имя модуля формы и пишем обработчик вновь экшена acStoresList:
procedure TfrmStoreForm.acStoresListExecute(Sender: TObject);
var frm:TfrmStores;
begin
frm:=TfrmStores.Create(self);
frm.Query.Active:=true;
frm.Show;
end; |
Все, запускаем программу, и что же мы видим:
|