- •7.1 Организация доступа к данным средствами технологии ado
- •7.2 Обзор средств доступа к базам данных
- •7.3 Краткая характеристика указанных компонентов
- •7.4 Создание простого приложения с базой данных
- •7.5 Основные свойства и методы компонента Table
- •7.6 Основные свойства и методы компонента Query1
- •7.7 Выполнение поиска по некоторому параметру
- •7.8 Использование языка запросов sql для поиска
- •7.9 Заполнение таблиц
- •7.10 Использование модуля данных
- •7.11 Создание отчетности
7.9 Заполнение таблиц
Приведенная на рисунке 5 форма удобна тем, что с ее помощью можно в таблицу (например, tovar) вносить данные и в ней можно отображать сведения о каждом элементе таблицы, редактировать данные.
Для создания окна редактирования данных необходимо поместить на форму компоненты доступа к данным – TDBEdit, TDBText. Эти компоненты автоматически редактируют указанные поля в базе данных. Чтобы компонент видел данные из нужного поля, в свойстве DataSource нужно указать нужную таблицу (DataSource1), как делали раньше, а в свойстве DataField указать имя поля, которое надо редактировать.
Создать форму для ввода данных в таблицу Tovar.
Поместить на форму компоненты DataSource (источник данных ) – вкладка Data Access,ADO Table (таблица) – вкладка ADO,. DBNavigator – вкладка DataControls
Настроить свойства компонента DataSource .
Свойство значение
DataSet ADO Table1
Настроить свойства компонента ADO Table1.
Свойство значение
Connection ADOConnection1
TableName Tovar
Рисунок 5 – Окно заполнения данных
Поместить на форму компоненты Tlabel, как показано на рисунке 5. В свойстве Caption записать: код товара, описание товара, цена. Рядом с надписями поместить компоненты TDBEdit (окно редактирования) со страницы DataControls.. Установить связь, задав следующие значения свойств, рисунок 6:
Компонент DBEdit:
Свойство значение
DataSource DataSource1
DataField имя поля
Запустить приложение. На навигаторе щелкнуть на кнопке «Insert record» (ввести новую строку). Ввести данные в DBEdit. Щелкнуть на кнопке «Post edit». Данные будут введены в таблицу tovar базы данных.
Рисунок 6 – Окно свойств DBEdit
Рассматривается более сложная задача - ввод данных в таблицу orders. Добавить в таблицу orders поле stoim_tovar. Вручную заполняются поля: id_order, id_cust, id_tovar, date_order, qty_order (соответственно номер счета, код клиента, код товара, дата счета и количество товара).
При нажатии на кнопках «Название товара», «Цена товара», «Стоимость товара» появляются соответственно на форме значения этих полей. Эти значения определяются в зависимости от введенного кода товара в таблицу orders. Стоимость товара рассчитывается по формуле– цена товара * количество товара.
Поместить на форме компоненты DBEdit (рисунок 7), как в предыдущем примере, для полей таблицы orders. Поместить 3 компонента DBText для значений Название товара, Цена товара, Стоимость товара, три кнопки. Выполнить настройку полей аналогично предыдущей задаче.
Компонент DataSource2 (источник данных ) – вкладка Data Access,
Свойство значение
DataSet ADOQuery1
Компонент DataSource3 (источник данных ) – вкладка Data Access,
Свойство значение
DataSet ADOQuery2
Компонент DBText1 связывается с полем title_tovar
Свойство значение
DataSource DataSource2
DataField title_tovar
Аналогично компонент DBText2 связывается с полем price_tovar (можно это выполнить программно).
Рисунок 7
При нажатии на кнопку, например, «Название товара», считывается код товара, по нему определяется название товара. Выполняется следующая последовательность действий.
Вводится переменная t типа AnsiString, которая принимает значение из поля id_tovar.
По коду товара из таблицы Tovar определяется название товара – из запроса.
Аналогично определяется цена товара – второй запрос.
Определение названия товара
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString t;
ADOQuery1->SQL->Clear();
t=DBEdit3->Text;
ADOQuery1->SQL->Add("select title_tovar from tovar where id_tovar='"+t+"'");
ADOQuery1->Open();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
Определение цены товара
void __fastcall TForm1::Button2Click(TObject *Sender)
{ AnsiString t;
ADOQuery2->SQL->Clear();
t=DBEdit3->Text;
ADOQuery2->SQL->Add("select price_tovar from tovar where id_tovar='"+t+"'");
DBText2->DataField="price_tovar";
ADOQuery2->Open();
}
Вычисление стоимости товара и заполнение поля stoim_tovar
void __fastcall TForm1::Button3Click(TObject *Sender)
{
DBText3->Caption=IntToStr(StrToInt(DBText2->Caption)*StrToInt(DBEdit5->Text));
DBEdit6->Text=DBText3->Caption;
}
В некоторых случаях приложению требуется получить список имен полей таблицы, связанной с ADOQuery. Это может быть сделано методом GetFieldNames, который загружает список имен полей в любую переменную типа TStrings, передаваемую в него в качестве аргумента. Например, оператор
ADOQueryl->GetFieldNames(ComboBoxl->Items);
загружает в выпадающий список ComboBoxl имена полей таблицы, связанной с ADOQueryl.
