Access 2007 Recordset проблема

Я пытаюсь перенести Access 2003 (работает нормально) на Access 2007. Код, написанный на VBA, создает некоторые проблемы. Как у меня есть одна основная форма и 2 подчиненные. В основном наборе источников данных формы, установленном динамическим запросом, но на основе данных основной формы, когда я пытаюсь установить набор записей подчиненной формы, то получаю доступ к аварийному завершению 2007 года и сам закрываюсь. Не могли бы вы помочь кому-нибудь выяснить, почему это происходит в Access 2007.

Public Sub LoadRecord(strRecId As String)

On Error Resume Next

Dim ctl As Access.Control
Dim strsql As String
Dim strID As String
Dim rs As ADODB.Recordset

    strsql = "SELECT * from vwContractsMainForm WHERE ID = '" & strRecId & "'"

    Call OLEDBConnect 
    Set rs = New ADODB.Recordset
    With rs
        Set .ActiveConnection = cnn
        .Source = strsql
        .CacheSize = 1
        .LockType = adLockOptimistic
        .CursorType = adOpenKeyset
        .CursorLocation = adUseServer
        .Open
    End With

    'Set the first sub form's Recordset property to the ADO recordset 
    Set Me.Recordset = rs   '-------- this part creates the problem.
    Me.UniqueTable = "tbl_contracts"
    Set rs = Nothing
    Set cnn = Nothing
13.10.2009 12:12:39
Это поможет добавить точное сообщение об ошибке на ваш вопрос. Какая у вас модель объекта по умолчанию? Если Me.Recordset также не является ADODB, у вас будут проблемы.
heferav 13.10.2009 17:31:32
Heferav. Обратите внимание, что она заявляет, что Access падает. Таким образом, нет сообщения об ошибке.
Tony Toews 13.10.2009 18:42:58
Почему вы назначаете набор записей ADO для формы, а не просто устанавливаете свойство Recordsource формы? В операторе SQL или параметрах, которые вы устанавливаете для своего набора записей, нет ничего, что указывало бы на какую-либо потребность в наборе записей ADO. Вы знаете, что это можно сделать гораздо проще?
David-W-Fenton 14.10.2009 02:11:43
1 ОТВЕТ

Я буду проклят. В этом месяце я узнал что-то новое о Access. Я никогда не понимал, что вы можете изменить набор записей такой формы.

Я никогда не использовал On Error Resume Next, как вы, вероятно, скрываете сообщение об ошибке в строке, предшествующей строке, которая дает сбой.

Глупый вопрос. Является ли strRecId числовым или строковым полем в запросе? Котировки действительны?

strRecoID и cnn не тускнеют в вашем коде. Я вижу, что strID недоступен, так что, скорее всего, это поле, которое вы хотели использовать. Пожалуйста, добавьте Option Explicit в качестве верхней или второй строки вашего модуля. Затем перейдите в каждый модуль и добавьте эти строки. Затем выполните компиляцию и посмотрите, сколько других ошибок происходит.

Также зайдите в VBA Editor, затем Инструменты >> Параметры >> и убедитесь, что установлен флажок Требовать объявление переменной.

Также вам и всем скрытым. Пожалуйста, отправьте информацию о сбое в Microsoft. Хотя им, конечно же, не нравится получать информацию о сбоях, они рассматривают сбои как очень высокий приоритет, когда речь идет о пакетах обновления.

1
14.10.2009 00:29:36
Тони, возможность присвоить набор записей ADO или DAO для формы была введена в A2000, который был выпущен в середине 1999 года. Я не думаю, что это почти так же полезно, как думают люди. Мне кажется, что многие беженцы из других языков упускают основы доступа и связанные формы и думают, что это единственный способ вывести данные в форму (в отличие от простого назначения источника данных формы). Насколько я вижу, единственным преимуществом является то, что вы действительно хотите, чтобы один набор записей находился в памяти и отображался в форме (или в двух разных формах), а не то, что обычно происходит.
David-W-Fenton 14.10.2009 02:08:36