Файл: Практическая работа БД.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 26.05.2021

Просмотров: 854

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

практическая работа № 7

Работа с переменными и массивами

Работа с массивами

Компонент TStringGrid

Порядок выполнения задания

Настройка компонента TStringGrid

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

procedure FormActivate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const

Nmax=10; // Максимальная размерность массива

Type

Mas1 = array[1..Nmax] of extended; {Объявление типа одномерного массива вещественных чисел размерностью Nmax}

Mas2 = array[1..Nmax,1..Nmax] of extended; {Объявление типа двумерного массива вещественных чисел размерностью Nmax*Nmax}

Var

Form1: TForm1;

A : Mas2; // Объявление двумерного массива

B,Y : Mas1; // Объявление одномерных массивов

N,i,j : integer;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);

{Процедура подготовки к началу работы}

begin

N:=3; // Задание размерности массива

Edit1.Text:=IntToStr(N); // Вывод значения N в Edit1

{Задание числа строк и столбцов в таблицах}

StringGrid1.ColCount:=N+1;

StringGrid1.RowCount:=N+1;

StringGrid2.RowCount:=N+1;

StringGrid3.RowCount:=N+1;

{Ввод в левую верхнюю ячейку таблицы названия массива}

StringGrid1.Cells[0,0]:='Массив A:';

StringGrid2.Cells[0,0]:='Массив B:';

StringGrid3.Cells[0,0]:='Массив Y:';

{Заполнение верхнего и левого столбцов поясняющими подписями}

for i:=1 to N do

begin

StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);

StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

{Процедура изменения размерности массива}

begin

try

N:=StrToInt(Edit1.Text);

except

ShowMessage('Ошибочная запись числа '+Edit1.Text);

Edit1.SetFocus;

Exit;

end;

{Задание числа строк и столбцов в таблицах}

StringGrid1.ColCount:=N+1;

StringGrid1.RowCount:=N+1;

StringGrid2.RowCount:=N+1;

StringGrid3.RowCount:=N+1;

{Заполнение верхнего и левого столбцов поясняющими подписями}

for i:=1 to N do

begin

StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);

StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);

end;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

{Процедура расчета вектора Y}

var

s: extended;

begin

{Заполнение массива А элементами из таблицы StringGrid1}

for i:=1 to N do

for j:=1 to N do

begin

if StringGrid1.Cells[j,i]=' ' then

begin

ShowMessage('Ошибка заполнения массива А');

Exit;

end;

try

A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);

except

ShowMessage('Ошибочная запись числа '+StringGrid1.Cells[j,i]);

Exit;

end;

end;

{Заполнение массива B элементами из таблицы StringGrid2}

for i:=1 to N do

begin

if StringGrid2.Cells[0,i]=' ' then

begin

ShowMessage('Ошибка заполнения массива В!');

Exit;

end;

try

B[i]:=StrToFloat (StringGrid2.Cells[0,i]);

except

ShowMessage ('Ошибочная запись числа '+StringGrid2.Cells[0,i]);

Exit;

end;

end;

{Умножение массива А на массив В}

for i:=1 to N do

begin

s:=0;

for j:=1 to N do

s:=s+A[i,j]*B[i];

Y[i]:=s;

{Вывод результата в таблицу StringGrid3}

StringGrid3.Cells[0,i]:=FloatToStrf(y[i],fffixed,6,2);

end;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

{Очищение всех ячеек таблиц перед очередным прогоном программы}

for i:=1 to N do

begin

StringGrid2.Cells[0,i]:=' ';

StringGrid3.Cells[0,i]:=' ';

for j:=1 to N do

StringGrid1.Cells[j,i]:=' ';

end;

end;

end.

Индивидуальные задания

лабораторная работа №

ЛАБОРАТОРНАЯ РАБОТА №

Создание приложений для работы с базами данных На ОСНОВЕ ТЕХНОЛОГИИ bde

Порядок выполнения задания

Рис. 9.- Расположение компонентов на форме

3.Компоненту DBNavigator1:

4.Компоненту DBGrid1:

Рис. 10.- Рабочее окно программы

Компонент DBNavigator служит для управления записями таблицы (перемещение, добавление, удаление). При этом все изменения сохраняются в таблице MainData.DB (свойству Store Defs присвойте значение True).

