2013-09-09 2 views
0

Может ли кто-нибудь сказать мне, почему вдруг моя база данных Access 2010 не распознает ключевое поле в одной из моих таблиц? VBA распознает каждое другое поле, определенное в таблице? Я дважды и тройка проверил, что все написано правильно.Sudden «Ошибка компиляции: метод или элемент данных не найден»

код, где появляется ошибка компиляции:

Me.benefitID = Nz(DMax("benefitID", "tblBenefits"), 0) + 1 

tblBenefits поля:

benefitID (Primary key) 
benefitAnimalWelfare 
benefitSafety 
benefitCostSavings 
benefitImprovedPractice 
benefitAdministrative 
benefitOther 

Весь код:

Private Sub NewIdeaButton_Click() 
On Error GoTo NewIdeaButton_Click_Err 

    'new idea boolean is true 
    newIdea = True 

    On Error Resume Next 
    DoCmd.GoToRecord , "", acNewRec 
    'assign IDs for ideaID, benefitID, statusID 
    Me.ideaID = Nz(DMax("ideaID", "tblIdeaDetails"), 0) + 1 
    Me.benefitID = Nz(DMax("benefitID", "tblBenefits"), 0) + 1 
    Me.statusID = Nz(DMax("statusID", "tblStatus"), 0) + 1 

    Me.PrintIdeaButton.Visible = False 
    Me.DeleteIdeaButton.Visible = False 
    Me.IdeaStatusFormButton.Visible = False 
    Me.CancelButton.Visible = True 
    Me.ClearListBoxButton.Visible = False 
    Me.AttachedLabel.Visible = False 
    Me.FileList.Visible = False 
    Me.FileList.RowSourceType = "Value List" 

    Me.ideaSubmitter.SetFocus 
    If (MacroError <> 0) Then 
     Beep 
     MsgBox MacroError.Description, vbOKOnly, "" 
    End If 

NewIdeaButton_Click_Exit: 
    Me.NewIdeaButton.Visible = False 
    Exit Sub 

NewIdeaButton_Click_Err: 
    MsgBox Error$ 
    Resume NewIdeaButton_Click_Exit 

End Sub 

Я попытался выбрать Microsoft DAO 3.6 Object Library Reference, но я получаю «Имя конфликтует с существующей библиотекой модулей, проектов или объектов». Я прочитал, что если вы отмените выборку из библиотеки объектов Microsoft Office 14.0, она позаботится об этой ошибке. Но я не думаю, что это то, что я хочу отменить?

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

Также попробовал компактную базу данных по ремонту, но получил сообщение «Операция по сокращению и ремонту отменена. Возможно, у вас нет достаточных прав доступа к папке, в которой находится база данных. база данных расположена для компактного и ремонта. Для получения дополнительной информации обратитесь к системному администратору ». Мне удалось запустить C & R в прошлом?

+0

Вы можете использовать вместо точки точку «Взрыв» (восклицательный знак), особенно если вы обращаетесь к полю. Моя собственная практика состоит в том, чтобы использовать точку для всего, кроме ссылки на лежащие в основе поля, и в этом случае я использую исключительно удар. И мои элементы управления всегда имеют префикс с использованием венгерской нотации, так что текстовое поле txtIdeaSubmitter.Вы можете узнать больше о ударе по сравнению с точкой: http://bytecomb.com/the-bang-exclamation-operator-in-vba/ и здесь http://www.datagnostics.com/dtips/bangdot.html и здесь http: //stackoverflow.com/questions/2923957/bang-notation-and-dot-notation-in-vba-and-ms-access – HK1

ответ

0

'!' восклицательные точки работали для меня, я заменил «.». с этим везде, где я нашел эту ошибку.

0

Я только что столкнулся с той же проблемой. Я обнаружил, что восклицательный знак, который я обычно использую, больше не делает. Таким образом, я должен был использовать .value, например .:

me.benefitID.value 

Это, кажется, исправили мой вопрос, но я до сих пор путают о конфликтующих ссылках.

0

Access кэширует имена полей как WithEventsAccessField объектов в виде/отчета в то время вы присваивают форма/Источник записи собственности отчета. Это означает, что изменения в таблице или запросе не распространяются на форму/отчет , если только явно переназначить свойство «Источник записи», тем самым вызывая обновление кешированных полей.

Если вы ранее использовали benefitID в качестве члена формы/отчета, но кеш больше не включает это имя поля (даже если источник записи содержит имя поля), то вам нужно будет обновить свойство RecordSource для кэша для обновления и код для компиляции.

Если имя поля benefitID было изменено в источнике записи, вам все равно необходимо обновить RecordSource, но вам также нужно будет обновить ссылки на benefitID, чтобы они использовали новое имя поля.