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

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

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

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

Добавлен: 26.05.2021

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

Скачиваний: 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 и параметры

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

Математические Функции

Таблица П3.1.

Основные математические функции

Функция

Значение

Abs(n)

Абсолютное значение n

Sqrt(n)

Квадратный корень из n

Sqr(n)

Квадрат n

Exp(n)

Экспонента n

Ln(n)

Натуральный логарифм n

Rardom(n)

Случайное целое число в диапазоне от 0 до n-1 (перед первым обращением к функции необходимо вызвать функцию Randomize, которая выполнит инициализацию программного генератора случайных чисел)

Sin (a)

Синус выраженного в радианах угла а

Cos(a)

Косинус выраженного в радианах угла a

Arctan(a)

Арктангенс выраженного в радианах угла а

ArcCos(X)

Арккосинус выраженного в радианах угла Х

ArcSin(X)

Арксинус выраженного в радианах угла Х

Cotan(X)

Котангенс выраженного в радианах угла Х

Tan(X)

Тангенс выраженного в радианах угла Х

LogN(Base, X)

Логарифм от X при основании Base

Power(Base,X)

Возведение числа Base в степень X

Последние пять функций становятся доступными программе только после ссылки на модуль Math после SysUtils в предложении Uses.

Все функции и входящие в них переменные имеют тип Extended. Величина угла тригонометрических функций должна быть выражена в радианах. Для преобразования величины угла из градусов в радианы используется формула (а*3.1415256) /180, где:

а-величина угла в градусах; 3.1415926- число "ПИ". Вместо константы 3.1415926 можно использовать стандартную именованную константу pi.

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

Отладка программ

В Delphi имеется мощный встроенный отладчик, значительно упрощающий отладку программ. Основными инструментами отладки являются точки контрольного останова и окно наблюдения за переменными.

1. Точки контрольного останова

Точка контрольного останова определяет оператор в программе, перед выполнением которого программа прервет свою работу и управление будет передано среде Delphi. Точка останова задается с помощью опции View|Debug windows|Breakponts (в версиях до Delphi 5.0. Run|Add|Breakpont).

Окно точек останова (рис.П4.1) содержит список всех установ-ленных в проекте точек, перед выполнением которых происходит прекращение работы программы и управление получает среда Delphi.

Для добавления новой точки следует щелкнуть по окну правой кнопкой мыши и выбрать опцию Add. В этом случае появляется окно, с помощью которого можно указать положение добавляемой точки:

FileName-определяет имя файла;

Line number-номер строки от начала файла (в момент появления окна оно содержит файл и строку с текстовым курсором). В строке Condition можно указать условие останова в виде логического выражения (например, MyValue=Мах-Value-12), а в строке Pass count-количество проходов программы через контрольную точку без прерывания вычислений.

Рис. П4.1- Окно контрольных точек останова и добавления новой точки

2. Окно наблюдения

Наблюдать за состоянием переменной или выражения можно с помощью специального окна, вызываемого опцией View|Debug windows|Watches (в версиях до Delphi 5.0. View|Watches).


Окно наблюдения (рис. П4.2) используется в отладочном режиме для наблюдения за изменением значений выражений, помещенных в это окно. Для добавления нового выражения щелкните по окну правой кнопкой мыши и выберите опцию New Watch. В строке Expression введите выражение. Окно Repeat count определяет количество показываемых элементов массивов данных; окно Digits указывает количество значащих цифр для отображения вещественных данных; переключатель Enabled разрешает или запрещает вычисление выражения. Остальные элементы определяют вид представления значения. Замечу, что в последних версиях Delphi вы можете просмотреть в отладочном режиме текущее значение любой переменной, если укажите на нее курсором: значение появится в ярлычке рядом с курсором.

Рис.П 4.2- Окно наблюдения и окно добавления в него нового выражения

3. Принудительное прерывание работы программы

Если программа запущена из среды Delphi, ее работу можно прервать в любой момент. C помощью клавиш Ctrl+F2, опцией Run | Program pause или, наконец, установив точку контрольного останова в той части программы, которая выполняется в данный момент или будет выполнена.

4. Трассировка программы

Перед исполнением оператора, в котором установлена точка контрольного останова, работа программы будет прервана, управление получит среда Delphi, a в окне наблюдения отразится текущее значение наблюдаемых переменных и/или выражений. Теперь программист может прослеживать работу программы по шагам с помощью клавиш F7 и F8 или инструментальных кнопок. При нажатии F8 будут выполнены запрограммированные в текущей строке действия, и работа программы прервется перед выполнением следующей строки текста программы. Замечу, что контрольная точка останова выделяется по умолчанию красным цветом, а текущая прослеживаемая строка-синим. Если программа остановлена в контрольной точке, т.е. когда текущая строка совпадает со строкой останова, строка выделяется красным цветом, Признаком текущей строки является особое выделение строки в служебной зоне слева в окне редактора (см. рис. П4.3).

Рис. П 4.3- Фрагмент окна редактора в режиме отладки

