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
Контрольные вопросы
1. Как можно связать данные из главной и подчиненной таблиц?
2. Каким образом выполняются запросы на вставку и удаление?