1

すべてのテーブルがSQLServer2005内のリンクテーブルとして存在するAccess2003データベースMDBがあります。MDBファイルには、正しいSQL Serverとログオン資格情報(信頼できる接続)を指すすべてのODBC情報が含まれています。

MDBファイルに新しいリンクテーブルを追加したいのですが、ODBC接続情報を指定する方法がわかりません。新しいリンクテーブルを追加しようとすると、DSNファイルを検索または作成するように求められ続けます。すべてのマシンで新しいDSNエントリを作成する必要はありません。むしろ、AccessMDBファイル自体にすべての情報を保存したいと思います。

既存のデータベースでは、テーブル名に「カーソルを合わせる」と、ODBC接続情報をツールチップとして表示できます。私がする必要があるのは、同じ接続情報を使用して別のリンクされたテーブルを追加することです。

テーブルがリンクされているSQLServerにアクセスできます。追加したい新しいテーブルをすでに作成しました。私はそれにリンクする方法を見つける必要があります。

4

3 に答える 3

2

それが価値があるので、私は怠け者です。開発マシンにDSNを保持し、それを使用して新しいリンクテーブルを作成します。次に、Doug Steeleのコードを実行して、フロントエンドをエンドユーザーに配布する前に、リンクをdsnless接続に変換します。

于 2010-04-28T00:36:18.093 に答える
1

既存のテーブルの接続文字列を使用するか、次のようにすることができます。

''This is a basic connection string, you may need to consider password and so forth
cn = "ODBC;DSN=TheDSNName;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=TheDatabaseName;"

テーブルを接続する方法がいくつかあります。

sLocalName = "TABLE_SCHEMA" & "_" & "TABLE_NAME"

With CurrentDb
    If DLookup("Name", "MSysObjects", "Name='" & sLocalName & "'") <> vbNullString Then
        If .TableDefs(sLocalName).Connect <> cn Then
            .TableDefs(sLocalName).Connect = cn
            .TableDefs(sLocalName).RefreshLink
        End If
    Else
        ''If the table does not have a unique index, you will neded to create one
        ''if you wish to update.
        Set tdf = .CreateTableDef(sLocalName)
        tdf.Connect = cn
        tdf.SourceTableName = "TABLE_NAME"
        .TableDefs.Append tdf
        .TableDefs.Refresh
    End If
End With

テーブルに一意のインデックスがない場合、これによりメッセージボックスが生成されます

  DoCmd.TransferDatabase acLink, "ODBC Database", cn, acTable, "TABLE_NAME", sLocalName
于 2010-04-27T13:21:01.703 に答える
0

テーブルを正常に追加できたので、ここで手順を詳しく説明したいと思いました。

  1. Access内の「新規」をクリックして新しいテーブルを追加し、「リンクテーブル」を選択しました
  2. [ファイルのリンク]ダイアログが表示されたら、ファイルタイプリストボックスからODBCを選択しました
  3. 新しいDSNアイテムを作成しました(テーブルへの最初のリンクにのみ使用されます)
  4. DSNの作成に進み、SQLServerで作成されたテーブルにリンクするプロセスに従います。
  5. テーブルはAccessに表示されます

次に、コードモジュールで次のサブルーチンを作成しました。基本的に、ODBC接続を持つAccessのすべてのテーブルをループし、適切なODBC接続情報をテーブル定義に設定します。以前に作成したDSNは不要になったため、削除できます。

Public Sub RefreshODBCLinks()

    Dim connString As String
    connString = "ODBC;DRIVER=SQL Server Native Client 10.0;" & _
             "SERVER=<SQL SERVER NAME>;UID=<USER NAME>;" & _
             "Trusted_Connection=Yes;" & _
             "APP=<APP NAME>;DATABASE=<DATABASE NAME>"

    Dim db As DAO.Database
    Dim tb As DAO.TableDef
    Set db = CurrentDb
    For Each tb In db.TableDefs
    If Left(tb.Connect, 4) = "ODBC" Then
        tb.Connect = connString
        tb.RefreshLink
        Debug.Print "Refreshed ODBC table " & tb.Name
    End If
    Next tb
    Set db = Nothing

End Sub

注...上記のサブルーチンを実行するには、Accessコードモジュール内の「イミディエイト」ウィンドウにその名前を入力しました。このルーチンを実行するマクロを作成して、新しいテーブルを作成するたびにマクロを実行することもできます。

彼の答えと援助のための「Remou」に感謝します!

PSAPP=<APP NAME>接続文字列とその目的に興味がある場合は、この記事を確認してください。http://johnnycoder.com/blog/2006/10/24/take-advantage-of-application-name/

于 2010-04-27T15:08:13.983 に答える