Задание №4. 1. Откройте новое приложение

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.

Задание №4. 1. Откройте новое приложение - student2.ru

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. Каким образом выполняются запросы на вставку и удаление?

Наши рекомендации