Главная страница

00.2 Уч-мет пос МПиС d4 (1). Лабораторная работа Формирование статистической таблицы с возможностью сортировки, фильтрации и группировки данных 4


Скачать 2.1 Mb.
НазваниеЛабораторная работа Формирование статистической таблицы с возможностью сортировки, фильтрации и группировки данных 4
Дата09.10.2022
Размер2.1 Mb.
Формат файлаdocx
Имя файла00.2 Уч-мет пос МПиС d4 (1).docx
ТипЛабораторная работа
#722618
страница5 из 9
1   2   3   4   5   6   7   8   9

2 ФУНКЦИОНАЛ ЯЗЫКА ВЫСОКОГО УРОВНЯ

Лабораторная работа № 5.
Подключение к локальной базе данных зерез
ADO



Как базу данных Access подключить к Delphi?

Для начала запустим Delphi. Создадим новое приложение File New Application. На главную форму добавляем следующие компоненты:1

  • TDBGrid

  • TDataSource

  • TADOConnection

  • TADOQuery

Итак, теперь по компонентам:

  • TDBGrid (на вкладке DataControls) предназначен для отображения данных БД;

  • TDataSource (на вкладке Data Access) предназначен для связи сетки отображения данных с БД;

  • TADOConnection (на вкладке ADO) предназначен для подключения БД по определенному провайдеру;

  • TADOQuery (на вкладке ADO) предназначен для получения результатов из нашей БД.

Далее необходимо создать базу данных в MS Access с полями:

  • ФИО – строковый тип данных (fio);

  • оценка – числовой тип данных (oz).

Даем имя Student, сохраним БД, заполните таблицу какими-нибудь данными. Теперь «свяжим» необходимые компоненты, которые находятся на главной форме:

  • TADOQuery в свойстве Connection связываем с TADOConnection и из выпадающего списка выбираем имя компонента;

  • TDataSource в свойстве DataSet связываем с TADOQuery и из выпадающего списка выбираем имя компонента;

  • TDBGrid в свойстве DataSource связываем с TDatasource и из выпадающего списка выбираем имя компонента.

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

Далее выделяем компонент TADOConnection и в свойстве LoginPromt ставим False. Делаем для того, чтобы при подключении к БД не запрашивался пароль, дальше в свойстве ConnectionString нажимаем на кнопку с …, появляется окно (рис. 11).


Рис. 11. Окно подключения к внешней базе данных


В окне нажимаем на кнопку Build…, появляется (рис. 12).


Рис. 12. Окно выбора типа подключения


В данном окне выбираем провайдера, а именно Microsoft Jet 4.0 OLE DB Provaider и нажимаем кнопку Далее.


Рис. 13. Окно администрирвоания


В окне указываем путь к БД и имя пользователя (по умолчанию Admin). Если БД находится в корневом каталоге с программой, то в данном поле достаточно указать имя с расширением, а если еще в подкаталоге, то указывается примерно так BD\mydb.mdb (рис 13).

Осталось нажать кнопку ОК и в свойстве компонента TADOConnection – Mode выбрать из выпадающего списка cmShareDenyNone.

Подключение организовано теперь осталось только отобразить данные в таблице. Для этого в событии главной формы OnCreate напишем следующее:
procedureTForm1.FormCreate(Sender:TObject);

begin

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT * FROM Student');

ADOQuery1.Active:=True;

end;
Запрашиваем поля с данными и активируем запрос, чтобы данные отобразились с помощью свойства Active.
Рассмотрим далее работу с компонентами, а также некоторые свойства. Попробуем сделать небольшие запросы к БД и добавлять, редактировать информацию, удалять и перемещаться в таблице по записям.

Воспользуемся компонентом TDBGrid. Для удобства нажмем двойным щелчком левой кнопкой мыши на компоненте и в появившемся окне создаем 2 поля, нажав на кнопку Add new. Затем, выбрав первой поле в свойстве FildName, прописываем вручную fio, в том же свойстве для второго поля прописываем oz. Затем переходим в свойство Title раскрываем и в подсвойстве Caption для 1-го поля указываем ФИО, а для 2-го поля указываем Оценка. Затем в свойстве компонента TDBGrid раскрываем свойство Options и в подствойстве dgEditing установлеваем False, а в подсвойстве dgRowSelect установливаем True. dgEditing - запрещаем редактирование в самой таблице, а dgRowSelect этим свойством выделяется вся строка в таблице. На главную форму приложения «установливаем» следующие компоненты (рис. 14).


