Я получаю ошибку 2105 при попытке перейти к следующей записи с помощью DoCmd.GotoRecord в подчиненной форме MS Access.
В файле .accdb есть MainForm с подчиненной формой и модулем, иВ SQL Server есть одна простая таблица. Вот и все.
Я думаю, что максимально упростил проблему, и если вы хотите мне помочь, вы можете выполнить следующие три простых шага:
В SQL Server:
Создайте таблицу и заполните некоторыми данными (используйте SSMS):
CREATE TABLE ATable (AColumn INT)
INSERT INTO ATable VALUES (6)
INSERT INTO ATable VALUES (126)
INSERT INTO ATable VALUES (210)
INSERT INTO ATable VALUES (11)
В MS Access 2016
Создайте модуль и запишите в нем только одну строку:
Public SQLDB As Object
Создайте SubForm, создайте событие OnLoad и напишите этот код в его модуле:
Dim rsa As Object
Private Sub Form_Load()
Set rsa = CreateObject("ADODB.Recordset")
End Sub
Public Sub Fill(ByVal sql As String)
rsa.Open sql, SQLDB
Set Me.Recordset = rsa
DoCmd.GoToRecord , , acNext
End Sub
Наконец, создайте MainForm, поместите в него элемент управления subform и свяжите его с SubForm, создайте событие OnLoad изапишите этот код в его модуль (конечно, вы должны изменить строку подключения к вашей среде):
Private Sub Form_Load()
Set SQLDB = CreateObject("ADODB.Connection")
SQLDB.Open "Driver={SQL Server Native Client 11.0};Server=YourSQLServer;Database=Yourdatabase;Trusted_Connection=yes;"
SQLDB.CursorLocation = 3 ' adUseClient
Me.UO.Form.Fill "ATable"
End Sub
Когда вы откроете MainForm, вы получите Ошибка 2105 не может бытьк указанной записи при выполнении строки DoCmd.GotoRecord,,acNext
Почему?
Работает нормально, если вы помещаете весь код в Subform, поэтому я не вижу причин, почему это не будетне работает только потому, что SubForm находится "в подчиненном элементе управления".
Если у вас естьЛюбая другая идея, как перемещать курсор вперед и назад в наборе записей подчиненной формы, я буду рад услышать это. Но очень важно, чтобы наборы записей форм были ADO.