- •Содержание
- •4. 5. Контрольные вопросы....................................................................44
- •7. 1. Краткие теоретические сведения..................................................59
- •8. 1. Краткие теоретические сведения...................................................70
- •Введение
- •1. 1. Главное окно
- •2. Лабораторная работа №1 Тема: Ввод и вывод
- •2. 1. Экранная форма (Form)
- •2. 1. 1. Таблица свойств (Form)
- •2. 2. Кнопка (Button)
- •2. 2. 1. Таблица свойств для Button
- •2. 3. Однострочный редактор (Edit)
- •2. 3. 1. Таблица свойств для Edit
- •2. 4. Контрольные вопросы
- •2. 5. Задания к лабораторной работе
- •3. Лабораторная работа №2 Тема: Программирование алгоритмов линейной структуры
- •3. 1. Классификация типов данных
- •3. 2. Константы
- •“Это начало строки, ” “а это ее продолжение”
- •“Это начало строки, а это ее продолжение”
- •3. 3. Задания к лабораторной работе
- •4. Лабораторная работа №3 Тема: Программирование алгоритмов циклической структуры
- •4. 1. Условный оператор if... Else
- •4. 1. 1. Об условиях в операторе if
- •4. 2. Цикл while
- •4. 3. Цикл do while
- •4. 4. Цикл for
- •4. 5. Контрольные вопросы
- •5. Лабораторная работа №4 Тема: Работа с массивами
- •5. 1. Контрольные вопросы
- •5. 2. Задания к лабораторной работе
- •6. Лабораторная работа №5
- •Изучение утилит Database Desktop (dbd), bd Administrator Использование компонентов tDataModule, tTable, tDataSet
- •6. 1. Краткие теоретические сведения
- •6. 2. Модуль данных
- •6. 3. Доступ к содержимому поля
- •6. 4. Поиск записей
- •6. 5. Фильтры
- •6. 6. Задание
- •6. 7. Ход выполнения работы
- •6. 8. Контрольные вопросы
- •7. Лабораторная работа №6 Тема: Программирование объекта tQuery
- •7. 1. Краткие теоретические сведения
- •7. 2. Задание
- •7. 3. Ход выполнения работы
- •7. 4. Контрольные вопросы
- •8. Лабораторная работа №7 Тема: Создание связей между таблицами
- •8. 1. Краткие теоретические сведения
- •8. 2. Задание
- •8. 3. Ход выполнения работы
- •8. 4. Контрольные вопросы
- •9. Лабораторная работа №8 Тема: Работа с полями
- •9. 1. Краткие теоретические сведения
- •9. 2. Задание
- •9. 3. Ход выполнении работы
- •9. 4. Контрольные вопросы
- •10. Задания к базам данных
7. 4. Контрольные вопросы
1. Как задать параметрический запрос?
2. Как запросы считывать с диска?
3. Как используется функция Format в запросах?
8. Лабораторная работа №7 Тема: Создание связей между таблицами
8. 1. Краткие теоретические сведения
Задать отношение «один-ко-многим» позволяют связанные указатели. Для этого используются свойства MasterSource, MasterField, IndexName объекта TTable. Создать отношение между таблицами можно с помощью объекта TQuery. Объект TQuery имеет свойство DataSource, которое служит для образования связи между объектом и другим набором данных.
В программировании операторов SQL важную роль играет поле RequestLive объекта TQuery. По умолчанию в результате любого запроса возвращается набор данных, доступный только для чтения. Присвоив свойству RequestLive объекта TQuery значение True, можно выполнить активный запрос. Если в запросе используется несколько таблиц, задание свойству RequestLive значение True может привести к нежелательным результатам. Если требуется откорректировать набор данных, полученный в результате сложного SQL-запроса, следует воспользоваться командами Update или Insert. После того как оператор SQL сформирован, его можно выполнить двумя различными способами. Если оператор SQL не будет возвращать данные, то нужно применять команду ExecSQL. Например, для вставки, удаления или изменения данных следует вызывать ExecSQL, а команду Open необходимо применять для выполнения составных операторов select [2].
8. 2. Задание
1. Создайте приложение, в котором при выборе имени текущего заказчика из таблицы Customer, можно было видеть список связанных с ним заказов из таблицы Orders. При выполнении задания использовать свойства объекта TTable.
2. Создайте приложение, в котором при выборе имени текущего заказчика, можно было видеть список связанных с ним заказов. При выполнении задания использовать свойства объекта TQuery.
3. Создайте приложение, в котором в верхней части формы располагается таблица Customer, а под ней набор данных , содержащий записи из связанных таблиц Orders и Items. Связать даннные с помощью таблицы и запроса.
4. Создать приложение, позволяющее вносить изменения в записи и удалять их с помощью запроса.
8. 3. Ход выполнения работы
Задание №1
1. Откройте новое приложение. Создайте модуль данных DMod.
2. В модуль данных поместите по два компонента TTable, TDataSource для таблиц Customer и Orders.
3. Установите значения в свойствах DatabaseName (используемый псевдоним) , TableName (Customer, Orders , Name (tblCustomer и tblOrders ), Active (True) для компонентов TTable. Свяжите каждый из компонентов TTable с источником TDataSource. Компонентам TDataSource присвойте соответственно имена dsCustomer и dsOrders.
4. Щелкните правой кнопкой мыши по объекту tblCustomer . Из контекстного меню выберите команду Fields Editor.
5. Щелкните правой кнопкой мыши по свободному полю, затем выберите команду Add fields и добавьте нужные поля : CustNo, Company, Add1, Add2, City, State, Zip (Таким образом, эти поля будут определены в заголовочном файле модуля данных)
6. Окно редактора полей не закрывайте и перенесите в сторону. Перейдите в основную форму разместите в верней части объект TPanel. Включите в модуль основной формы модуль данных
7. Затем поочередно перетащите поля из редактора полей. Сразу будут создаваться по два объекта TDBEdit, TLabel. Разместите их как показано на рисунке.
8. Также поместите в форму объект DBNavigator. Определите ему свойства: DataSource –dsCustomer (это свойство было определено объекту DataSource, связанному с таблицей Customer, VisibleButtons –оставьте значение True только для First, Prior, Next, Last.
9. В форму поместите компонент TDBGrid. Установите для него в свойстве DataSource значение dsOrders.
10. Теперь установите связь между таблицами.
11. Установите в свойстве MasterSource объекта tblOrders значение dsCustomer (имя объекта DataSource для таблицы Orders).
12. Установите значение в свойстве MasterFields . После щелчка в конце строки свойства MasterFields появляется окно Field Link Designer. Выберите в списке AvailableIndexes (Доступные индексы) значение CustNo. Затем щелкните на CustNo в списках Detail Fields и Master Fields. Щелкните на кнопке Add. Оба выбранных поля появятся в списке Joined Fields (Связанные поля). Закройте окно щелчком на кнопке ОК.
13. В свойстве IndexName установите значение СustNo (или ByCustNo, т.е. введите имя индекса).
14. Запустите приложение на выполнение.
Задание №2
1. Откройте новое приложение.
2. Поместите в модуль данных (DMod) два объекта TQuery, два объекта TDataSource.
3. Установите для объекта TQuery в свойстве DatabaseName значение используемого псевдонима, в свойстве Name – значение. например, sqlCustomer, sqlOrders , в свойстве SQL
для первого объекта (sqlCustomer) : select * from Customer
для второго объекта (sqlOrders) select * from Orders where CustNo= :CustNo
В свойстве DataSource объекта sqlOrders (на стороне “многие”) установите значение dsCustomer (источник данных на стороне “один “). в свойстве Active –значение True; т.е. вместо того , чтобы использовать свойство Params для присвоения значения переменной вручную , это значение выбирают из другой таблицы.
4. Перейдите в форму. Включите модуль данных в программу.
На форме разместите два объекта TDBGrid. Подключите их к источнику данных: DBGrid1 к dsCustomer, DBGrid2- к dsOrders.
5. Также поместите в форму объект DBNavigator. Определите ему свойства: DataSource –dsCustomer (это свойство было определено объекту DataSource, связанному с запросом sqlCustomer, в свойстве VisibleButtons –оставьте значение True только для First, Prior, Next, Last
6. Запустите приложение. Убедитесь в его работоспособности.
Задание №3
1. Откройте новое приложение.
2. Поместите в модуль данных компоненты TTable (1), TQuery (1), два компонента TDataSource.
3. Установите свойства для объекта TTable: DatabaseName-используемый псевдоним, TableName –Customer, Name- tblCustomer, Active- True.
4. Объекту TDataSource установите свойства Name –dsCustomer, DataSet- tblCustomer.
5. Для объекта TQuery установите свойства: Database-алиас, Name –Query1, SQL :
select
O.CustNo, O.OrderNo, O.SaleDate,
L.PartNo, L.Discount, L.Qty
from
Orders O,Items L
where
O.CustNo= :CustNo and
O.OrderNo=L.OrderNo
в свойстве DataSource –dsCustomer, Active –True.
6. Объекту TDataSource установите свойства Name –dsOrders, DataSet- Query1.
7. Перейдитев в форму.Сохраните модуль данных под именем Dmod .Включите модуль данных в программу.
7. На форме разместите два объекта TDBGrid. Подключите их к источнику данных: DBGrid1 к dsCustomer, DBGrid2- dsOrders.
8. В форму поместите объект DBNavigator. Определите ему свойства: DataSource –dsCustomer В свойстве VisibleButtons –оставьте значение True только для First, Prior, Next, Last
Запустите приложение. Убедитесь в его работоспособности
Задание №4
1. Откройте новое приложение. Создайте модуль данных (DMod) и поместите в него три компонента TQuery и один компонент TDataSourse.
2. Для первого компонента TQuery установите значения в свойстве DatabaseName значение используемого псевдонима, свойстве Name –CountryQuery, SQL- select * from country, Active- True, RequestLlive- false.
3. Для компонента TDataSource установите значения в свойствах: Name –CountrySource, DataSet –CountryQuery.
4. Для второго компонента TQuery установите значения в свойствах : DatabaseName - значение псевдонима, Name- InsertQuery, SQL –
insert
into Country (Name, Capital, Continent, Area, Population)
values (:Name, :Capital, :Continent, :Area, :Population)
Active –false. Убедитесь, что в свойстве Params –заданы имена переменных.
5. Для третьего компонента TQuery установите значения в свойствах : DatabaseName - значение псевдонима, Name- DeleteQuery, SQL –
delete from Country
where Name = :Name
Active -false
6. Включите модуль данных в основной.
7. Расположите в форме Form1 (SQL Insert) в верхней части компонент TPanel с двумя кнопками TBitBtn, в нижней части сетку TDBGrid.
8. Задайте свойства для панели Align- alTop
9. Для первой кнопки задайте свойство Caption- Insert, Name –bbInsert, Glyph –выберите изображение.
10. Для второй кнопки установите свойство Caption- Delete, Name –bbDelete, Glyph –выберите изображение.
11. Для сетки установите свойство Align- alClient и выберите из списка источник данных. (DMod->CountySource)
12. Для модуля данных используется следующий код [3]:
///////////////////////////////////////
// File: DMod1.cpp
#include <vcl\vcl.h>
#pragma hdrstop
#include "DMod1.h"
#pragma resource "*.dfm"
TDMod *DMod;
__fastcall TDMod::TDMod(TComponent* Owner)
: TDataModule(Owner)
{
}
void TDMod::FakeRefresh()
{
TBookmark Bookmark = CountryQuery->GetBookmark();
CountryQuery->Close();
CountryQuery->Open();
CountryQuery->GotoBookmark(Bookmark);
CountryQuery->FreeBookmark(Bookmark);
}
void TDMod::AutoInsert(void)
{
InsertQuery->Prepare();
InsertQuery->Params->Items[0]->AsString = "Израйль";
InsertQuery->Params->Items[1]->AsString = "Тель-Авив";
InsertQuery->Params->Items[2]->AsString = "Азия";
InsertQuery->Params->Items[3]->AsFloat = 0.0;
InsertQuery->Params->Items[4]->AsFloat = 1.0;
InsertQuery->ExecSQL();
//CountryQuery->Refresh();
FakeRefresh();
}
void TDMod::Delete(void)
{
AnsiString S("Delete " + CountryQuery->Fields->Fields[0]->AsString + "?");
if (MessageDlg(S, mtConfirmation,
TMsgDlgButtons() << mbYes << mbNo, 0) != ID_YES)
return;
DeleteQuery->Prepare();
DeleteQuery->Params->Items[0]->AsString = CountryQuery->Fields->Fields[0]->AsString;
DeleteQuery->ExecSQL();
//CountryQuery->Refresh();
FakeRefresh();
}
Заголовочный файл:
#ifndef DMod1H
#define DMod1H
#include <vcl\Classes.hpp>
#include <vcl\Controls.hpp>
#include <vcl\StdCtrls.hpp>
#include <vcl\Forms.hpp>
#include <vcl\DBTables.hpp>
#include <vcl\DB.hpp>
#include <Db.hpp>
class TDMod : public TDataModule
{
__published:
TQuery *InsertQuery;
TQuery *DeleteQuery;
TQuery *CountryQuery;
TDataSource *CountrySource;
private:
void FakeRefresh();
public:
virtual __fastcall TDMod(TComponent* Owner);
void AutoInsert(void);
void Delete(void);
};
extern TDMod *DMod;
#endif
12. Определите для кнопок процедуры нажатия [3]:
#include <vcl\vcl.h>
#pragma hdrstop
#include "Main.h"
#include "DMod1.h"
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::bbInsertClick(TObject *Sender)
{
DMod->AutoInsert();
}
void __fastcall TForm1::bbDeleteClick(TObject *Sender)
{
DMod->Delete();
}
///Заголовочный файл
//
#ifndef MainH
#define MainH
#include <vcl\Classes.hpp>
#include <vcl\Controls.hpp>
#include <vcl\StdCtrls.hpp>
#include <vcl\Forms.hpp>
#include <vcl\DBGrids.hpp>
#include <vcl\Grids.hpp>
#include <vcl\ExtCtrls.hpp>
#include <vcl\Buttons.hpp>
class TForm1 : public TForm
{
__published:
TDBGrid *DBGrid1;
TPanel *Panel1;
TBitBtn *bbInsert;
TBitBtn *bbDelete;
void __fastcall bbInsertClick(TObject *Sender);
void __fastcall bbDeleteClick(TObject *Sender);
private:
public:
virtual __fastcall TForm1(TComponent* Owner);
};
extern TForm1 *Form1;
#endif