Кстати, чтобы установить/снять точку контрольного останова, достаточно щелкнуть мышью по служебной зоне слева от нужной строки или установить в эту строку текстовый курсор и нажать F5.

При нажатии F7 среда выполняет те же действия, что и при нажатии F8, однако, если в текущей строке содержится вызов подпрограммы пользователя, программа прервет свою работу перед выполнением первого исполняемого оператора этой подпрограммы, т.е. клавиша F7 позволяет прослеживать работу вызываемых подпрограмм.

После трассировки нужного фрагмента программы можно продолжить нормальную ее работу, нажав клавишу F9.


5. Действия в точках прерывания

В Delphi 5 и 6 с любой точкой можно связать одно или несколько действий. Для этого нужно активизировать окно точек останова, вызвать его локальное меню (щелчок правой кнопкой) и выбрать продолжение Properties. В появившемся окне свойств щелкнуть по кнопке Advanced (рис. П4.4).


В нижней части окна имеется панель Actions, с помощью которой и определяются действия для точки останова, указанной в верхней части окна.

Break - простой останов перед выполнением помеченного оператора.

Ignore subsequent exceptions -если переключатель установлен, игнорируются все возможные последующие исключения в текущем отладочном сеансе до очередной точки останова, в которой, возможно, это действие будет отменено.

Handle subsequent exceptions-после установки этого переклюю-чателя отменяется действие предыдущего переключателя и возобнов-ляется обработка возможных исключений.

С помощью Log message вы можете указать произвольное сообщение, связанное с точкой останова, а с помощью Eval expression-вычислить некоторое выражение и поместить его результат в это сообщение.


6. Группировка точек прерывания

В Delphi 5 и б имеется возможность объединения точек останова в группы. Для этого используется все то же окно рис. П4.4: в строке Group следует указать имя группы, к которой принадлежит точка, а в строках Enable Group и Disable Group соответственно разрешить или запретить действие всех точек останова, относящихся к соответствующей группе.

Рис. П4.4 -Окно связывания точки останова с действием


7. Вычисление выражений и изменение значений

С помощью окна Run/Evaluate/Modify (рис. П4.5) можно узнать значение любого выражения или установить в переменную другое значение. Это окно вызывается в режиме отладки после нажатия Ctrl+F7.

Рис. П4.5- Окно прослеживания изменения значении

Это окно - модальное, т. е. оно прерывает отладку программы до тех пор, пока не будет закрыто. В строке Expression можно написать имя переменной или интересующее вас выражение. После щелчка по кнопке Evaluate в поле Result появится текущее значение переменной (выражения). Если в Expression содержится имя переменной, одновременно становится доступной кнопка Modify, а в строке New value повторяется текущее значение переменной. Если изменить эту строку и нажать Modify, в переменную будет помещено новое значение, которое и будет использоваться при дальнейшем прогоне программы (если определяется значение выражения, кнопка Modify и строка New value будут недоступны).

В Delphi 5 и 6 используются также дополнительные кнопки этого окна Watch и Inspect. Если вы щелкните по первой из них, выражение (переменная) из окна Evaluate будет перенесено в окно наблюдений watch, щелчок по второй отображает выражение (переменную) в специальном окне Inspect.

8. Ведение протокола работы программы

В ряде случаев бывает неудобно или невозможно пользоваться пошаговой отладкой программ. Если вы, например, установите точку останова в подпрограмме прорисовки сетки TDBGrid, программа после останова не сможет нормально продолжить свою работу, т. к. в этом случае она будет пытаться восстановить экран и вновь будет остановлена и т. д. В таких ситуациях вам могут помочь контрольные точки, которые не прерывают работу программы, а лишь помещают некоторую информацию в специальный файл трассировки. Для реализации такой точки раскройте окно Run|Add Breakpoint|Source Breakpoint (см. рис. П4.4), уберите флажок в переключателе Break и напишите сообщение в строке Log message. Вы можете также в строке Eval expression указать некоторое выражение, которое будет вычислено и вместе с сообщением помещено в протокол работы программы. Этот протокол можно просмотреть в любой момент (в том числе и после завершения прогона программы) с помощью опции View|Debug Windows|Event Log.


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

Особенности прикладных программ, разработанных в среде Delphi,

для работы с базами данных (БД)

Характерной особенностью созданных с помощью Delphi программ для работы с БД является непременное использование в них BDE (процессор реляционной базы данных Borland Database Engine, включенный в состав Delphi), которая осуществляет роль связующего моста между программой и БД (рис. П5.1).

Рис. П5.1.-Использование BDE как средства низкоуровневого взаимодействия программы и БД

BDE берет на себя всю низкоуровневую работу по обеспечению клиентской программы нужными ей данными, поэтому в общем случае взаимодействие программы с данными происходит следующим образом:

BDE не является частью программы. В зависимости от типа СУБД она может размещаться на машине клиента или сервера.

