Добавление записей в таблицу и удаление их из таблицы с помощью элемента ADO Data
Элемент ADO Data (как, впрочем, и DAO Data) позволяет не только просматривать записи в таблицах базы данных. Записи можно добавлять, удалять и редактировать. Эти манипуляции можно выполнять как без использования кода (для одного объектного отношения), так и из кода (для любого количества отношений, в том числе и связанных между собой). Для демонстрации обработки записей таблицы Товары базы фирма.mdb без использования кода создадим форму с элементами управления (рис. 16.49), свойства которых приведены в следующей таблице. Рис. 16.49 Форма для демонстрации обработки записей таблицы Товары базы фирма.mdb без использования кода
В модуле формы только для одной кнопки CmdExit будем использовать код — программу для закрытия приложения. Вся остальная информация записана в свойства элементов управления. Свойство AllowAddNew элемента DataGrid1 имеет значение False, что предотвращает добавление к нему записей. Такому же значению равно свойство AllowUpdate для запрета редактировать записи прямо на сетке. Сетка в данном случае используется только для отображения данных. Текущая запись отображается также в текстовых окнах Text1, Text2, Text3 и Text4, для которых метки Label1, Label2, Label3 и Label4 служат в качестве заголовков. Добавление записи к таблице осуществляется, благодаря установке свойства EOFAction элемента Adodc1 в значение adDoAddNew — при попытке выхода за конец файла с файлу добавляется новая запись. При этом свойство Visible должно иметь значение True, чтобы пользователь имел доступ к кнопкам элемента Adodc1. Для добавления новой записи достаточно щелкнуть кнопку Move Last на элементе Adodc1 (если текущая запись не последняя), а затем кнопку — Next. При этом в таблицу Товары добавляется новая запись, которая отображается и в элементе DataGrid1, и в текстовых окнах Text1, Text2, Text3 и Text4. Остается только заполнить текстовые окна значениями (рис. 16.50). Рис. 16.50 В таблицу Товары добавляется новая запись, которая отображается и в элементе DataGrid1, и в текстовых окнах Text1, Text2, Text3 и Text4. Остается только заполнить текстовые окна значениями Добавлять записи из кода немногим сложнее, но при этом можно это делать для нескольких таблиц. Для демонстрации добавления записей из кода изменим форму, представленную на рис. 16.49, как показано на рис. 16.51. Рис. 16.51 Форма для демонстрации обработки записей таблицы Товары базы фирма.mdb с использованием кода Здесь добавлены четыре кнопки перемещения по записям набора, кнопка Добавить и Удалить (свойства этих кнопок приведены в следующей таблице). Кроме того, свойству Visible элемента Adodc1 присвоено значение False, таким образом, в режиме выполнения воспользоваться кнопками этого элемента будет невозможно.
Самый простой код событийных процедур для кнопок перемещения по записям набора представлен в листинге 16.2. Здесь используются методы MoveNext (перейти к следующей записи), MoveLast (перейти к последней записи), MovePrevious (перейти к предыдущей записи), MoveFirst (перейти к первой записи) объекта Recordset. Листинг 16.2 Событийные процедуры кнопок перемещения по записям Private Sub Command1_Click() Adodc1.Recordset.MoveNext End Sub
Private Sub Command2_Click() Adodc1.Recordset.MoveLast End Sub
Private Sub Command3_Click() Adodc1.Recordset.MovePrevious End Sub
Private Sub Command4_Click() Adodc1.Recordset.MoveFirst End Sub На рис. 16.52 рассматриваемая форма представлена в режиме выполнения. Щелкая на кнопках перемещения по записям, можно видеть перемещение табличного курсора (черный треугольник в левой части сетки) и поочередное отображение данных в секции Редактирование/Добавление. Рис. 16.52 Модифицированная форма Использование ADO Data в режиме выполнения Такой простой код для событийных процедур, конечно, предназначен только для демонстрации методов MoveNext, MoveLast, MovePrevious, MoveFirst объекта Recordset. Такой код «выпускать в свет» нельзя. Дело в том, что, достигнув, например, последней записи, мы не должны щелкать на кнопке > или >>, так как в этом случае произойдет ошибка времени исполнения, сообщение о которой приведено на рис. 16.53. Рис. 16.53 Попытка перейти к следующей записи после последней может завершить выполнение кода Чтобы исключить попытки перемещения к несуществующим записям, можно, например, блокировать кнопки, от которых в данный момент следует ждать одних «неприятностей». В листинге 16.3 приведен более «продвинутый» код событийных процедур, который предотвращает возникновение ошибок, подобных приведенным на рис. 16.53. Листинг 16.3 Более «продвинутые» событийные процедуры кнопок перемещения по записям 1: Private Sub Command1_Click() 2: Adodc1.Recordset.MoveNext 3: If Adodc1.Recordset.EOF Then 4: Command1.Enabled = False 5: Command2.Enabled = False 6: End If 7: Command3.Enabled = True 8: Command4.Enabled = True 9: End Sub 10: 11: Private Sub Command2_Click() 12: Adodc1.Recordset.MoveLast 13: If Adodc1.Recordset.EOF Then 14: Command1.Enabled = False 15: Command2.Enabled = False 16: End If 17: Command3.Enabled = True 18: Command4.Enabled = True 19: End Sub 20: 21: Private Sub Command3_Click() 22: Adodc1.Recordset.MovePrevious 23: If Adodc1.Recordset.BOF Then 24: Command3.Enabled = False 25: Command4.Enabled = False 26: End If 27: Command1.Enabled = True 28: Command2.Enabled = True 29: End Sub 30: 31: Private Sub Command4_Click() 32: Adodc1.Recordset.MoveFirst 33: If Adodc1.Recordset.BOF Then 34: Command3.Enabled = False 35: Command4.Enabled = False 36: End If 37: Command1.Enabled = True 38: Command2.Enabled = True 39: End Sub Рассмотрим две из этих процедур. В процедуре Command1_Click после выполнения метода MoveNext проверяется значение свойства EOF (в строке 3). Если оно равно константе True, значит, достигнут конец набора и пора заблокировать кнопки > и >>. В любом случае при перемещении «вниз» по записям кнопки < и << следует разблокировать (строки 7–8). В процедуре Command3_Click после выполнения метода MovePrevious проверяется значение свойства BOF (в строке 23). Если оно равно константе True, значит, достигнуто начало набора и пора заблокировать кнопки < и <<. В любом случае при перемещении «вверх» по записям кнопки > и >> следует разблокировать (строки 27–28). На рис. 16.54 рассматриваемая форма показана (в режиме выполнения) в тот момент, когда кнопки > и >> заблокированы. Рис. 16.54 Попытка перейти к следующей записи после последней теперь невозможна: кнопки > и >> заблокированы Код для добавления и удаления записей с использованием элемента ADO Data представлен в листинге 16.4. Листинг 16.4 Код для добавления и удаления записей Private Sub Command5_Click() Adodc1.Recordset.AddNew End Sub
Private Sub Command6_Click() Adodc1.Recordset.Delete End Sub
|