ITで遊ぶ

Visual Basic 2017 vs. Microsoft Access 2016

大昔、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()

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

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

関連記事

  1. PHPのクラスの継承

  2. やっぱりドットインストールは勉強にいい

  3. Visual BasicとAccessDBを配布パッケージにする

  4. Perl定石

  5. CodeIgniter 別のViewの書き方

  6. 水中のGoproをコンピューターで操作する

  7. Googleの検索結果をスプレッドシートに抜く方法

  8. JavaScriptでオブジェクト指向をするには