2014/06/23

Access 2013 ODBC リンク テーブル と SQL Server - 1

勉強用に SQL Server 2014 を インストール したのに別のことを始めてしまう。
Access 2013 としているけど、Access 2007 / 2010 と変わらんでしょう。違いがありそうなときは別途考える。
Access 2013 でSQL Server などODBC ソースに接続できる リンク テーブルの作り方については、
SQL Server のデータにリンクする
にあるから特に説明はない。DSN-less とかの工夫するくらいだろうか。
ともあれ、SQL Server にテーブルを作成して、ODBC リンク テーブルを。


CREATE TABLE [dbo].[Table_1](
 [ID] [int] IDENTITY(1,1) NOT NULL,
 [F_Num] [int] NULL,
 CONSTRAINT [PK_Table_1]
 PRIMARY KEY CLUSTERED ([ID] ASC) ON [PRIMARY]
)
Sub CreateODBCLinkTable()
    Dim tdf As TableDef
    Set tdf = CurrentDb.CreateTableDef("")
    tdf.Connect = "ODBC;Driver={...."
    tdf.SourceTableName = "dbo.Table_1"
    '検証用:パスワードは記憶させる
    tdf.Attributes = DAO.TableDefAttributeEnum.dbAttachSavePWD
    tdf.Name = "Table_1"
    CurrentDb.TableDefs.Append tdf
    Application.RefreshDatabaseWindow
End Sub
できました
で、ここまではよくある話。やりたいことは、Access Connectivity Engine (ACE) と SQL Server がどんな話をしているか?ということ。
SQL Server を前提ににしているから SQL Server Profiler で ガッツリ みれるし、その気になれば パケット を キャプチャ すればよいだろう。 だけど面倒なので、Access 側で実行計画 / ShowPlan では見れない内容が観察できたらよいかなと。そこで、TraceSQLMode を有効化してログを出力してもらいます。
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Office\15.0\Access Connectivity Engine\Engines\ODBC' `
                 -Name TraceSQLmode `
                 -Value 0x00000001
Click-to-Run 版や 64bitOS上のAccess 32bit の場合は、エントリが異なる。当然、Access 2007 / 2010 でも異なる。レジストリ エディタ で "TraceSQLmode" を検索すればよいけど、気が向いたら調べる。

ぼちぼち、続きます。

0 件のコメント: