ブログ

Microsoft Accessの移行について

2012年12月3日 16:27 | シスキュー技術部 | | 20,144 views
タグ: , , ,

このエントリーをはてなブックマークに追加
はてなブックマーク - Microsoft Accessの移行について
reddit にシェア
Pocket
LINEで送る

アクセスがもっと便利に!

ACCESS

Microsoft Office Suiteの中に含まれる、データーベースアプリケーションAccess(アクセス)について、過去にも

Access2013へのコンバージョン

Accessのリプレースシステム開発

という記事を書かせていただいております。

今回Accessがどうなるのか、今あるAccessの資産をどうすればいいのか、ということについて考えてみます。

Microsoftサポートへの問い合わせ

現在RTM(Release to manufactureing、製品リリース用バージョン)版が一部提供開始されているOffice2013ですが、これについて、気になる点をサポートに問い合わせてみました。

・Office2013はいつ発売になるのか

(回答)現在のところ、正確な発売日は決定されていない。

・Office2013リリース後はOffice2010は継続して入手できるのか

(回答)従来であれば、後継製品リリース後にも旧バージョンはしばらく併売となるのが慣例。今回、必ずしもそうであるとは回答できないが、Office2010がすぐに手に入らなくなることはないのではないか。

・Office2013からOffice2010へのダウングレードなどはあるのか

(回答)ダウングレードはないが、現在Office2010を購入すると、Office2013への無償アップグレードはある。現在Office2010を購入して、Office2013へアップグレードしても、アンインストールしてOffice2010を再インストールすることは可能。

ということでした。

AccessについてもOfficeSuiteの一部ですから、同様に考えることができるでしょう。

旧来のAccess資産について

access convert

Access97のmdbファイルはそのままAccess2007/2010に変換することはできません。

この場合、一度Access2000あるいはAccess2003で一度形式変換すれば、Access2007/2010に読み込ませることが可能となります。

Access97はかなり古いバージョンではありますが、業務用途に作りこまれている場合、なかなか入れ替えが難しいという状況もあるのではないでしょうか。

ここで気を付けなければならないことが何点かあります

・LenBの挙動が変更されている

LenBは文字列のバイト数を数えるVBA関数です。Access97では半角文字を1、全角文字を2として計算されていましたが、Access2000以降では、すべての文字が2として計算されるようになっています。

Access97も内部ではUnicode(UTF-16)としてデータを持っているようですが、以前のバージョンのVBAとの互換性のためにこのような仕様となっていたものと思われます。

UTF-16は一つの文字を16bit(2バイト)として取り扱う符号化形式ですので、半角英数文字も全角文字も2バイト文字として扱われます。

・レポート、フォームなどで文字が切れることがある

テキストフィールドの仕様が変更になったようで、そのままではレポートの文字が切れてしまう、入力フォームのフィールドの幅が足りないといったことが頻繁に起こります。

レポートやフォームを精査すれば、これらの変更には対応できますが、変換してすべてチェックしないと、レポートで一文字でも落ちていたりすると、重大な不具合になりかねません。

・VBAでのコードの変更

コードを例示すると、Access97では下記になります。

[vb]
Dim db As Database, cust As Dynaset, chk As String
If IsNull(日付) Then Exit Function
End If
Set db = CurrentDb()
Set cust = db.CreateDynaset("年月テーブル")
[/vb]

これが、Access2003以降では、下記のようになります。

[vb]
Dim db As DAO.Database
Dim cust As DAO.Recordset
Dim chk As String If IsNull(日付) Then Exit Function
End If
Set db = CurrentDb()
Set cust = db.OpenRecordset("年月テーブル",dbopenDynaset)
[/vb]

このように、Accessのバージョンに応じたVBAコードの書き直しが必要となります。

Access2013で廃止された機能

Access2010まで提供されていたアップサイジングウィザードは、ADPとともに廃止になるようです。

アップサイジングウィザードはAccessデーターベースから、SQLServerへデータを移行し、AccessをSQLServerのクライアントとして使用するツールです。

テーブルはそのままSQLServerのテーブルに変換、クエリはストアドプロシージャに変換して接続、フォームとレポート、マクロ、モジュールなどをAccessのADPで実行する形になります。

これらの機能がAccess2013ではなくなってしまいます。

必ずしもうまくいくケースばかりではない、あるいはSQLServerとAccessのバージョンの組み合わせなどでうまく完了しないといった問題もありましたが、これらの機能が完全になくなってしまうのは、AccessからSQLServerへのアップサイジングの手段が一つ失われることになります。

Accessをこれからどう扱えばいいか

旧来の資産を活かす、あるいはSQLServerへのアップサイジングを予定している場合は、Access2010が発売されているうちに行うべきかもしれません。

Windwos8ではAccess2003以前のAccessが動作サポートされていないため、これから新規にPCを調達する場合はWindows7へのダウングレード権と所有しているAccessのバージョンを確認しておくことも必要です。

Accessはデータベースとしての基本機能と、レポート、フォーム、VBAの開発環境が一体となっており、代替のソフトウェアについては乏しいのが現実です。

互換性はありませんが、FileMakerが同じような分野のソフトウェアといえます。

.netで作成されたクライアントとSQLServer環境への移行についても、それなりの規模の開発となります。

弊社でもAccessから.net+SQLServer環境への移行は複数行っておりますので、もしお力になれるようでしたら、一度ご相談ください。

アクセスがもっと便利に!