2017-01-04 3 views
0

У меня есть следующая процедура, я бег (в модуле MS Access) на регулярной основе для переключения связанных строк соединения таблиц из теста для производства и наоборот:память превышена Ошибка в MS Access

Public Function TableRelink() 
    Dim db As Database 
    Dim strConnect As String 
    Dim rs As Recordset 
    Dim tdf As TableDef 
    strConnect = "ODBC;DRIVER=SQL Server;SERVER=MYTESTSERVER;Trusted_Connection=Yes;APP=Microsoft Office 2013;DATABASE=MyDB;" 
    'strConnect = "ODBC;DRIVER=SQL Server;SERVER=MYLIVESERVER;Trusted_Connection=Yes;APP=Microsoft Office 2013;DATABASE=MyDB;" 
    CurrentDb.TableDefs.Refresh 
    For Each tdf In CurrentDb.TableDefs 
     If tdf.Connect <> "" Then 
      tdf.Connect = strConnect 
      tdf.RefreshLink 
     End If 
    Next 
    MsgBox ("Done!") 
End Function 

Вышеуказанное работает в течение нескольких месяцев и месяцев. Примерно неделю назад случайно появилась ошибка. Затем, через несколько минут, без каких-либо вмешательств с моей стороны, это позволит мне снова запустить процедуру. Сегодня ошибка вернулась.

Ошибка времени выполнения '3035': превышен системный ресурс.

Он выброшен на этой линии: tdf.RefreshLink

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

Для справки, я запускаю Office 365 ProPlus на 64-разрядной машине Win10.

+0

Что такое сообщение SO, из которого вы не можете сделать головы или хвосты? – nicomp

ответ

0

Во-первых, использовать дб объект:

Public Function TableRelink() 
    Dim db As Database 
    Dim strConnect As String 
    Dim rs As Recordset 
    Dim tdf As TableDef 

    strConnect = "ODBC;DRIVER=SQL Server;SERVER=MYTESTSERVER;Trusted_Connection=Yes;APP=Microsoft Office 2013;DATABASE=MyDB;" 
    'strConnect = "ODBC;DRIVER=SQL Server;SERVER=MYLIVESERVER;Trusted_Connection=Yes;APP=Microsoft Office 2013;DATABASE=MyDB;" 

    Set db = CurrentDb 
    db.TableDefs.Refresh 
    For Each tdf In db.TableDefs 
     If tdf.Connect <> "" Then 
      tdf.Connect = strConnect 
      tdf.RefreshLink 
     End If 
    Next 
    MsgBox ("Done!") 

    Set td = Nothing 
    Set db = Nothing 

End Function 

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

Например, чтобы перейти от производства к испытанию:

Table1 -> Table1_p 
Table2 -> Table2_p 
... 
Table1_t -> Table1 
Table2_t -> Table2 

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

+0

В чем преимущество использования объекта 'db' в сравнении с просто вызовом' CurrentDb.TableDefs.Refresh'? – Hill

+0

И самое главное, как это исправить мою проблему? – Hill

+0

Ну, большинство других открывают объект только один раз и не видят вашу проблему. И вы спросили: «Кто-нибудь знает, что может вызвать это и/или что можно сделать, чтобы предотвратить это?» – Gustav

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