AccessとSQLServerとODBCリンクについてはいろいろ情報があるので何とかできました。
アクセスのバージョン OSのバージョン ドライバのバージョン違いによるエラー
LAN上の他のPCからの接続設定、権限の設定など
SSMSの使い方もあまり知らない状態のため悪戦苦闘しました。
問題は、自分で開発した業務システムが今までと同じように運用段階まで構築できるかです。
それがわかるまでは、完全移行は恐ろしくてできません。
通常環境説明
Access2003 Win8.1Pro 32bit 上でアクセスの業務システムを使っています。
現在は 同じLANにあるNASにアクセスのテーブルを置いてリンクテーブルで
クライアント、サーバー形式で運用してます。
他にも Win10pro64bit他10台近くのPCからつなげています。
Access2016 32bit、Access2016 64bit、Access2003と混在しています。
データ件数は常は6万~10万件くらいで、2GBになる前に過去のデータを削除しています。
一部のテーブルがデータも増えたり大きいため、ロックして業務が止まることも多くなり
SQLServer(EXPRESS)にテーブルをインポートしてリンクできないか運用試験をしています。
今回の試験環境説明
サーバー側は SQLServerEXPRESS2019を
Win10pro64bit と Win11pro64bit の 2台に設置して それぞれで試験しました。
クライアント側は Win8.1pro32bit と Access2003です。
Access2003からSQLServerへのテーブルの移行には Microsoft SSMA を使いまいした。
https://docs.microsoft.com/ja-jp/sql/ssma/sql-server-migration-assistant?view=sql-server-
英語版しかありませんが無事マイグレーションも出来きました。
マイグレーションはアクセス2003ではできなかった
アクセス2016 32bitが入っている別のPCからAccess2003ファイルをSQLServerにマイグレーションを行いました。
アクセス2003から はじめから入っていたODBCドライバ SQLServerを使ってリンクしました。アクセス2003から リンクテーブルも閲覧できます。ちなみに最新のODBC Driver 18 for SQLServer はエラーで接続できませんでした。
今度はフォームを使ってSQLServerのデータを表示したところ、日付に関するデータが
2022-01-01 12:30:25 などに表示され、フォームを書式を yyyy/mm/ddなどにしても変わりません。アクセスから SQLServerのテーブルをデザインビューで見ると、全て 日付/時刻型でなく テキスト型になっていました。こんどは、SQLServer側にSSMSでテーブルデータを見ると、datetime2(0)になっていました。Access2003では datetime2型は対応してないために すべて テキスト型に変換されたようです。こんどは、SQLServerで datetime2型を datetimeにテーブルをデザインしましたが、エラーがでて変更できません。
SQLServerのツール→オプション→デザイナー→テーブルの再作成を必要とする変更をできないよにする。のチェックを外しました。●
なんとか 10くらいあったdatetime2をdatetimeに変更はできたのですが、1つだけ変更できずにエラーがでるフィールドが残ります。
指定日フィールだけが何回やってもエラーになります。
アクセス2003側のテーブルでその変換できないフィールのデータをAZで並び替えると ありえない日時のデータが1件見つかったため、そのデータを空欄にしました。
再度SQLServer側で テーブルの datetime2→datetimeに変更したら、テーブル変更ができました。
SQLServerの再起動と Access2003側からのODBCリンクを初めからつなげなおしました。
今度は見事、日時/時刻型になり、フォームからも普通に 2022/09/10と表示されました。
Access2003 と SQLServer ODBCリンクへの 問題が少し解決できました。
コメント