15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как добавлять записи и редактировать данные в ячейке DBGrid

В этой статье описывается, как программно редактировать данные и добавлять новые записив в элемент управления DBGrid. Вы можете изменить содержимое ячейки и эти изменения мгновенно отобразяться на экране, однако, эти изменения не будут записаны в базу данных, связанную с DBGrid. Поэму, чтобы изменения записывались в базу данных, нам прийдётся редактировать основной набор записей.

Следующий пример создаёт простую базу данных, содержащую одну таблицу с четырьмя полями и пятью записями. Каждая запись, это номер в поле.

Когда Вы кликаете по ячейке, то данные из этой ячеки отображаются в TextBox. При изменении содержимого этой ячейки, изменения отображаются в DBGrid. Однако, если выполнить метод UpdateControls, то изменения исчезают из ячейки, указывая на то, что база данных не обновилась. Поэтому, для того, чтобы изменения в TextBox были занесены в базу, необходимо кликнуть по кнопке Update Recordset. Кнопка Update Recordset обновляет основной набор записей элемента управления Data. Так как DBGrid связан с Data, то изменения автоматически добавятся в DBGrid.

Создание приложения

Следующий пример демонстрирует, как редактировать содержимое ячейки DBGrid:

  1. Запустите Visual Basic. Далее в меню File кликните New Project. Добавьте элементы управления Data, DBGrid,   TextBox, и три кнопки. Установите следующие свойства для каждого элемента управления:
       Control       Default Name       Property       Value
       -----------------------------------------------------
    
       DBGrid        DBGrid1            DataSource     Data1
    



  2. Скопируйте следующий код в 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
    



Запуск примера

  1. В меню Run кликните Start или нажмите F5.

  2. Кликните на ячейку в DBGrid и измените её содержимое. Кликните по кнопке Update DBGrid. Убедитесь, что Ваше изменение исчезло из DBGrid. Клик по пустой области DBGrid приведёт к ошибке 6148 - Неправильный номер строки.

  3. Кликните по ячейке. Обратите внимание, что содержимое ячейки появилось в TextBox. Измените содержимое TextBox а затем кликните кнопку Update Recordset. Теперь Ваши изменения появятся в DBGrid.

  4. Для добавления новой записи в DBGrid кликните по кнопке Add New Records. Содержимое текстового поля (text box) будет добавлено, как новая запись.