Рис. 14. Полученная форма


Далее на кнопку Добавить напишем следующий код:
procedure TForm1.Button1Click(Sender: TObject);

begin

try

if (Trim(Edit1.Text)='') or (Trim(Edit2.Text)='') then

begin

exit;

end;

ADOQuery1.Insert;

ADOQuery1.FieldByName('fio').AsString:=Edit1.Text;

ADOQuery1.FieldByName('oz').AsInteger:=StrToInt(Edit2.Text);

Edit1.Clear; Edit2.Clear;

except

on e:Exception do

end;

end;
Здесь самой главное – это Insert. То есть вставляем новую строку в таблицу. FieldByName – указываем в какое поле вставляем информацию и AsType – необходимо указать тип данных, которые вставляем.

На кнопку Удалить добавим следующий код:
procedure TForm1.Button2Click(Sender: TObject);

begin

try

ifApplication.MessageBox('Delete?','ADO',MB_YESNO)=IDYES then

begin

ADOQuery1.Delete;

end;

except

on e:Exception do

end;

end;
Здесь метод Delete, то есть удаляем запись из таблицы на которой стоит указатель. На кнопку Редактировать пропишем следующий код:

procedureTForm1.Button3Click(Sender: TObject);

begin

try

ADOQuery1.Edit;

ADOQuery1.FieldByName('fio').AsString:=Edit1.Text;

ADOQuery1.FieldByName('oz').AsInteger:=StrToInt(Edit2.Text);

except

on e:Exception do

end;

end;

Здесь метод Edit, который ставит текущую строку в режим редактирование, а дальше точно также, как и с добавлением, редактирование и добавление также можно написать с помощью запросов.

Перед тем как редактировать на событие DBGrid OnCellClick напишем получение данные в поля, чтобы могли отредактировать потом, то есть чтобы пользователь видел какие данные находились до редактирования:
procedure TForm1.DBGrid1CellClick(Column: TColumn);

begin

try

Edit1.Text:=ADOQuery1.FieldByName('fio').AsString;

Edit2.Text:=IntToStr(ADOQuery1.FieldByName('oz').AsInteger);

except

on e:Exception do

end;

end;
Здесь почти точно также, как и в добавлении, только делаем все наооборот, присваиваем значения из таблицы в поля.

На кнопку Вниз добавим следующий код:
ADOQuery1.Last;
Метод Last означает, что переместимся на последнюю запись нашей таблицы.

На кнопку Обновить добавляем следующий код:
ADOQuery1.Refresh;
Метод Refresh означает, что обновляем данные в таблице и соответственно обновляются.

На кнопку Вверх добавим следующий код:
ADOQuery1.First;
Метод First означает, что перейдем на первую запись в таблице/

На кнопку Далее пропишем следующий код:
ADOQuery1.Next;
Метод Next означает, что будем проходить последовательно по записям вниз.

На кнопку Назад пропишем следующий код:
ADOQuery1.Prior;
Метод Prior означает, что будем проходиться последовательно по записям таблицы вверх.

Далее после редактирования, добавления данных необходимо сохранить, добавляем кнопку Сохранить на событие OnClick:
try

ADOQuery1.Active:=True;

ADOQuery1.Post;

except

on e:Exception do

end;
Метод Post сохраняет измененные данные в таблице.

Далее идут у кнопки с небольшими запросами, на кнопке Вывести всех с оценками 10 по событию OnClick добавим следующий код:
try

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT * FROM Student WHERE oz=10');

ADOQuery1.Active:=True;

except

on e:Exception do

end;
Здесь идет обычный запрос с условием, условие задается с помощью конструкции Where. Здесь указываем какие записи выводить. Метод Clear - очищает все, что было в SQL, а ADD - добавляет текст SQL.

