В первой части мы рассмотрели как правильно подключить БД MS Access в проект Delphi. Сейчас мы рассмотрим примитивную работа с данными компонентами, а также некоторые свойства их. Кроме это попробуем сделать небольшие запросы к БД и добавлять, редактировать информацию, удалять и перемещаться в таблице по записям. Мы все прекрасно помним компонент TDBGrid. Так вот в нем для удобства я нажал двойным щелчком левой кнопкой мыши и в появившемся окне я создал 2 поля, нажав на кнопку Add new. Затем выбрав первой поле в свойстве FildName я прописал вручную fio, в том же свойстве для второго поля я прописал oz. Затем я перешел в свойство Title раскрыл его и в подсвойстве Caption для 1-го поля я указал ФИО, а для 2-го поля я указал Оценка. Затем в свойстве компонента TDBGrid я раскрыл свойство Options и в подствойстве dgEditing я установил False, а в подсвойстве dgRowSelect я установил True. dgEditing - я запретил редактирование в самой таблице, а dgRowSelect этим свойством выделяется вся строка в таблице. На главную форму нашего приложения я «установил» следующие компоненты и вот что у меня получилось
Далее на кнопку «Добавить» я написал следующий код
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
if Application.MessageBox('Delete?','ADO',MB_YESNO)=IDYES then
begin
ADOQuery1.Delete;
end;
except
on e:Exception do
end;
end;
Здесь метод Delete, то есть с помощью него мы удаляем запись из таблицы на которой стоит указатель, мы конечно можем удалить с помощью запроса, но тогда нам придется получать уникальный номер записи, но это мы посмотрим в следующем уроке по базам данных.
На кнопку «Редактировать» я написал следующий код
procedure TForm1.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, которой я написал следующий код
procedure TForm1.Button9Click(Sender: TObject);
begin
try
ADOQuery1.Active:=True;
ADOQuery1.Post;
except
on e:Exception do
end;
end;
Здесь все просто метод Post сохраняет все измененные данные в нашей таблице.
Далее идут у нас кнопку с небольшими запросами, на кнопке «Вывести всех с оценками 10» по событию OnClick я написал следующий код
procedure TForm1.Button10Click(Sender: TObject);
begin
try
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM Student WHERE oz=10');
ADOQuery1.Active:=True;
except
on e:Exception do
end;
end;
Здесь у нас идет обычный запрос с условием, условие у нас задается с помощью конструкции Where. Здесь мы и указываем какие записи выводить. Метод Clear - очищает все что было в SQL, а ADD - добавляет текст SQL.
Далее на кнопке «Вывести все фамилии, в которых присуствует Иван» я написал следующий код
procedure TForm1.Button11Click(Sender: TObject);
begin
try
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM Student WHERE fio LIKE ''%Иван%''');
ADOQuery1.Active:=True;
except
on e:Exception do
end;
end;
Здесь у нас уже новенькое в SQL-синтаксисе LIKE и конструкции %%, да именно эта конструкция и ищет совпадения Иван в поле fio во всех записях. И наконец выводим все записи нашей таблиц для этого достаточно написать следующий код
procedure TForm1.Button12Click(Sender: TObject);
begin
try
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM Student');
ADOQuery1.Active:=True;
except
on e:Exception do
end;
end;
Также во вкладке ADO есть хороший компонент TADOTable, который работает по такому же принципу как и TADOQuery, но в TADOTable нельзя формировать SQL-запросы, поэтому я предпочитаю TADOQuery. В следующей статьи про БД я напишу как добавлять, редактировать и удалять данные с помощью SQL-запросов. Исходник данной статьи Вы сможете скачать на странице Исходники