Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : Access 2010)
ODBCリンクテーブルのデータ型
投稿日時: 17/09/20 14:20:35
投稿者: masunona

社内で,SQLServerのテーブルを,ODBC接続でAccessにリンクして使用しています。
以前は,Accessテーブルをしようしていましたが,SQLServerに切り替えました。
環境はざっくりと以下です。
 
SQLServer→Windows Server2012
ファイルDSN→Windows Server2012
Access本体→各自のPC
 
最近,特定のテーブル全体がロックすることが続けてありました。
SQLServer Management Studioでサーバーを再起動するとすぐになおるのですが,
その原因が,データ型にあるのではないかとの指摘を受け,見てみると,
SQLServerでは,どのテーブルのIDも
・データ型:int
・主キーに設定
・IDENTITYの指定:はい
・(IDである):はい
・IDの増分:1
・IDENTITYシード:1
 
になっているのに,リンクしたAccessを見ると,主キーが
オートナンバー型になっていたり,長数値型になっていたりすることに気づきました。
 
これがテーブルロックの直接の原因かどうかはわかりませんが,
データ型がテーブルによりばらばらなのは気持ち悪いので,オートナンバー型に統一したいです。
ですが,Access上で変更しようとすると,
「この操作は,このタイプのオブジェクトには実行できません」
と出てしまい,変更できません。
長数値型に変更することはできました。
 
・ODBCリンクするときに,データ型を指定することはできないものでしょうか?
・オートナンバー型はあきらめ,IDを長数値型に変更しても,問題ないでしょうか?
(Accessテーブル時代はすべてオートナンバー型にしていたので抵抗があります)
・ロックしたとき
「ODBCリンクテーブル”××”での更新に失敗しました」
と出たのですが,この原因はなにが考えられるかも,教えていただけると嬉しいです。
 

回答
投稿日時: 17/09/20 17:20:32
投稿者: sk

引用:
SQLServerでは,どのテーブルのIDも
データ型:int
・主キーに設定
IDENTITYの指定:はい
・(IDである):はい
・IDの増分:1
・IDENTITYシード:1
  
になっているのに,リンクしたAccessを見ると,主キーが
オートナンバー型になっていたり,長数値型になっていたりすることに気づきました。

・mdb / accdb ファイル上にリンクテーブルを作成してから
 その参照先である SQL Server データベース側で
 ソーステーブルの定義内容を変更した後、
 Access 側でそのリンクテーブルのリンクの更新が行なわれていない。
 
・SQL Server データベースへの接続に使用している
 ドライバ/プロバイダに何らかの問題がある。
 
引用:
ODBCリンクするときに,データ型を指定することはできないものでしょうか?

Access のリンクテーブルのデザインビューを介して、
SQL Server データベース側のソーステーブルの
定義内容を直接変更することは出来ません。
 
SQL Server データベースを参照先とする ODBC リンクテーブルにおける
各フィールドのデータ型は、SQL Server データベース側での
各フィールドの(リンク作成/更新時点での)定義内容に基づき、
Access 側で有効なデータ型としてマップされたものに過ぎず、
完全に互換しているわけではないからです。
(例えば date 型や time 型のフィールドは、
 Access のリンクテーブル上ではテキスト型として扱われる。
 Access の日付/時刻型として扱われるのは datetime 型だけである)
 
とりあえず、リンクテーブルマネージャーを使用して
ODBC リンクテーブルのリンクの更新を行なわれることを
お奨めします。

トピックに返信