Обычно между программой и BDE располагается слой компонентов, существенно упрощающих разработку программ. Невизуальные компоненты осуществляют непосредственную работу с BDE, и три из них (TTable, TQuery, TStoredProc) служат наборами данных, в то время как визуальные компоненты отображают поставляемые им данные и служат для создания удобного интерфейса пользователя. Между наборами данных и визуальными компонентами обязательно располагаются компоненты TDataSource, играющие роль клапанов, открывающих или закрывающих потоки данных, которыми обмениваются источники с визуальными компонентами (рис. П5.2).













а)

б)

Рис. П5.2.-Некоторые поддерживаемые в Delphi типы БД:

а) файл- серверная БД

б) локальная БД

В локальных БД данные располагаются на машине клиента. В файл- серверных БД данные располагаются на сетевом файл-сервере Локальный вариант может обеспечить лишь однопользователький режим доступа к данным. В файл-серверных БД данные располагаются на сетевом файл-сервере, который может быть доступен одновременно нескольким пользователям.

Данные в БД хранятся в единственном экземпляре, а каждый клиент в каждый момент времени работает с некоторой локальной копией данных, причем управление данными целиком возлагается на клиентские программы. Именно они должны заботиться о синхронизации локальных копий данных на каждом клиентском месте с содержимым основной (и единственной) базы данных.

При выполнении запроса к БД, расположенной на файловом сервере, в действительности происходит запрос к локальной копии данных на компьютере пользователя. Поэтому перед выполнением запроса данные в локальной копии в полном объеме обновляются из реальной БД. Так, если таблица БД состоит из 10000 записей, а для выполнения запроса нужно только 10 записей, все равно клиенту передаются все 10000 записей. Таким образом, серьезно загружается сеть.

Рис. П5.3 - Клиент-серверные БД.

В архитектуре клиент-сервер между BDE и базой данных появляется важное промежуточное звено – сервер БД (специальная программа, управляющая базой данных) (рис. П5.3).


Клиент формирует запрос к серверу на языке запросов SQL (Structured Query Language – структурированный язык запросов), являющемся промышленным стандартом для реляционных баз данных. SQL-сервер обеспечивает интерпретацию запроса, его выполнение, формирование результата и выдачу этого результата клиенту. При этом ресурсы клиентского компьютера не участвуют в физическом выполнении запроса: клиентский компьютер лишь отсылает запрос к серверной БД и получает результат, после чего интерпретирует его необходимым образом и представляет пользователю. По сети передаются только те данные, которые нужны клиенту.

При выполнении запросов сервером существенно повышается степень безопасности данных, поскольку правила целостности данных определяются на сервере и являются едиными для всех приложений, использующих эту БД. Мощный аппарат транзакций (обновлений), поддерживаемый SQL-серверами, блокирует одновременное изменение одних и тех же данных различными пользователями и предоставляет возможность откатов к первоначальным значениям при внесении в БД изменений, закончившихся аварийно.

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

Объект TQuery (запрос)

При использовании TTable, возможен доступ ко всему набору записей из одной таблицы. В отличие от TTable, TQuery позволяет произвольным образом (в рамках SQL) выбрать набор данных для работы с ним. Во многом, методика работы с объектом TQuery похожа на методику работы с TTable, однако есть свои особенности.

Свойство SQL объекта TQuery

Сокращение SQL означает Structured Query Language - Язык Структурированных Запросов, и обычно произноситься либо как "Sequel" либо " Ess Qu El”. Однако, как бы Вы его ни произносили, SQL - это мощный язык БД, который легко доступен из Delphi, но который отличается от родного языка Delphi. Delphi может использовать утверждения SQL для просмотра таблиц, выполнять объединение таблиц, создавать отношения один-ко-многим, или исполнить почти любое действие, которое могут сделать ваши основные инструменты БД. Delphi поставляется с Local SQL, так что Вы можете выполнять запросы SQL при работе с локальными таблицами, без доступа к SQL серверу.

Вы может создать SQL-запрос используя компонент TQuery следующим способом:

  1. Назначите Псевдоним (Alias) DatabaseName.

  2. Используйте свойство SQL чтобы ввести SQL запрос типа
    “Select * from …..”.

  3. Присвойте свойству Active объекта TQuery значение True.

Объект TQuery один из наиболее полезных и гибких компонентов, доступных в Delphi. С ним Вы сможете воспользоваться всей мощью, предоставляемой лидерами среди промышленных SQL серверов, вроде InrterBase, Oracle или Sybase.

Свойство SQL - вероятно, самая важная часть TQuery. Доступ к этому свойству происходит либо через Инспектор Объектов во время конструирования проекта (design time), или программно во время выполнения программы (run time).

Интересней, конечно, получить доступ к свойству SQL во время выполнения программы, чтобы динамически изменять запрос. Например, если требуется выполнить три SQL запроса, то не надо размещать три компонента TQuery на форме. Вместо этого можно разместить один и просто изменять свойство SQL три раза. Наиболее эффективный, простой и мощный способ - сделать это через параметризованные запросы.