3.Компоненту DBGrid2:

Можно не менять свойство SQL компонента Query1, а изменить обработчик события для Form1 следующим образом:

end;

Создание параметризованного запроса

Индивидуальные задания

Варианты задач

Индивидуальные задания

Варианты задач

лабораторная работа №

Индивидуальные задания

Варианты задач

TQuery и параметры

Свойство SQL имеет тип TStrings, который означает что это ряд строк, сохраняемых в списке. Список действует так же, как и массив, но, фактически, это специальный класс с собственными уникальными возможностями. В следующих нескольких абзацах будут рассмотрены наиболее часто используемые свойства.


Создание простого запроса

При программном использовании TQuery, рекомендуется сначала закрыть текущий запрос и очистить список строк в свойстве SQL:


Query1.Close;

Query1.SQL.Clear;


Обратите внимание, что всегда можно “безопасно” вызвать Close. Даже в том случае, если запрос уже закрыт, исключительная ситуация генерироваться не будет.

Следующий шаг - добавление новых строк в запрос:

Query1.SQL.Add(‘Select * from Country’);

Query1.SQL.Add(‘where Name = ’’Argentina’’’);


Метод Add используется для добавления одной или нескольких строк к запросу SQL. Общий объем ограничен только количеством памяти на вашей машине.

Чтобы Delphi отработал запрос и возвратил курсор, содержащий результат в виде таблицы, можно вызвать метод:


Query1.Open;

или

Query1.Active:=True;


TQuery и параметры

Delphi позволяет составить “гибкую” форму запроса, называемую параметризованным запросом. Такие запросы позволяют подставить значение переменной вместо отдельных слов в выражениях “where” или “insert”. Эта переменная может быть изменена практически в любое время. (Если используется локальный SQL, то можно сделать замену почти любого слова в утверждении SQL, но при этом та же самая возможность не поддерживается большинством серверов.)

Перед тем, как начать использовать параметризованные запросы, рассмотрим снова одно из простых вышеупомянутых предложений SQL:


Select * from Country where Name = ’’Argentina’’


Можно превратить это утверждение в параметризованный запрос заменив правую часть переменной NameStr:


select * from County where Name = :NameStr


В этом предложении SQL, NameStr не является предопределенной константой и может изменяться либо во время дизайна, либо во время выполнения. SQL parser (программа, которая разбирает текст запроса) понимает, что он имеет дело с параметром, а не константой потому, что параметру предшествует двоеточие ":NameStr". Это двоеточие сообщает Delphi о необходимости заменить переменную NameStr некоторой величиной, которая будет известна позже.

Обратите внимание, слово NameStr было выбрано абсолютно случайно. Использовать можно любое допустимое имя переменной, точно так же, как выбирается идентификатор переменной в программе.

Есть два пути присвоить значение переменной в параметризованном запросе SQL. Один способ состоит в том, чтобы использовать свойство Params объекта TQuery. Второй - использовать свойство DataSource для получения информации из другого DataSet. Вот ключевые свойства для достижения этих целей:


property Params[Index: Word];

function ParamByName(const Value: string);

property DataSource;


Если подставлять значение параметра в параметризованный запрос через свойство Params, то обычно нужно сделать четыре шага:


  1. Закрыть TQuery

  2. Подготовить объект TQuery, вызвав метод Prepare

  3. Присвоить необходимые значения свойству Params

  4. Открыть TQuery

Второй шаг выполняется в том случае, если данный текст запроса выполняется впервые, в дальнейшем его можно опустить.

Вот фрагмент кода, показывающий как это может быть выполнено практически:


Query1.Close;

Query1.Prepare;

Query1.Params[0].AsString := ‘Argentina’;

Query1.Open;


Params - это индексированное свойство, с помощью которого можно получить доступ к переменным в SQL запросе. Например, первой переменной в SQL запросе, можно присвоить определенное значение, адресуя нулевой элемент в массиве Params:


Query1.Params[0].AsString := ‘Argentina’;


Если параметризованный SQL запрос выглядит так:


select * from Country where Name = :NameStr,


то конечный результат (т.е. то, что выполнится на самом деле) - это следующее предложение SQL:


