Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка по Бд.doc
Скачиваний:
7
Добавлен:
16.03.2015
Размер:
1.14 Mб
Скачать
    1. Сводная таблица бд - выбор курсовой работы.

Рассмотрим подробнее работу программы. На главной форме размещены 2 кнопки для подключения / разрыва соединения с базой. Для соединения с базой используется метод Openдля объектов типаQuery(qMain.Openи тд). Для разрыва соединения – методClose.

Список курсовых работ, хранимых в Бд отображается на объекте dbgMain (типа TDBGrid), который связан с таблицейTitleБД компонентамиqMain(TQuery) иdsMain(TDataSource). ЗапросSqlвqMainимеет вид:

Select * from Title.

При этом в компонент qMain включены поля Number, Date_Defence, Student_Family, Mark. В результате выполнения методаOpenна форме отображается краткая информация по работам студентов, хранящихся в БД.

    1. Добавление новых записей в бд

При нажатии на кнопку Добавить запись происходит добавление в БД новой записи. При этом используется объект qUpdate(TQuery) в котором формируется запрос

Insert into Title (<Список полей>) values (<Список значений>).

Список полей содержит все поля таблицы Title, значения для их заполнения берутся из свойствTextкомпонентовTLabelEditзакладки Общие данные. Для формированияsqlзапроса используются следующие строковые переменные:sPole:='';sParam:='';s:=#39;p:= ' , '. В стркеsPoleхранится список полей,sParam– список значений этих полей, переменнаяs– представляет собой символ одиночной кавычки (используется для обрамления строковых значений в спискеsParam, вводится в виде кода #39 таблицы символов из-за конфликта с компиляторомDelphiтак же использующим символ ‘ для ограничения строковых переменных).p– запятая, часто применяемая в записиsqlзапроса. В результате добавление каждого поля выглядит следующим образом:

sPole:=sPole+'Minist, ';

sParam:=sParam+s+leMinist.Text+s+p;

После перечисления всех полей из запроса вырезаются последние запятые:

lPole:=length(sPole);

lParam:=length(sParam);

sPole:=copy(sPole,1,lPole-2);

sParam:=copy(sParam,1,lParam-3);

В результате выполняется следующий запрос (внутри withqUpdatedo):

Sql.Clear;

Sql.Add('Insert into Title ('+sPole+') values ('+sParam+')');

Close;

ExecSql;

После создания записи в таблице Titleсоздаются строки в таблицахZadanie,Part1,Part2,Part3 для этого номера. В дальнейшем выполняется лишь занесение в них значений путем путем изменения значений полей.

    1. Удаление записей из бд

Удаление записи из БД производится выполнением запроса 'Delete from Part1_Time Where Number= '+IntToStr(N), где в переменной Nсодержится номер удаляемой записи. Запрос выполняенся в объектеqUpdate(TQuery) для шести таблиц при нажатии на кнопку Удалить запись.

    1. Общие данные

Выше было отмечено деление формы программы на 2 части и рассмотрена работа с левой частью – выбором курсовой работы из списка работ в БД. Покажем работу с информацией по каждой курсовой. Содержание полей БД располагается на элементах компонента TPageControl. На закладкеtsTitleнаходятся компоненты типаTLableEdit. Вид закладки Общие данные показан на рис 4.

Рис 4. Закладка Общие данные

При нажатии на кнопку Показать в их значения свойства Textкопируются значения полей таблицыTitleБД:

leMinist.Text:=qTitleMinist.AsString;

Следует отметить, что данные поставляются отдельным компонентом qTitle(TQuery) который запрашивает их из таблицыTitleдля выбранной пользователем работы. Выбор пользователя передается при помощи связиqTitle.DataSorce:=dsMain, и фильтрацией записей в таблицеTitleпо номеру выбранной пользователем курсовой работы:Select * from Title where Number=:Number.

При нажатии на кнопку Изменить происходит изменение данных хранящихся в БД в таблице Title. Изменение осуществляется при помощиSqlзапроса

Update Title SET <Имя поля1>= <Значение поля1>, <Имя поля n>= < Значение поля n> Where Number = <Номер записи>

Запрос формируется только для измененных полей:

sSql:='Update Title SET ';

s:=#39; p:=' , '; k:=0; m:=0;

if qTitleMinist.AsString<>leMinist.Text

then begin

sSql:=sSql+' Minist= '+s+leMinist.Text+s+p;

k:=k+1;

end;

l:=length(sSql);

sSql:=Copy(sSql,1,l-3);

if k<>0 then

with qUpdate do begin

N:=qTitleNumber.AsInteger;

Sql.Clear;

Sql.Add(sSql+' Where Number = '+IntToStr(N));

Close;

ExecSql;

Sql.Clear;

Sql.Add('Select * from title');

end;

При работе с закладкой Общие данные работа с БД происходит в виде написания запросов вручную и непосредственной работой с БД. При этом все визуальные компоненты LableEditполучают значения как строковые переменные. Такой подход более трудоемок но позволяет более тонко работать с БД, добавляя например новые записи при помощи тех же визуальных компонентов.