Есть ли способ упростить модуль сохранения / обновления? - PullRequest
0 голосов
/ 05 июля 2018

Я пишу приложение, в котором есть несколько таблиц и полей, которые, конечно, нужно сохранять и обновлять. Каждый раздел, скажем, страница, имеет свой собственный модуль, который имеет подпрограммы сохранения / обновления / удаления.

Это пример подпрограммы сохранения внутри модуля сохранения:

Public Sub saveRecToStaff(FirstName As String, LastName As String, Address As String, Email As String, PhoneNumber As String, Status As String)
Dim rstSave As New ADODB.Recordset
rstSave.ActiveConnection = CurrentProject.Connection
rstSave.CursorType = adOpenDynamic
rstSave.LockType = adLockOptimistic

rstSave.Open "SELECT FirstName, LastName, Address, Email, PhoneNumber, Status FROM Staff"
rstSave.addNew

rstSave.Fields("FirstName").Value = FirstName
rstSave.Fields("LastName").Value = LastName
rstSave.Fields("Address").Value = Address
rstSave.Fields("Email").Value = Email
rstSave.Fields("PhoneNumber").Value = PhoneNumber
rstSave.Fields("Status").Value = Status
rstSave.update

rstSave.Close
Set rstSave = Nothing
End Sub

Какое-то время я думал, что, возможно, мог бы быть способ упростить эту процедуру. Например, создание базовой функции, которая просто вызывается всякий раз, когда необходимо сохранить. Однако я очень новичок в кодировании VBA, поэтому не знаю, как мне поступить.

Любой совет будет очень признателен!

РЕДАКТИРОВАТЬ: Как насчет последовательности обновления?

Public Sub saveRecToStaff(oldFirstName As String, FirstName As String, oldLastName As String,
LastName As String, oldAddress As String, Address As String, Email As String, PhoneNumber As String,
 Status As String)
Dim rstSave As New ADODB.Recordset
rstSave.ActiveConnection = CurrentProject.Connection
rstSave.CursorType = adOpenDynamic
rstSave.LockType = adLockOptimistic

rstUpdate.Open "SELECT FirstName, LastName, Address, Email, PhoneNumber, Status FROM Staff 
 WHERE FirstName='"& oldFirstName & "' AND LastName='" & oldLastName & "' AND Address='" & oldAddress & "'"

If (rstUpdate.EOF = False) Then
rstUpdate.update
rstUpdate.Fields("FirstName").Value = FirstName
rstUpdate.Fields("LastName").Value = LastName
rstUpdate.Fields("Address").Value = Address
rstUpdate.Fields("Email").Value = Email
rstUpdate.Fields("PhoneNumber").Value = PhoneNumber
rstUpdate.Fields("Status").Value = Status
rstUpdate.update
End If

rstSave.Close
Set rstSave = Nothing
End Sub

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете легко использовать более короткий / простой код, переключившись на DAO. При использовании With набор записей не нужно объявлять и автоматически закрывать:

Public Sub saveRecToStaff(FirstName As String, LastName As String, Address As String, Email As String, PhoneNumber As String, Status As String)
    With CurrentDb.TableDefs!Staff.OpenRecordset
        .AddNew
        .Fields("FirstName").Value = FirstName
        .Fields("LastName").Value = LastName
        .Fields("Address").Value = Address
        .Fields("Email").Value = Email
        .Fields("PhoneNumber").Value = PhoneNumber
        .Fields("Status").Value = Status
        .Update
    End With
End Sub

Однако вы также можете использовать связанную форму, и тогда вам не нужно будет использовать какой-либо VBA для добавления новых строк. Вы можете использовать только встроенную функциональность формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...