04.ODBCを省略してデータベースにアクセスする

前回までの講座でODBC接続によるデータベース操作を紹介しました。この方法ではMS-Accessのデータベースファイルに限らず、SQL ServerやOracleといった外部DBでも基本的には同じプログラムで対応することができて大変便利です(ただし、SQL文の細かい仕様の違いにより、そのままでは動かないケースもあります)
ただ、ODBCを仕様する方法だと、プログラムをインストールするパソコンごとにODBCの設定を行わなければいけないという運用面での煩雑さがあります。
もし、ODBCの設定を忘れたままプログラムを実行したら、

ODBCエラー

とエラーメッセージが表示されて、それ以降の操作ができなくなってしまいます。
そこで、今回はADODCコントロールで接続文字列にファイルDSNを使うことにより、静的なODBC設定を行わずにDB接続する方法を紹介します。
今回は、前回のプロジェクトの簡単な手直しで済みますが、必要な方はサンプルプロジェクト4をダウンロードしてください。

では、まずADODCのプロパティを変更します。ちなみにODBC接続が設定されていない状態だと、デザインするためにフォームを開いただけでも上記ODBCのエラーが表示されます。
が、ここは気にせずadoCategolyのプロパティページを開きます。
adodc接続ソース
「接続文字列を使用する」の下の、「DSN=DbPhotos」という文字列を削除して空っぽにします。
adodcレコードソース
レコードソースもadoCmdUnknownに変更しておきます。
OKでプロパティを保存して、次にFormのLoadイベントを以下のように修正します。

Private Sub Form_Load()
 dbfile = App.Path & "\DbPhotos.mdb"
 adoCategoly.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbfile
 adoCategoly.RecordSource = "Categoly"
 adoCategoly.Refresh
 Set dgrCategoly.DataSource = Nothing
 With adoCategoly.Recordset
  .MoveFirst
  While Not (.EOF)
   lstCategoly.AddItem .Fields("CategolyID") & " " & .Fields("Categoly")
   .MoveNext
  Wend
  .MoveFirst
 End With
 Set dgrCategoly.DataSource = adoCategoly
 dgrCategoly.Columns(0).Visible = False
 dgrCategoly_RowColChange 0, 0
End Sub

青字で書いた所が、今回追加したコードです。(HTMLの表示上、行頭に漢字スペースが入ってるのでコピーする場合は注意してください)
adoCategoly.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbfile
の部分が、Adodcの接続ソースに代わるもので、
adoCategoly.RecordSource = "Categoly"
がレコードソースプロパティです。

以上で、修正完了です。早速実行してみましょう。
form1
ODBCの設定がなくても実行できるはずです。
ちなみに、今回はCategolyテーブルに適当なカテゴリを登録してみました。
PhotoレコードのCategoly列には「ポートレート」という文字列ではなく、「3」というコードで登録されます。
これはカテゴリのコンボボックスにコード+名称を文字列として表示させ、DBに登録する際にコードだけを取り出してセットしているからです。

次回はデジカメで撮った写真に埋め込まれるExifという情報を使って、撮影情報などをDBに登録する方法を紹介します。
デジカメ整理アプリの実用化に向けて更に一歩前進です。


<<目次に戻る