Далее на кнопке Вывести все фамилии, в которых присуствует Иван добавим следующий код:
try

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT * FROM Student WHERE fio LIKE ''%Иван%''');

ADOQuery1.Active:=True;

except

on e:Exception do

end;
Здесь в SQL-синтаксисе LIKE и конструкции %%, которая ищет совпадения Иван в поле fio во всех записях. Выводим все записи таблицы, для этого достаточно написать следующий код:
try

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT * FROM Student');

ADOQuery1.Active:=True;

except

on e:Exception do

end;
Также во вкладке ADO есть хороший компонент TADOTable, который работает по такому же принципу, как и TADOQuery, но в TADOTable нельзя формировать SQL-запросы, поэтому предпочтительно TADOQuery.

Несколько запросов к БД, через которые можно добавлять данные, редактировать и удалять. Отличие - вместо Active будем использовать ExecSQL.

Начнем с вывода данных при первоначальном запуске программы. Для этого на событие главной формы OnCreate напишем следующее:
procedure TForm1.FormCreate(Sender: TObject);

begin

try

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT * FROM Student');

ADOQuery1.Active:=True;

except

on e:Exception do

end;

end;
Здесь ничего нового нет. Далее добавим данные с помощью запроса, для этого на событие кнопки OnClick напишем следующий код:
begin

try

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('INSERTINTO Student(fio,oz) VALUES(''Иванов Иван Иванович'',10)');

ADOQuery1.ExecSQL;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT * FROM Student');

ADOQuery1.Active:=True;

except

on e:Exception do

end;

Новый вид запроса INSERTINTO. Указываем таблицу, в которую будем добавлять данные, а затем в скобках перечисляются поля, в которые будем вставлять данные, а затем VALUES и в скобках такое же количество данных, сколько указали и полей. Потом ExecSQL выполняем запрос, так как такие запросы надо выполнять, Active не задействован. Запрос делаем на вывод всех данных, в связи с тем, что после добавления, редактирования, удаления наш DBGrid не хочет обновляться.

Затем удалим выделенную строку в таблице, для этого, необходимо получить уникальное число этой строки. Для этого создадим в таблице поле id, тип Счетчик. Далее на событие DBGridOnCellClick пропишем:
id:=ADOQuery1.Fields.Fields[0].AsInteger;
id – типа integer, не забудьте объявить.

Здесь получаем уникальное поле, а уникальное оно будет всегда потому, что у id в таблице тип Счетчик и он соответственно никогда не будет повторяться. Так, когда получили уникальное поле, теперь можно и удалить нужную запись:
begin

try

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('DELETEFROM Student WHERE id=:pid');

ADOQuery1.Parameters.ParamByName('pid').Value:=id;

ADOQuery1.ExecSQL;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT * FROM Student');

ADOQuery1.Active:=True;

except

on e:Exception do

end;
Ззапросом DELETE удаляем запись по условию id=:pid. А pid присваиваем значение, которое получаем по клику на DBGrid. В TAdoQuery есть свойство Parametrs, где необходимо добавить новый параметр, указать имя и тип, в данном случае выбран тип – ftInteger. Затем, после запроса этот параметр заполняем, а в самом запросе используем, то есть чтобы удалили именно текущую запись, удаляем по условию где задаем с помощью WHERE.

Удалить все данные еще проще:

try

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('DELETEFROM Student');

ADOQuery1.ExecSQL;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT * FROM Student');

ADOQuery1.Active:=True;

except

on e:Exception do

end;
Не указываем никаких параметров ничего просто удаляем все записи, что запросом удалить все записи намного быстрее чем через цикл.

И наконец отредактируем данные:

try

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('UPDATEStudentSETfio=''Петров Петр Петрович'',oz=7 WHEREid=:pid');

ADOQuery1.Parameters.ParamByName('pid').Value:=id;

ADOQuery1.ExecSQL;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT * FROM Student');

ADOQuery1.Active:=True;

except

on e:Exception do

end;
Здесь используется конструкция UPDATE SET, указываем таблицу где обновлять данные через SET указываем поля, которые обновляем и сразу через «=» задаем новые значения, затем надо отредактировать выделенную запись (текущую), поэтому также задаем условие WHERE id=:pidId и OnCellClick. Дальше рассмотрим, как работать в ADO с BLOB-полями.
Для начала создайте БД в MS Access и какую-нибудь таблицу, и в таблице обязательно должно быть поле с типом данных - Поле OLE-объекта. В этом поле и будут храниться файлы - картинки. Сделаем подключение к нашей БД. Затем на OnCreate формы активируем компонент запросов:

1   2   3   4   5   6   7   8   9


написать администратору сайта