【PC】VB6 から VB2010 へ移行(その2) DAO
DAO は古い。最後の DAO。
これからは ADO いや OLEDB いろいろと「テーゼ」は聞かされるのだが
データベースに ACCESS MDB を使う場合には、いろいろと試してみたけれども、やはり DAO がベストだ。
DAO は Data Access Object と、汎用性のあるデータベースへのアクセスコントロールのようなふりをしつつ、明らかに ACCESS MDB すなわち JET 用のもので、使いやすさも速度的なパフォーマンスも圧倒的に優位だ。
ところがMicroSoft社は、この DAO を切り捨てるという・・・
態度を繰り返していたため、なかなか .NET になってまで DAO を採用するのはどうかと悩み仕切りであった。
とくに Windows 7 の 64Bit ではどうなるのか様子を拝見していたが、結局 DAO は WOW の中でしっかり生き残り、なくなるぞなくなるぞと脅しをかけつつ ACCESS 2010 なんかも発売され まったく消えていきそうな雰囲気はない。
そこで、将来的に SQL Server や 他のデータベースに移行する予定もなく、LAN環境でも問題がないような場合。つまり ACCESS MDB で行くのだ、というものの場合は DAO を使うことにした。
さんざん、なくなる、消える、最後の、と言われ
最適化は JRO を使えばできる、と
DAO では CompactDataBase ができないかのようなネット上の情報が多いが、DAOに関していえば VB6 も VB2010 もなく、ほとんど変わっていないことがよくわかった。
ひょっとすると .NET 初期〜VB2005 あたりまでに DAO に何かあったのかも知れないが 筆者が使っている VB6 と VB2010 では、宣言方法や使い方に、ほんのちょっぴり違いはあるのもの、ほぼ100% DAO をしてくれている。どういうわけか処理速度も速いような??
最適化では DBEngine というものが VB6 では使われていた。
VB2010 では、これは宣言すれば使えるようになる。
Public Db_Engine As New DAO.DBEngine
これでもう DB_Engine は VB6のDBEngine だ。
(参照設定で DAO3.6 を入れておくこと)
最適化は
Db_Engine.Compactdatabase( A.MDB, B.MDB )
でそのまま動く。
DataBaseや Recordset も
Public Db_Um As DAO.Database
Public DB_TksRs As DAO.Recordset
と DAO.がついてるだけで 宣言方法は同じ。
RecordSetにいたっては、
Dt2("社員名")
というような暗黙の省略した書き方ではエラーが出てしまうが
Dt2.Fields("社員名").Value
としてしまえば、扱い方は同じ。
Edit
Update
Addnew
Delete
Movefirst
Moveprevious
Movenext
MoveLast
全部同じ。
トランザクションなども全部同じように扱える。
そこで筆者は VB6 + ACCESS MDB の資産 .NET に移行してもそのまま DAO で書いている。
次回記載予定のプロセス間通信で、フックして資産を残したまま、改造・追記を .NET で行ったりしている。