大昔、VBでシステム開発していたころ、アプリケーションレベルのテストのためによくAccessを使ったものでした。

(以前書いたように)デスクトップアプリで一人ユーザーならAccessでええやんと思って使い始めたらハマった。備忘録。

Visual StudioにはSQL Server Local DBがついてきますが、これで作ってどうやって配布パッケージにしたらいいのか、ついにわからず仕舞いです。できないんじゃないかな?

そこでAccess 2016のライセンスを買い、www.office.com/setupからパッケージダウンロードしました。

64bit Windows10に入れてみたけど、プロフィール見たらAccessは32bit版だった。(確認してくださいね。)

さっそくデータベースを作ろうと、データをエクセルで整理して、CSVファイルを作り(今のAccessってSQL insert文のファイルを受け付けないのね。こんなアホな仕様のDBMSはAccessだけだわ)読み込ませてなんとか作成。
idのつじつまあわせに苦労したけど。正規化したテーブル作る時はいつものことです。

当然、accdb形式。

次にこのチュートリアルに従って接続を確立しようとする。

だってデータソースに書いてあるAccessにはつながらないんだもん。チュートリアルによるとそれはmdb用だとのこと。

しかし「Microsoft Office 12.0 Access データベース エンジン OLE DB プロバイダー」は見当たりません。

そもそも12.0ってとこはいくらチュートリアルでもおかしい。

2016版はないのかと調べるとありました。

Microsoft Access Database Engine 2016 redistributable

32bit版と64bit版がありますが、素直にインストールできません。どちらを入れようとしてもビットモードが違うとはねられます。

私のAccessは32bit版ですから、それを選んで

AccessDatabaseEngine.X64.exe /quiet

とコマンドラインで指定してやっと入りました。
(ちなみに配布する時は32ビット版のace.OLEじゃなきゃ動きません。)

他はチュートリアルどおりで接続できました。

今はほとんどの人がやらないのかもしれませんが、Windowsでデスクトップアプリ作る時、Accessでデータベース作って使うとアプリは作りやすいです。

SQLiteも試して問題はなかったけど、開発環境のサービスはないからねぇ。ここらへんは考え方によりますけど。

あー、疲れた。

追記:Accessをデータベースとして登録して、プログラムからパラメータを渡してクエリを作りたい場合、この記事を読まなきゃできません。理由はパラメータがSQLサーバーの場合は@xxxxですが、Accessの場合は’?’です。

そこにパラーメータを渡す場合、

になります。fillbyidは設定で作ったメソッド。VBの入力補完機能で作り上げたステートメントですわ。

追記2:設定で作ったSQLはステートメント自体がメソッドとして固定されます。
もっとプログラム中でいろいろやりたい場合は、TableConnecter (持ち込んだテーブルごとに自動生成されているはずです。)に対してLINQでコマンドを投げるとできます。

例:

知っていればすぐに操作できるんだけど、見つけるまでがタイヘン。

本当にデスクトップアプリってみーんな作らないの?