Ну вот не долго думая, подошла вторая часть по работе с 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.

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

Исходники статьи качаем тут

Автор статьи - Andrey53

Метки: , , , , , , , , ,




К записи “Работа с ADO в Delphi на примере БД MS Excel. Часть 2” оставлено комментариев: 3.

  1. Огромное спасибо за уроки!

  2. Алексей:

    Не могу понять почему на одном компьютере работает код, а на другом — нет. Единственное отличие от предложенного вами кода то, что я не использовал свойство Parameters в ADOQuery. На компьютере, где код успешно запустился при создании ConnectionString «Источник данных компьютера» «Файлы Excel» уже существовал и я выбрал его, как вы и предписывали. На других компьютерах я этот источник не обнаружил и мне пришлось его создавать. Выбираем «Создать», «Пользовательский», «Microsoft Excel Driver (*.xls)», задаем Имя источника данных в «Файлы Excel», жмем «ОК». После этого запросы Select начинают работать, однако запросы Update — не работают. Получаю сообщение драйвера ODBC что должен использоваться обновляемый запрос.
    Что не так? Помогите!

  3. Алексей:

    Виноват, был в шаге от решения. Но, возможно, мои шишки научат других. Короче решение проблемы следующее: идем в «Панель управления», «Администрирование», «Источники данных ODBC». В открывшемся окне во вкладке «Пользовательский DSN» создаем «Источник данных пользователя» с именем «Файлы Excel», выбираем для него «Microsoft Excel Driver (*.xls)». Короче делаем как я уже писал выше. А теперь ВНИМАНИЕ! Если зайти в «Настройка..» созданного источника данных и развернуть кнопочку «Параметры>>», то мы увидим птичку «Только чтение». Вот ее-то надо убрать. И все заработает.

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*