2010-12-13 16 views
1

SQL Server 2005データベースにリンクテーブルを持つAccess 2003データベースがあります。 AccessとSQL Server間のODBC接続を作成するために使用されるユーザー情報(パスワード)が最近更新されました。Access 2003でリンクテーブル情報を編集する

私はAccessデータベースを開いて、リンクテーブル情報を編集しようとすると、テーブルを開いて自分のデータを見ることができます。しかし、Accessを閉じてAccessデータベースを再度開くと、パスワード情報が返されてしまい、ODBC接続エラーが発生するようです。

私が間違って行っていることは誰でも知っていますか?

フォローアップとして、このアップデートが必要な数多くのリンクされたテーブルを持つ約12のAccessデータベースがあるようです。これはこの情報を更新する最善の方法ですか? ODBC接続で指定されたWorkstation-IDが異なるため、異なるマシンを使用してリンクテーブルが作成されているようです。

+1

あなたはリンクテーブルマネージャーを見ましたか? 「パスワードを保存する」チェックボックスが必要です。それが利用できない場合は、http://support.microsoft.com/?id=207823 – Fionnuala

+0

@Reemouを参照してください。良い考えですが、ビューにリンクされたリンクテーブルの問題です。 –

+0

テーブルが多数ない場合は、テーブルを削除し、適切なDSNを作成した後にテーブルを再接続します。 –

答えて

0

TableDefからConnectプロパティを更新し、変更をRefreshLinkで保存するルーチンを記述します。

+0

一般に、ODBCリンクテーブルでは、すべてのメタデータが最新であることが保証されるため、ほとんどの場合、リンクテーブルを削除して再作成してください。 –

0

リンクテーブルマネージャ(LTM)の問題は、実際にSQLビューにリンクしているテーブルをリンクしている場合です。その場合、LTMは適切なPKを再割り当てせずに「テーブル」を再リンクし、更新不可能になります。 私はVBEから始めるのに使ったコードを書いていますが、それはすばやく汚いものですが、必要に応じてそれを確実に適応させることができます。 テーブルには1つ、パススルークエリには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リンクテーブルでは、TableDefの接続文字列を更新することはありませんが、メタデータが最新であることが保証されているため、テーブル定義を削除してゼロから再作成することはありませんビューの更新不可能性に関する)。 –

関連する問題