Наша работа использует пользовательскую форму Excel в качестве внешнего интерфейса, который в настоящее время загружается в базу данных доступа. Я хочу разрешить пользователю редактировать записи доступа из того же внешнего интерфейса, не задерживая базу данных, входя в доступ. Кажется, я не могу найти хороших или простых ответов на этот вопрос на форумах, так как большинство вопросов касаются только массовых обновлений записей в доступе. Вот что у меня есть до сих пор. Имя базы данных — «database3» (это база данных доступа mdb). Я хочу найти совпадение из пользовательской формы (текстовое поле2) в поле идентификатора в доступе. Затем я хочу, чтобы значение textbox1 заменило текущее значение в столбце1. Буду признателен за любую помощь, так как я новичок в работе с ADO, но рад узнать об этом больше.
`Sub Save_Data()
On Error GoTo ErrorHandler
Application.EnableCancelKey = xlDisabled
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim nConnection As New ADODB.Connection
Dim nRecordset As New ADODB.Recordset
Dim sqlQuery As String
'Connection Strings - Dynamic Path
#If Win64 Then
nConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & "C:\Users\sam\Desktop\Database3.mdb" & ";Jet OLEDB:Database"
#Else
nConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & "C:\Users\sam\Desktop\Database3.mdb" & ";Jet OLEDB:Database"
#End If
sqlQuery = "Select * from Table1"
'Open the recordset
nRecordset.Open Source:=sqlQuery, ActiveConnection:=nConnection, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
If nRecordset.Fields("Column1").Value = UserForm1.TextBox2.Value Then
nRecordset.Edit.Fields("Column1") = TextBox1.Value
.Update
.Close
End If
nConnection.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Exit Sub
ErrorHandler:
MsgBox Err.Description & " " & Err.Number, vbOKOnly + vbCritical, "Database Error"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
nConnection.Close
End Sub`
Для ADO не требуется редактирование, поэтому попробуйте:
If nRecordset.Fields("Column1").Value = UserForm1.TextBox2.Value Then
nRecordset.Fields("Column1").Value = UserForm1.TextBox1.Value
nRecordset.Update
End If
nRecordset.Close
Большое спасибо. Я буду помнить это в будущем. Это было намного проще, чем я думал. Я ценю ваше время.
Является ли поле ID и Column1 двумя разными полями?