2010-12-13 5 views
1

SQL Server 2005 데이터베이스에 연결된 테이블이있는 Access 2003 데이터베이스가 있습니다. Access와 SQL Server 간의 ODBC 연결을 만드는 데 사용되는 사용자 정보 (암호)가 최근에 업데이트되었습니다.Access 2003에서 연결된 테이블 정보 편집

Access 데이터베이스를 열고 연결된 테이블 정보를 편집하려고하면 테이블을 열고 데이터를 볼 수 있습니다. 그러나 Access를 닫고 Access 데이터베이스를 다시 열면 암호 정보가 다시 표시되고 ODBC 연결 오류가 발생합니다.

누구든지 내가 뭘 잘못하고 있는지 알아?

후속 조치로서이 업데이트가 필요한 수많은 연결된 테이블이있는 약 12 ​​개의 Access 데이터베이스가있는 것으로 보입니다. 이 정보를 업데이트하는 가장 좋은 방법입니까? ODBC 연결에 지정된 워크 스테이션 ID가 다르므로 연결된 테이블이 다른 시스템을 사용하여 작성된 것 같습니다.

+1

링크 된 테이블 관리자를 보았습니까? '비밀번호 저장'확인란이 있어야합니다. 사용할 수없는 경우 http://support.microsoft.com/?id=207823 – Fionnuala

+0

@Reemou, 좋은 생각이지만 뷰에 연결된 링크 된 테이블의 문제를 참조하십시오. –

+0

테이블이 많지 않은 경우 테이블을 삭제하고 적절한 DSN을 만든 후 다시 연결하십시오. –

답변

0

TableDef에서 연결 속성을 업데이트하고 변경 사항을 RefreshLink로 저장하는 루틴을 작성하십시오.

+0

일반적으로 ODBC 연결된 테이블의 경우 모든 메타 데이터를 최신 상태로 유지하므로 링크 된 테이블을 삭제하고 다시 만드는 것이 좋습니다. –

0

링크 된 테이블 관리자 (LTM)의 문제점은 SQL 뷰에 실제로 연결된 테이블을 링크 한 경우입니다. 이 경우, LTM은 적절한 PK를 재 할당하지 않고 "테이블"을 다시 링크 할 것이며, 업데이트 할 수 없게됩니다. VBE에서 시작하는 데 사용했던 몇 가지 코드를 작성했습니다. 빠르고 지저분한 것입니다.하지만 필요할 때 확실히 적용 할 수 있습니다. 테이블에는 2 개, 경유 쿼리에는 1 개씩 2 개의 하위가 있습니다.

Option Compare Database 
option explicit 

Const kOld = "remote.g" 'string to identify old server 
'new server odbc string 
Const kConnLux = "ODBC;DRIVER=SQL Server Native Client 10.0;SERVER=xxxx;UID=yyyy;PWD=zzzz;" 

Sub UpdateTables() 
    Dim db As Database, td As TableDef 
    Dim hasIndex As Boolean, strSql As String 

    Set db = CurrentDb 
    For Each td In db.TableDefs 
     If InStr(1, td.Connect, kOld) > 0 Then 'lien vers CE serveur ? 
      If td.Name Like "dbo_vw*" And td.Indexes.count = 1 Then 'table = vue attachee --> pbl de clef primaire 
       strSql = "CREATE INDEX " & td.Indexes(0).Name & " ON [" & td.Name & "](" & td.Indexes(0).Fields & ")" 
       ' convert field list from (+fld1;+fld2) to (fld1,fld2) 
       strSql = Replace(strSql, "+", "") 
       strSql = Replace(strSql, ";", ",") 
       hasIndex = True 
      Else 
       hasIndex = False 
      End If 
      td.Connect = kConnLux 
      td.RefreshLink 
      Debug.Print td.Name 
      If hasIndex And td.Indexes.count = 0 Then 
       ' if index now removed then re-create it 
       CurrentDb.Execute strSql 
      End If 
     End If 
    Next td 
    Debug.Print "Done" 
End Sub 

Sub UpdateQueries() 
    Dim db As Database 
    Dim td As QueryDef 
    Set db = CurrentDb 
    For Each td In db.QueryDefs 
     If InStr(1, td.Connect, kOld) > 0 Then 
      td.Connect = kConnLux 
      Debug.Print td.Name, td.Connect 
     End If 
    Next td 
End Sub 
+0

ODBC 연결 테이블을 사용하면 TableDefs의 연결 문자열을 새로 고치지는 않지만 절대로 삭제하고 처음부터 다시 만들 수 있습니다. 메타 데이터가 최신인지 (즉, 어떤 업데이트가 원인인지 알 수 없기 때문입니다. 뷰의 비 - 업데이트 가능성). –

관련 문제