select * from Country where Name = “Argentina”


Все, что произошло, это переменной :NameStr было присвоено значение "Аргентина" через свойство Params. Таким образом, Вы закончили построение простого утверждения SQL.

Приложение П7

Графический инструментарий

1. Класс TFont

С помощью класса TFont создается объект-шрифт для любого графического устройства (экрана, принтера, плоттера и т. п.). Основные свойства класса представлены в табл. П7.1.

Таблица П7.1.

Свойства класса TFont

Свойство

Описание

property Color: TColor;

Цвет шрифта

property FontAdapter: IChangeNotifier;

Поставляет информацию о шрифте в компоненте ActveX  

property Height: Integer;

Высота шрифта в пикселях экрана

property Name: TFontName;

Имя шрифта. По умолчанию имеет значение MS

Sans Serif

property Size: Integer;

Высота шрифта в пунктах (1/72 дюйма). Изменение этого свойства автоматически изменяет свойство Height и наоборот.

property Style: TFontStyles;

Стиль шрифта. Может принимать значение как комбинация следующих признаков: fsBold (жирный), fsltalic (курсив), fsUnderline (подчеркнутый), fsStrikeOut (перечеркнутый)

2.Класс ТРеn

С помощью класса TPеп создается объект-перо, служащий для вычерчивания линий. Основные свойства класса представлены в табл. П7.2.

Таблица П7.2.

Свойства класса ТРеn

Свойство

Описание

property Color: TColor;

Цвет вычерчиваемых пером линий

property Mode: TPenMode;

Определяет способ взаимодействия линий с фоном (см.ниже)

property Style: TPenStyle;

Определяет стиль линий (см. рис. П7.1). Учитывается только для толщины линий 1 пиксель. Для толстых линий стиль всегда ps Solid (сплошная)

property Width: Integer;

Толщина линий в пикселях экрана

Свойство Mode может принимать одно из следующих значений:

 pmBlack

Линии всегда черные. Свойства Color и Style игнорируются

pmWhite

Линии всегда белые. Свойства Color и Style игнорируются

pmNop

Цвет фона не меняется (линии не видны)

pmNot

Инверсия цвета фона. Свойства Color и Style игнорируются

pmCopy

Цвет линий определяется свойством Color пера

pmNotCopy

Инверсия цвета пера. Свойство Style игнорируется

pmMergePenNot

Комбинация цвета пера и инверсионного цвета фона

pmMaskPenNot

Комбинация общих цветов для пера и инверсионного цвета фона. Свойство Style игнорируется

pmMergeNotPen

Комбинация инверсионного цвета пера и фона

pmMaskNotPen 

Комбинация общих цветов для инверсионного цвета пера и фона. Свойство Style игнорируется

pmMerge

Комбинация цветов пера и фона

pmNotMerge

Инверсия цветов пера и фона. Свойство Style игнорируется

pmMask

Общие цвета пера и фона

pmNotMask

Инверсия общих цветов пера и фона

pmXor

Объединение цветов пера и фона операцией XOR

pinNotXor

Инверсия объединения цветов пера и фона операцией XOR


 Стили линий показаны на рис. П7.1.

Рис. П7.1. Стили линий

3. Класс TBrush

Объекты класса TBrush (кисти) служат для заполнения внутреннего пространства замкнутых фигур. Основные свойства класса представлены в табл. П7.3.

Таблица П7.3.

Свойства класса TBrush

Свойство

Описание

property Bitmap: TBitmap;

Содержит растровое изображение, которое будет использоваться кистью для заполнения. Если это свойство определено, свойства Color и Style игнорируются

property Color: TColor;

Цвет кисти

property Style: TBrushStyle;

Стиль кисти


4. Класс TCanvas

Этот класс создает “канву”, на которой можно рисовать чертежными инструментами - пером, кистью и шрифтом. Объекты класса TСаnvas автоматически создаются для всех видимых компонентов, которые должны уметь нарисовать себя. Они инкапсулируют объекты Font, Pen, Brush, а также многочисленные методы, использующие эти объекты. Основные свойства класса представлены в табл. П7.4.

Таблица П7.4.

Свойства класса TCanvas

Свойство

Описание

property Brush: TBrush; property ClipRect: TRect;

