Как добавлять записи и редактировать данные в
ячейке DBGrid
В этой статье описывается, как программно
редактировать данные и добавлять новые записив в
элемент управления DBGrid. Вы можете изменить
содержимое ячейки и эти изменения мгновенно
отобразяться на экране, однако, эти изменения не
будут записаны в базу данных, связанную с DBGrid.
Поэму, чтобы изменения записывались в базу
данных, нам прийдётся редактировать основной
набор записей.
Следующий пример создаёт простую базу данных,
содержащую одну таблицу с четырьмя полями и
пятью записями. Каждая запись, это номер в поле.
Когда Вы кликаете по ячейке, то данные из этой
ячеки отображаются в TextBox. При изменении
содержимого этой ячейки, изменения отображаются
в DBGrid. Однако, если выполнить метод UpdateControls, то
изменения исчезают из ячейки, указывая на то, что
база данных не обновилась. Поэтому, для того,
чтобы изменения в TextBox были занесены в базу,
необходимо кликнуть по кнопке Update Recordset. Кнопка
Update Recordset обновляет основной набор записей
элемента управления Data. Так как DBGrid связан с Data,
то изменения автоматически добавятся в DBGrid.
Создание приложения
Следующий пример демонстрирует, как
редактировать содержимое ячейки DBGrid:
- Запустите Visual Basic. Далее в меню File кликните New
Project. Добавьте элементы управления Data, DBGrid,
TextBox, и три кнопки. Установите следующие
свойства для каждого элемента управления:
Control Default Name Property Value
-----------------------------------------------------
DBGrid DBGrid1 DataSource Data1
- Скопируйте следующий код в Form1:
Option Explicit
Dim rs1 As Recordset
Dim db As Database
Dim td As TableDef
Dim fl As Field
Dim igRow As Integer, igColumn As Integer
Dim iFields As Integer, iRecords As Integer
Dim vargBookmark As Variant
Private Sub Command1_Click()
' Кнопка Create Database: Нажатием этой кнопки Вы создаёте
' базу данных с четырьмя полями и пятью записями.
Set db = CreateDatabase("C:\test.mdb", dbLangGeneral)
Set td = db.CreateTableDef("Table1")
' После того как база создана, необходимо добавить в неё поля.
For iFields = 1 To 4 ' Последнюю цифру можно изменить на то кол-во
' полей, которое Вам нужно в базе данных.
Set fl = td.CreateField("Field " & CStr(iFields), dbText)
td.Fields.Append fl
Next iFields
db.TableDefs.Append td
' Теперь необходимо добавить несколько записей.
Set rs1 = db.OpenRecordset("Table1", dbOpenTable)
For iRecords = 1 To 5 'Для каждой строки
rs1.AddNew 'Добавляем новую запись
For iFields = 1 To 4 ' Для каждого поля в записи,
rs1("Field " & CStr(iFields)) = CStr(iFields) 'добавляем число.
Next iFields
rs1.Update
Next iRecords
' Закрываем recordset и базу данных.
rs1.Close
db.Close
' Заполняем DBGrid содержимым Recordset.
Set db = OpenDatabase("C:\test.mdb")
Set rs1 = db.OpenRecordset("Select * from Table1")
Set Data1.Recordset = rs1
Command1.Visible = False
Command2.Visible = True
Command4.Visible = True
End Sub
Private Sub Command2_Click()
' Кнопка Update Database: Нажатием этой кнопки, мы сохраняем
' содержимое текстового поля в базе данных. Если содержимое
' recordset изменилось, то после выполнения метода Update оно
' будет сохранено в базе данных.
Data1.Recordset.Edit
Data1.Recordset.Fields(igColumn) = Text1.Text
Data1.Recordset.Update
End Sub
Private Sub Command3_Click()
' Кнопка Update DBGrid: Нажатием этой кнопки мы выполняем метод
' UpdateControls в элементе управления Data, чтобы
' продемонстрировать, что изменения в ячейке DBGrid не сохраняются
' в базе данных.
Data1.UpdateControls
End Sub
Private Sub Command4_Click()
' Кнопка Add New Record: Нажатием этой кнопки, мы добавляем новые
' записи в набор записей (recordset).
' Устанавливаем свойства DBGrid и Data, чтобы дать возможность
' добавлять новые записи.
DBGrid1.AllowAddNew = True
Data1.EOFAction = vbAddNew
Data1.Recordset.MoveLast
Data1.Recordset.MoveNext
DBGrid1.Row = DBGrid1.VisibleRows - 1
Data1.Recordset.AddNew
For iFields = 1 To 4 ' Для каждого поля в записи,
' добавляем содержимое текстового поля.
Data1.Recordset("Field " & CStr(iFields)) = Text1.Text
Next iFields
Data1.Recordset.Update
End Sub
Private Sub DBGrid1_Change()
Command3.Visible = True
End Sub
Private Sub DBGrid1_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Command2.Visible = True
igColumn = DBGrid1.ColContaining(X)
igRow = DBGrid1.RowContaining(Y)
vargBookmark = DBGrid1.RowBookmark(igRow)
Text1.Text = DBGrid1.Columns(igColumn).CellValue(vargBookmark)
End Sub
Private Sub Form_Load()
Command1.Visible = False
Command2.Visible = False
Command3.Visible = False
Command4.Visible = False
Command1.Caption = "Create Database"
Command2.Caption = "Update Database"
Command3.Caption = "Update DBGrid"
Command4.Caption = "Add New Record"
' Если база данных не существует,
' то показываем кнопку Create Database
If Dir("C:\test.mdb") = "" Then
Command1.Visible = True
Else
' Открываем существующую базу данных.
Set db = OpenDatabase("C:\test.mdb")
Set rs1 = db.OpenRecordset("Select * from Table1")
Set Data1.Recordset = rs1
Command4.Visible = True
End If
End Sub
Private Sub Text1_Change()
Command2.Visible = True
End Sub
Запуск примера
- В меню Run кликните Start или нажмите F5.
- Кликните на ячейку в DBGrid и измените её
содержимое. Кликните по кнопке Update DBGrid. Убедитесь,
что Ваше изменение исчезло из DBGrid. Клик по пустой
области DBGrid приведёт к ошибке 6148 - Неправильный
номер строки.
- Кликните по ячейке. Обратите внимание, что
содержимое ячейки появилось в TextBox. Измените
содержимое TextBox а затем кликните кнопку Update Recordset.
Теперь Ваши изменения появятся в DBGrid.
- Для добавления новой записи в DBGrid кликните по
кнопке Add New Records. Содержимое текстового поля (text box)
будет добавлено, как новая запись.
|