2015-03-25 5 views
1

У меня есть приложение, которое было создано с использованием Access 2007, отлично работает с DSN, я обновляю приложение для использования DSN-менее соединения с SQL-сервером, т изменять любой код в приложении, но когда я запустить приложение я получаю эту ошибкуОшибка времени выполнения '3326' Этот набор записей не обновляется

ошибки выполнения «3326» этой Recordset не является обновляемым

Sub DnsLessLinkTable() 

    Dim td As TableDef 
    Dim stConnect As String 
    Dim strTablesName(0 To 7) As String 
    strTablesName(0) = "dbo_Directorate" 
    strTablesName(1) = "dbo_Nationality" 
    strTablesName(2) = "dbo_personal" 
    strTablesName(3) = "dbo_Qualification" 
    strTablesName(4) = "dbo_Qualimain" 
    strTablesName(5) = "dbo_Qualisec" 
    strTablesName(6) = "dbo_Section" 
    strTablesName(7) = "dbo_Trips" 

    For Each td In CurrentDb.TableDefs 
     For Each TableName In strTablesName 
      If td.Name = TableName Then 
       CurrentDb.TableDefs.Delete TableName 
      End If 
     Next 
    Next 

    stConnect = "ODBC;Driver={SQL Server};Server=ServerNametest;Database=DBName;Uid=user;Pwd=password;" 
    For Each TableName In strTablesName 
     Dim splitTarget As Variant 
     splitTarget = Split(TableName, "_") 
     Set td = CurrentDb.CreateTableDef(TableName, dbAttachSavePWD, splitTarget(1), stConnect) 
     CurrentDb.TableDefs.Append td 
     AttachDSNLessTable = True 
    Next 
    Err.Description 
End Sub 

единственным столом что dosnt имеет первичный ключ [Personal] в SQL serv эр и я связал его с [dbo_personal]

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

любое предложение, которое поможет

+0

Можете ли вы поделиться кодом, который используете для обновления набора записей? – izzymo

+0

Является ли этот набор записей одной таблицей или запросом? –

ответ

1

доступа может обновлять связанные таблицы только, когда они имеют первичный ключ.
Если у вас их нет, вы получите ошибку «Этот набор записей не обновляется».

Если базовая таблица SQL Server имеет первичный ключ, Access обычно обнаруживает ее и использует ее также в связанной таблице.

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

Если вы связываете вид вручную в DSN, появится окно и попросит вас выбрать столбцы, которые Access следует учитывать в качестве первичного ключа:

select unique record identifier

Когда вы связываете таблицу DSN- меньше (т.е. на код), и вы не укажете первичный ключ, Access свяжет таблицу без первичного ключа.

Итак, я полагаю, что таблица, о которой вы говорите, является либо представлением, либо не имеет первичного ключа.
Когда он был первоначально связан с DSN, кто-то выбрал первичный ключ в всплывающем окне, показанном выше.
Когда вы повторно связали его со своим кодом без DSN, вы, вероятно, не установили первичный ключ, и именно поэтому вы получаете ошибку «Этот набор записей не обновляется».

Решение: После связывания таблицы с кодом, не содержащим DSN, explicitly set the primary key via VBA code.

+0

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

+0

спасибо за помощь, финналы это сработало :) –

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

  • Нет связанных вопросов^_^