Объект-кисть. Определяет текущие размеры области, нуждающейся в прорисовке

property CopyMode: TCopyMode;

Устанавливает способ взаимодействия растрового изображения с цветом фона

property Font: TFont;

Объект-шрифт

property Pen: TPen;

Объект-перо

property PenPos:TPoint;

Определяет текущее положение пера в пикселях относительно левого верхнего угла канвы

property Pixels[X,Y:Integer]: TColor;

Массив пикселей канвы

 

Свойство СopyMode может принимать одно из следующих значений (свойство используется при копировании части одной канвы (источника) в другую (приемник) методом copyRect).

Свойство

Описание

cmBlackness

Заполняет область рисования черным цветом

cmDestInvert

Заполняет область рисования инверсным цветом фона

cmMergeCopy

Объединяет изображение на канве и копируемое изображение операцией and

cmMergePaint

Объединяет изображение на канве и копируемое изображение операцией OR

cmNotSrcCopy

Копирует на канву инверсное изображение источника

cmNotSrcErase 

Объединяет изображение на канве и копируемое изображение операцией OR и инвертирует полученное

cmPatCopy

Копирует образец источника

cmPatInvert

 

Комбинирует образец источника с изображением на канве с помощью операции XOR

cmPatPaint

Комбинирует изображение источника с его образцом с помощью операции OR, затем полученное объединяется с изображением на канве также с помощью OR

cmSrcAnd 

Объединяет изображение источника и канвы с помощью операции AND

cmSrcCopy

Копирует изображение источника на канву

cmSrcErase

Инвертирует изображение на канве и объединяет результат с изображением источника операцией AND

cmSrcInvert

Объединяет изображение на канве и источник операцией XOR

cmSrcPaint

Объединяет изображение на канве и источник операцией OR

cmWhitness

Заполняет область рисования белым цветом


 С помощью свойства pixels все пиксели канвы представляются в виде двухмерного массива точек. Изменяя цвет пикселей, можно прорисовывать изображение по отдельным точкам.

Методы класса представлены в табл. П7.5.

Таблица П7.5.

Методы класса TCanvas

Метод

Описание

procedure Arc(X1, Y1, X2, Y2, ХЗ, Y3, Х4, Y4: Integer);

Чертит дугу эллипса в охватывающем прямо-угольнике (Xl,Yl)-(X2,Y2). Начало дуги лежит на пересечении эллипса и луча, проведенного из его центра в точку (ХЗ,Y3), а конец-на пересечении с лучом из центра в точку (Х4,Y4). Дуга чертится против часовой стрелки.

procedure BrushCopy

(const Dest: TRect;

Bitmap: TBitmap;

const Source: TRect;

Color: TColor);

Копирует часть изображения Source на участок канвы Dest. Color указывает цвет в Dest, который должен заменяться на цвет кисти канвы. Метод введен для совместимости с ранними версиями Delphi. Вместо него следует пользоваться класс-сом Т Image List

