Урок 32 - Объединение всего изученного про базы данных

   В этом уроке мы объединим все, что прошли ранее.

Для начала нам нужно создать пустую таблицу "кадры" с набором полей: "Имя, Фамилия, Отчество, Телефон, Статус". Всё точно также как это делали в прошлом уроке.

Таблица


   Также возьмём за основу пример программы из прошлого урока, добавим 3 кнопки и проверим нашу таблицу:

Таблица


   Мы напишем программу для полноценного управления базой данных (добавление, редактирование, удаление). Добавим новую форму и положим на неё следующие компоненты:

Вторая форма


   Форма готова и чтоб начать задавать свойства нам нужно подключить 2 юнит к 1 юниту, потому что без этого мы не можем обратится к первой форме из второй. Делается это очень просто, создаем обработчик события OnClick на 1 кнопке:
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Show; // Вызываем что-нибудь из 1 формы
end;
   И у нас вылезет вот такое окно:

Добавить во второй юнит первый?


   Нажимаем ОК и первая форма подключается ко второй, можно использовать её свойства. Всем DBEdit'ам и BDComboBox1 свойство DataSource зададим как Form1.DataSource1, а DataField как "Имя", "Фамилия", "Отчество", "Телефон", "Статус" соответственно. Далее настроим еще одно свойство у DBComboBox1, кликаем на Items и заполняем его как на рисунке:

Items у DBComboBox1


   Теперь нам надо изменить наш ранее созданный обработчик события на кнопке "ОК", стираем там все что есть и пишем новый код:
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.ADOQuery1.Post; // Фиксируем изменения
Close;  // Закрываем форму
end;
   И сразу же создадим обработчик события на кнопке "Добавить" на первой форме:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show; // Показываем вторую форму
ADOQuery1.Insert; // Добавляем строку
end;
   У нас опять вылезет сообщение о том что надо добавить первый юнит ко второму, соглашаемся, компилируем и добавляем:

Добавлине


   Теперь можно заполнять базу данных. Удаляются значения так, создаем обработчик события кнопки "Удалить" на первой форме:
procedure TForm1.Button3Click(Sender: TObject);
begin
ADOQuery1.Delete; // Удаляем элемент
end;
   Все, выделенная строка исчезает. Также легко можно изменить строку, создаем обработчик события кнопки "Изменить":
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Show; // Показываем вторую форму
end;
   У нас просто показывается вторая форма и выделенную строку можно изменять.

   Теперь представим что наша база данных состоит из тысячи строки и нам надо найти одну единственную, эта задача решается поиском строки, это мы сейчас и сделаем. Кидаем на форму компонент StatusBar и 2 раза кликаем на неё, в открывшемся окне создаем новую панель и закрываем. Создаем глобальную переменную fs: String и в обработчике события OnKeyPress DBGrid1 пишем код:
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
fs:= fs + Key; // Прибавляем символ нажатой клавиши к искомому слову
DBGrid1.DataSource.DataSet.Locate('Имя', fs, [loPartialKey]); // Выполняем поиск в столбце "Имя" 
StatusBar1.Panels.Items[0].Text:= 'Ищем: ' + fs; // выводим что мы ввели
end;
   И что бы во время печатания слова мы случайно не изменили значение в таблице надо установит свойство dgRowSelect у DBGrid1, которое находится в списке Options на True. Все поиск у нас есть, давайте его опробуем, запускаем программу и вводим "ми":

Поиск слова `ми`


   И выделяется "Мигель", Вводим "мих", выделяется "Михаил":

Поиск слова `мих`


Удачи!
Встретимся в следующем уроке!




Добавил(а): FallenRu Дата: 2013-06-01
А как создать поиск (если нету adoquary, а есть ado table) ?поподробней если не сложно с *.locate



Добавил(а): FallenRu Дата: 2013-06-01
Уже не надо))



Добавил(а): mikkylovejoe Дата: 2013-06-20
А как сделать так что б таблица таблица сама подвигалась влево, а то все время самому приходится её двигать.



Добавил(а): s-kozelsk Дата: 2018-03-20
Подскажите кто-нибудь, что делать если при запуске не могу ничего ввести в dbEdit (Readonly = false, Enebled = true, Datasource настроил)?


  1. Нурбакыт
    Нурбакыт a year ago
    можете подробно объяснить ( Теперь представим что наша база данных состоит из тысячи строки и нам надо найти одну единственную, эта задача решается поиском строки, это мы сейчас и сделаем. Кидаем на форму компонент StatusBar и 2 раза кликаем на неё, в открывшемся окне создаем новую панель и закрываем. Создаем глобальную переменную fs: String и в обработчике события OnKeyPress DBGrid1 пишем код:) этот часть
Отменить.