2−2 Accessの無い環境でAccessのDBを利用 |
2−1でAccessのデータベースをVisual Basic 2008 Express Editionから利用するやり方を書いたが、Accessが無い場合はどうしたら良いのであろうか?現在 一般的に販売されているパソコンにはEXCELやWORDが組み込まれている事が比較的多いが、Accessのようなソフトは一般的では無い。(企業では使われている場合も多いが)。そんなパソコンの場合にどうしようか?
色々な考え方はあるだろう。それこそ、全てVisual Basic 2008 Express Editionから書くとか、データベースエクスプローラーから書き込むとか、SQL Server Compact3.5をメインで使うとか・・・。でも、私としてはあのAccessの使い勝手の良さは捨て難い。(けど、これが高いんだよね)。「それなら」と、考えた私なりの方法は、Visual Basic 2008 Express EditionでAccessのデータベースだけ作っておいて、データベースとして利用する。テーブルの作成や中身の確認はOpenOfficeOrgのBASEで行う事。これである。
単純にデータベースエクスプローラーでデータベースを作成してしまえば良いのだが、ここで勉強のため(簡単にデータベースを作るため)プログラムを書く事にした。画面のイメージは右のようにした。それぞれのコントロールの名前は以下のようにしている。
フォーム−frmAccdb:テキスト−”AccessのDBを作成”
ラベル1−LblSet:テキスト−”データベースの位置指定”
テキスト−TxtDbset:テキスト−””
ボタン1−btnSerch:テキスト−”参照”
ラベル2−lblMessage:テキスト−””
ボタン2−btnEnd:テキスト−”データベース作成”
ボタン3−btnOwari:テキスト−”終了”
この他、ファイルの位置を指定する為のSaveFileDialog1、タイマー処理用にTimer1、Timer2を画面に配置した。なお、アイコンはパソコン内を検索したら 図のようなアイコンが見つかったので これを流用させてもらっている。
実際の作成は以下の環境で行った。(あまり問題ないとは思ったのだが、Accessを入れていないパソコンでテストしたかった為)
現在使用していない古いノートパソコンをインストールCDで初期化し、Windows98SEで立ち上げる。このPCをWindows2000にアップデート。SP4を当て、次にIE6のSP1を当てる。ウイルスの対応ソフトを入れてから、EXCEL2003をインストールしSP2を当てる。このPCに対し、OpenOfficeOrg2.4のWriterとBaseをインストール。プリンタドライバのみインストールしてから、最後にVisual Basic 2005 Express Editionをインストール。(2008はXPのSP2以降でないと動かせない為。なお、2005のユーザー認証はサーバーに繋がらず行えなかった。もっとも、テスト用い、後で再び初期化する予定)。
このようにして、他のソフトが殆ど無い環境で動作確認をしているので、他のマシンでも問題なく動かせる筈である。メイン部分のAccessデータベースを作成する部分がどうもうまく動いてくれず、仕方が無いので以前VisualBasic6.0で作成したプログラムをアップグレードして利用した為、これらの参照設定が必要となった。設定は、まず上に示したように画面を作成し、ソリューションエクスプローラの画面の参照設定でMicrosoftDAO 3.6 及び、Microsoft.Visual.Basic.Compatibility.dllを追加した。
(このファイルは私の環境の場合には、C:\Windows\Microsoft.net\Framework\V2.0.50727配下に存在していた。なお、通常は「参照設定」は表示されてはいないので、「全て表示」に表示を切り替えて設定する。右の図の2番目のアイコンを使用)。
この部分は、各自で調査して直してみると良いと思う。なお、標準モジュールとして、mjlApg.vbを追加している。(右画面の一番下の部分)。これは、DAOを用いたプログラムの名前空間の参照に使われるもののようで、アップグレードしたソースに自動的に追加されていたものと同じ内容を書いた。そのソフトは以下の通り。Module mjlApg
Friend DAODBEngine_definst As New DAO.DBEngine
End Moduleほんの一行しかないのだが、この設定を登録しないとプログラムを入力する事が出来なかった。後は簡単に書いてみたので、参照してみてください。
Public Class frmAccdb
Dim Jmsg As String 'メッセージ
Dim MyStream As String '作成MDB名称
Dim Fumflg As Boolean 'ファイルの上書き確認
Sub Msgset(ByVal Wkmsg As String)
Me.lblMessage.Text = Wkmsg '引き渡されたメッセージをラベルコントロールに表示する
System.Windows.Forms.Application.DoEvents()
End Sub
Private Sub btnOwari_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOwari.Click
End
End Sub
Private Sub btnSerch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSerch.Click
Dim SaveFileDialog1 As New SaveFileDialog
Dim Jfln As Long 'ファイルの有無確認用
'
SaveFileDialog1.Filter = "Accessファイル (*.mdb)|*.mdb|全てのファイル (*.*)|*.*" 'フィルターを指定
SaveFileDialog1.RestoreDirectory = True '現在のデレクトリを復元する
MyStream = ""
'
If Not SaveFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.Cancel Then 'キャンセルボタン以外を押した場合
MyStream = SaveFileDialog1.FileName 'ファイル名を取得
Try
Jfln = FileLen(MyStream)
Fumflg = True 'ファイルの存在有無を指定
Catch
Fumflg = False
End Try
Jmsg = "指定されたデータベースを作成します。確認後【データベース作成】ボタンを押して下さい。"
Call Msgset(Jmsg)
Else
Jmsg = "作成するデータベースを指定して下さい。"
Call Msgset(Jmsg)
End If
TxtDbset.Text = MyStream 'テキストボックスに指定ファイルを表示
End Sub
Private Sub frmAccdb_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.Timer1.Enabled = False
'メッセージを表示する。
Jmsg = "作成するデータベースを指定して 【データベース作成】ボタンを押して下さい。"
Call Msgset(Jmsg)
End Sub
Private Sub Timer2_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Me.Timer2.Enabled = False
'
End
End Sub
Private Sub btnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnd.Click
Dim Isuu As Integer = 0
If TxtDbset.Text = "" Then 'ファイル未指定の場合
Jmsg = "始めに作成するデータベースを指定してから この処理を指定して下さい。"
Call Msgset(Jmsg)
Else
btnOwari.Enabled = False
Isuu = Ctdb() 'データベース作成処理を起動します。
Select Case Isuu
Case 1
Jmsg = "データベース作成終了しました。暫く待つと処理を終了しますのでお待ち下さい。"
Call Msgset(Jmsg)
Me.Timer2.Enabled = True
Case 2
Jmsg = "データベース作成中エラー。確認し処理を選択して下さい。"
Call Msgset(Jmsg)
btnOwari.Enabled = True
Case Else
Jmsg = "指定データベースが作成出来ませんでした。確認し処理を選択して下さい。"
Call Msgset(Jmsg)
btnOwari.Enabled = True
End Select
End If
End Sub
Function Ctdb() As Integer
Dim WrkDefault As DAO.Workspace
Dim dbsNew As DAO.Database
'
Ctdb = 99
'一旦対象のMDBを削除
Try
If Fumflg = True Then
Kill(MyStream)
End If
Catch
End Try
'ここからDBを作成する
Try
'既存のワークスペースを取得
WrkDefault = DAODBEngine_definst.Workspaces(0)
dbsNew = wrkDefault.CreateDatabase(MyStream, DAO.LanguageConstants.dbLangJapanese, & _ DAO.DatabaseTypeEnum.dbVersion40)
dbsNew.Close()
'
Ctdb = 1
Catch
Ctdb = 2
End Try
End Function
End Classソース自体もそれほど長いわけではないので、別段解説も必要無いだろう。ただ、データベースの作成の部分に書かれているdbVersion40の部分は注意が必要で、この例ではAccess2003用のデータベースが作れた。ここをdbVersion30とすると何故かAccess95形式で作られてしまう。通常はdbVersion40で良いだろう。
(”データベース作成”のボタン名称がbtnEndというのは、どうかと思うが、許して下さい。こちらのミスで名称を間違いました。あと、設定としてSaveFileDialog1のフイルターに”Accessファイル(*.mdb)|*.mdb|すべてのファイル(*.*)|*.*”を指定している。さらに、timer2のインターバルを500に指定している。)。続いて、この出来たデータベースをOpenOfficeOrgのBaseにて開ける事を確認。次に、このデータベースに対しで Baseからテーブルを登録し、内容も入れてみた。(入れた内容は2−1の通り。)
最後に、Excel2003を起動し 作成したデータベースを 「データ−外部データの取り込み−データの取り込み」を利用して画面上に読み込み、内容を確認。正しく読むことも出来た。(なお、Excel2007の場合は、直接Accessのテーブルを読み込む事も可能なので、確認はより簡単に出来るだろう)。
簡単に出来て、メンテナンスもしやすいので使用してみてはいかがだろうか?OpenOfficeOrgのBaseでは、Accessのデータベースに接続は出来ても、新規に作成する事が出来ないので 役に立つと思う。(「それほどまでして、AccessのDBを使う必要があるのか?」と言われればそれまでですが。)