procedure Chord(XI, Yl, X2, Y2, X3, Y3,

Чертит сегмент эллипса в охватывающем прямо-угольнике (XI,У1)-(X2,Y2). Начало дуги сегмента лежит на пересечении эллипса и луча, проведен-ного из его центра в точку (X3,Y3), а конец-на пересечении с лучом из центра в точку (X4,Y4). Дуга сегмента чертится против часовой стрелки, а начальная и конечная точки дуги соединяются прямой.

procedure CopyRect (Dest: TRect; Canvas: TCanvas;Source: TRect) ;

Копирует изображение Source канвы Canvas в участок Dest текущей канвы. При этом разнооб-разные специальные эффекты достигаются с по-мощью свойства CopyMode

procedure Draw(X,Y:Integer; Graphic:TGraphic) ;

Осуществляет прорисовку графического объекта Graphic так, чтобы левый верхний угол объекта расположился в точке (X, Y)

procedure DrawFocusRect (const Rect:TRect) ;

Прорисовывает прямоугольник с помощью операции XOR, поэтому повторная прорисовка уничтожает ранее вычерченный прямоугольник. Используется в основном для прорисовки нестандартных интерфейсных элементов при получении ими фокуса ввода и при потере его

procedure Ellipse(XI, Yl, X2, Y2: Integers;

Чертит эллипс в охватывающем прямоугольнике (XI,Yl)-(X2,Y2). Заполняет внутреннее простран-ство эллипса текущей кистью

procedure FillRect(const Rect: TRect);

Заполняет текущей кистью прямоугольную об-ласть Rect, включая ее левую и верхнюю грани-цы, но не затрагивая правую и нижнюю границы

procedure Flood-

Fill(X, Y: Integer;

Color: TColor; Fill Style: TFillStyle);

Производит заливку канвы текущей кистью. Заливка начинается с точки (X,Y) и распрост-раняется вовсе стороны от нее. Если FillStyle= fsSurface, заливка распространяется на все сосе-дние точки с цветом Color. Если FillStyle= fsBorder, наоборот, заливка прекращается на точ-ках с этим цветом

procedure FrameRect(const Rect: TRect);

Очерчивает границы прямоугольника Rect теку-щей кистью толщиной в 1пиксель без заполнения внутренней части прямоугольника

procedure LineTo(X,

Y: Integer);

Чертит линию от текущего положения пера до точки (X,Y)

procedure Lock;

 

Блокирует канву в многопоточных приложениях для предотвращения использования канвы в других по токах команд

procedure MoveTo(X,Y: Integer);

Перемещает перо в положение (X,Y) без вычер-чивания линий

procedure Pie(XI,

Yl, X2, Y2, X3, Y3,

X4, Y4: Longint);

 


Рисует сектор эллипса в охватывающем прямоугольнике (XI,Yl)-(X2,Y2). Начало дуги лежит на пересечении эллипса и луча, проведен-ного из его центра в точку (X3,Y3), а конец - на пересечении случом из центра в точку (X4,Y4). Дуга чертится против часовой стрелки. Начало и конец дуги соединяются прямыми с ее центром

procedure Polygon.

(Points: array of TPoint) ; 

 

Вычерчивает пером многоугольник по точкам, за-данным в массиве Points. Конечная точка соеди-няется с начальной и многоугольник заполняется кистью. Без заполнения используйте -Polyline

procedure Polyline

(Points: array of TPoint);

Вычерчивает пером ломаную прямую по точкам, заданным в массиве Points

procedure Rectan

gle(XI, Yl, X2, Y2:

Integer);

Вычерчивает и заполняет прямоугольник (XI,Yl)-S(X2,Y2). Для вычерчивания без заполнения используйте FrameRect или Polyline

procedure Refresh;

Устанавливает в канве умалчиваемые шрифт и кисть

procedure RoundRect(Xl, Yl, X2,Y2, X3, Y3: Inte ger) ;

Вычерчивает и заполняет прямоугольник (XI,Yl)- (X2,Y2) со скругленными углами. Прямоугольник (XI,Yl)-(X3,Y3) определяет дугу эллипса для округления углов

procedure Stretch Draw (const Rect:TRect; Graphic: TGraphic );

Вычерчивает и при необходимости масштабирует графический объект Graphic так, чтобы он полностью занял прямоугольник Rect

function TextExtent

(const Text:String): TSize;

Возвращает ширину и высоту прямоугольника, охватывающего текстовую строку Text

function TextHeight

(const Text: String): Integer;

Возвращает высоту прямоугольника, охватыва-ющего текстовую строку Text 

procedure TextOut(X,

Y: Integer; const Text: String) ;

Выводит текстовую строку Text так, чтобы левый

верхний угол прямоугольника, охватывающего текст, располагался в точке (X, Y)

procedure TextRect(Rect: TRect; X, Y:

Integer; const Text:

String) ;

Выводит текстовую строку Text так, чтобы левый верхний угол прямоугольника, охватывающего текст, располагался в точке (х, Y). Если при этом какая-либо часть надписи выходит из границ прямоугольника Rect, она отсекается и не будет видна

function TextWidth

(const Text:String): Integer;

Возвращает ширину прямоугольника, охватываю-щего текстовую строку Text 

function TryLock:

Boolean; 

Пытается заблокировать канву. Если она не заб-локирована другим потоком команд,-True, в про-тивном случае ничего не делает и возвращает False

procedure Unlock;

Уменьшает на 1 счетчик блокировок канвы