2009-10-13 2 views
1

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

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 
+0

Это поможет добавить точное сообщение об ошибке к вашему вопросу. Какова ваша объектная модель по умолчанию? Если Me.Recordset также является ADODB, тогда у вас будет проблема. – heferav

+1

Heferav. Обратите внимание, что она заявляет о сбоях доступа. Таким образом, сообщение об ошибке отсутствует. –

+0

Почему вы назначаете набор записей ADO для формы вместо того, чтобы просто устанавливать свойство Recordsource формы? Ничего не сказано в инструкции SQL или параметрах, которые вы устанавливаете для своего набора записей, которые указывают на необходимость какой-либо необходимости в наборе записей ADO. Знаете ли вы, что это можно сделать гораздо проще? –

ответ

1

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

Я никогда не использовал сообщение об ошибке «Ошибка при повторном запуске», как вы могли бы, вероятно, скрывать сообщение об ошибке в строке, предшествующей линии, которая выходит из строя.

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

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

Также зайдите в редактор VBA, затем Tools >> Options >> и убедитесь, что флажок Требовать переменную.

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

+1

Тони, возможность назначить набор записей ADO или DAO для формы, был представлен в A2000, который был выпущен в середине 1999 года. Я не думаю, что это почти так же полезно, как люди думают. Мне кажется, что многие беженцы с других языков не понимают основ доступа и связанных форм и думают, что это единственный способ извлечь данные в форму (в отличие от простого назначения источника записей формы). Насколько я вижу, единственное преимущество в том, что вам действительно нужен единый набор записей в памяти и отображаться в форме (или в двух разных формах) - не то, что обычно происходит. –

+0

Хорошо, спасибо. Все это имеет смысл. –

Смежные вопросы