Я много экспериментировал с ADO в Access и, наконец, пришел к выводу, что это не лучшая технология для использования с формами и отчетами в MS Access.Это нормально для подключения к источникам данных, доступ к которым возможен только через ADO, или в которых есть существенное преимущество использования ADO (например, скорость), но в этих случаях вы должны идти на компромиссы, которые часто требуют, чтобы вы опускали определенные функции или работали оченьтрудно их кодировать.Комбо-списки, использующие оператор SQL (в отличие от списка значений), сложны в настройке и требуют загрузки отдельного набора записей, чтобы заполнить их параметрами.Я обнаружил, что сортировка не всегда работает должным образом и надежно, особенно в формах представления таблицы.Короче говоря, это намного больше работы и кода, чтобы заставить ADO работать в формах Access, если вы не делаете свои формы чрезвычайно простыми (а это часто делает их неуклюжими в использовании).
Вместо этого я рекомендую вам использовать ODBCсвязанные таблицы.Для этого может потребоваться сначала установить драйвер ODBC для SQL Server.После настройки связанных таблиц в Access вы можете использовать Access, как если бы эти таблицы были локальными.Вы можете использовать связанные формы (которые автоматически используют DAO для доступа к данным), и настройка основных / подробных форм очень проста в этой конфигурации.Вы даже можете использовать мастера, хотя я не обязательно рекомендую это.
Если вы все же настаиваете на использовании ADO, я рекомендую вам поэкспериментировать с установкой набора записей формы в набор записей ADO.Тогда это будет связанная форма, и вам не придется писать код для перемещения данных из набора записей в элементы управления и наоборот.Вот часть вашего кода, модифицированного для этого:
Private Sub Form_Load()
Set con = Nothing
Set rs = Nothing
Set rs2 = Nothing
Set con = New ADODB.Connection
Set rs = New ADODB.Recordset
Set rs2 = New ADODB.Recordset
con.ConnectionString = "Provider=SQLNCLI10.1;User ID=sa0378;password=123;Initial Catalog=Northwind;Data Source=(local);"
con.Open
rs.Open "SELECT Orders.OrderID, Orders.ShipCountry," & _
"Orders.EmployeeID, Orders.CustomerID, Orders.ShipCity," & _
"Orders.ShipAddress, Orders.ShipPostalCode, Orders.Freight, Orders.OrderDate," & _
"Orders.RequiredDate, Orders.ShippedDate FROM Orders", con, _
adOpenDynamic, adLockOptimistic
Set Me.Recordset = rs
End Sub
Этот код, однако, не будет устанавливать отношения мастер / детали, которые вы ищете.Ваша задача по-прежнему будет заключаться в том, чтобы сделать это вручную, загружая правильный набор записей каждый раз, когда пользователь меняет другую запись в главной форме.Вы должны быть в состоянии сделать это в текущем событии формы.