大昔、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の場合は’?’です。
そこにパラーメータを渡す場合、
Me.SubgroupsTableAdapter.FillBygid(Me.ScenariosDataSet.subgroups, GroupsDataGridView.CurrentRow.Cells(0).Value)
になります。fillbyidは設定で作ったメソッド。VBの入力補完機能で作り上げたステートメントですわ。
追記2:設定で作ったSQLはステートメント自体がメソッドとして固定されます。
もっとプログラム中でいろいろやりたい場合は、TableConnecter (持ち込んだテーブルごとに自動生成されているはずです。)に対してLINQでコマンドを投げるとできます。
例:
'必ずnew dim ad = New mydbTableAdapters.mydbTableadapter dim table = ad.GetData ' Linq dim q = From mydb In table Select t.id ListBox1.SetSource = q.ToList()
知っていればすぐに操作できるんだけど、見つけるまでがタイヘン。
本当にデスクトップアプリってみーんな作らないの?