Как решить эту проблему в формах доступа с подключением к Visual Basic SQL Server? - PullRequest
0 голосов
/ 25 марта 2012

Я создал форму, которая по существу показывает мне Заказы из знакомой базы данных Northwind, я использую Microsoft SQL Server 2008, Microsoft Access 2007 с Visual Basic (ADO), поэтому я создал базовую форму, которая в значительной степени похожа наэто:

http://www.flickr.com/photos/63259070@N06/7014481001/in/photostream/

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

flickr.com/photos/63259070@N06/ 6868373952 / in / photostream /

У вас есть таблица заказов (Pedido) и детали заказа таблицы (Detalle de pedidos), что я хочу сделать, когда я нажимаю на главную >>, продукты отображаются соответственнодля заказов, надеюсь, это будет иметь смысл, когда я нахожусь на заказ и нажмите на форму с четырьмя элементами, он должен показывать только продукты, приCE, количество, идентификатор продукта, в соответствии с идентификатором заказа в главной форме, когда я нажимаю >> или << в форме ниже .... </p>

Так что в качестве примера скажем, у меня есть идентификатор заказа 001и 001 заказали три продукта, соль, перец, курицу ... это должно показать только это в форме. Надеюсь, вы получили это, я надеюсь .. пожалуйста

Вот мой полный код VB 6 ..опять же, любая помощь приветствуется, спасибо ...

https://docs.google.com/document/d/1bn71VqxzB1W55sHcKMstCSxnIbmP5cyYWkBVnF1tzVs/edit

1 Ответ

0 голосов
/ 26 марта 2012

Я много экспериментировал с 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

Этот код, однако, не будет устанавливать отношения мастер / детали, которые вы ищете.Ваша задача по-прежнему будет заключаться в том, чтобы сделать это вручную, загружая правильный набор записей каждый раз, когда пользователь меняет другую запись в главной форме.Вы должны быть в состоянии сделать это в текущем событии формы.

...