Работа с ADO в Delphi на примере БД MS Excel. Часть 2

5 минут на чтение

Ну вот не долго думая, подошла вторая часть по работе с ADO в DELPHI на примере БД — MS Excel. В данной статье мы рассмотрим добавление и редактирование данных, так как с удалением тут возникли проблемы, в связи с тем, что данный драйвер не поддерживает удаление, ну с удалением мы что-нибудь подумаем. Сразу хочу сказать, что необходимо еще одно поле в нашей Excel-книги — id, и нам придется вручную его заполнять, что не есть хорошо, но ничего тут сложного нету, просто при инициализации данных, мы просто получаем количество записей в нашей БД, а затем при добавлении добавляем это значение в поле id. Вот и у нас будет получаться уникальное значение, что поможет нам при редактировании. Тут как всегда, думаю что писать на OnCreate нашей главной формы понятно, обычный запрос, только затем еще необходимо получить количество записей в нашей БД, что мы делаем с помощью RecordCount. Смотрим код события OnCreate формы ниже

procedure TForm1.FormCreate(Sender: TObject);
begin
try
id:=1;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM [Лист1$]');
ADOQuery1.Active:=True;
id_count:=ADOQuery1.RecordCount+1;
except
on e:Exception do
end;
end;

Для добавления данных все тоже самое, что и было в ADO с MS Access, только здесб повторюсь надо учитывать id вручную нам, в а MS Access все было подругому, там был счетчик, что облегчало нам работу. Код добавления смотрим ниже

procedure TForm1.Button1Click(Sender: TObject);
begin
try
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('INSERT INTO [Лист1$] (ФИО,Оценка,id) VALUES(''Иванов Иван Иванович'',5,'+IntToStr(id_count)+')');
ADOQuery1.ExecSQL;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM [Лист1$]');
ADOQuery1.Active:=True;
except
on e:Exception do
end;
end;

Ну я тут еще сделал дополнительный запрос, для обновления данных в TDBGrid.Для редактирования данных нам надо получить сначала id, для этого на событие компонента TDBGrid - OnCellClick напишем

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
id:=ADOQuery1.Fields.Fields[2].AsInteger;
end;

У меня id поле находится в книге Excel в 3 столбце, но так как нумерация в ADO столбцов начинается с 0, то я указал Fields[2]. Для редактирования данных применим туже технологию, что и в случае с MS Access

procedure TForm1.Button2Click(Sender: TObject);
begin
try
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE [Лист1$] SET ФИО=''Петров Петр Петрович'',Оценка=10 WHERE id=:pid');
ADOQuery1.Parameters.ParamByName('pid').Value:=id;
ADOQuery1.ExecSQL;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM [Лист1$]');
ADOQuery1.Active:=True;
except
on e:Exception do
end;
end;

И также как видем, дополнительный запрос на обновления данных, id у нас уже получен, так что все обновиться. Да и не забыли ведь, что в комоненте TADOQuery задайте в свойстве Parameters новый параметр — pid с типом данных ftInteger. Ну и наконец-то попробуем какой-нибудь не большой поиск организовать, здесь я использовал параметр SQL-запроса — LIKE, то есть найдет все записи с совпадениями, что мы указываем. Смотрим код ниже

procedure TForm1.Button3Click(Sender: TObject);
begin
try
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM [Лист1$] WHERE ФИО LIKE ''%Иванов%''');
ADOQuery1.Active:=True;
except
on e:Exception do
end;
end;

Можно организовать поиск по полному совпадению просто через WHERE, но пока что так. Теперь понимаете, что использовать MS Excel в качестве БД тут не логично, много чего вручную контролировать нужно, ограниченное количество записей, да и с удалением проблемы, но зато отлично тут можно написать конвертацией данных, а также экспорт в Excel например или в MS Access из MS Excel. Но мы пока что займемся экспортом в Excel, а затем напишем свой конвертатор. Но это в следующий частях про MS Excel как БД в Delphi.

Facebook Vk Ok LinkedIn Telegram

Похожие записи:

Здравствуйте, в этой статье я расскажу Вам, как использовать в своем приложении (программе) на Delphi БД в виде MS Excel. Да да именно MS Excel. Тут ничего сложного нету. Для начала давайте заполним наш лист в MS Excel. Первая строка в каждом столбце всегда бу...
Всем здравствуйте, в этой статье я хотел бы снова обратить внимание на Базы данных, а в частности работа с Базами данных по технологии ADO. Когда пользователь создает приложение на Delphi, работающего с СУБД, к которой присоединяется по технологии ADO, то к фа...
Итак кaк и обещал, долгожданная статья по конвертации данных из Excel в Access. Тут скажу сразу ничего сложного нету, только лишь воспользуемся знаниями, полученными ранее при работе с данными БД по технологии ADO. Смысл всего этого, делаем запрос в MS Excel н...