質問: 長い間Microsoft ACCESS+VBAでデータベースを使用してシステムを趣味と実用を兼ねていろいろ作ってきました(自己使用のシステム)。 最近VISUAL STUDIOというものがバージョンによっては無料で使用できるのを知り、デスクトップアプリをいずれ作りたいと思っていたのでチャレンジしております。 環境は、Windows10、Visual Studio 2015です。 最終目標はデスクトップアプリとしてWindowsFormアプリで、顧客管理システム、施設予約システム等が作れるようになることが目標です。 VBの言語自体はVBAとは若干違うものの近い部分も多く参考書籍や、ネットを参考に何とか移行できそうです。 Visual Studioで書籍などを片手にデータベースを見よう見まねで作って、DataGridViewなどに表示はできているのですが、いまいち腑に落ちずにいます。 そこで今回質問させていただきたいのは、データベースの扱いについてです。 何がしたいという具体的な質問ではなく、Visual Studioの概念が理解できておらず、ダラダラとした文章になってしまいますがお許しください。 --- ◆VisualBasicで、例えばプロジェクト(projectA)を作り、サーバーエクスプローラーからSQL SERVERデータベース(projectA.mdf)を作ると、projectAフォルダの中には各種コードのファイルなどとともにprojectA.mdfができると思います。 **質問1:** これは、ACCESSでシステムのaccdbとテーブルデータのみのaccdbを分けて作り、リンクテーブルとして作ることがありますが、これと同じようなとらえ方でいいのでしょうか? --- ◆ACCESSでは、デバッグ、ビルドという概念が基本的にはなく、システムを作りこみながらテストでデータを登録していくと、どんどんテーブルにデータが蓄えられていき、データの入力とシステムの構築が同時にできてしまいます。 Visual Studioではデバッグ、ビルドをすると先ほどのプロジェクトフォルダ内に、「bin」-「Debug」,「Release」や「obj」-「Debug」,「Release」フォルダができ、その中にもexeファイルや、データベースのmdfファイルもできるかと思います。 **質問2:** このbinとobjの2つのフォルダはどういう違いがあるのでしょうか? **質問3:** デバッグ時などでできるこのbin、obj内のmdfは単純に、最初にデータベースを作成したときにプロジェクトフォルダ内にできたmdfがコピーされただけのものなのでしょうか? --- ◆DateGridViewなどをフォームに配置して、テーブルデータを表示、データの書き換え、削除などをできるようにし、デバッグすると、デバッグ中はレコードの追加などがDateGridViewででき、反映されているのですが、デバッグを終え、サーバーエクスプローラーで「テーブルデータの表示」で確認すると、テーブルデータには反映されておりません。 **質問4:** これは、デバッグした際は、Debugフォルダ内のmdfを参照し、データの更新等をしているということでしょうか? しかし再度デバッグすると元のテーブルデータに戻ってしまいます。 --- ◆上記質問4の現象をネット上でいろいろ調べたところ、ソリューションエクスプローラーのmdfのプロパティーで「出力ディレクトリにコピー」の項目を「コピー」、「新しい場合はコピーする」、「コピーしない」で、「新しい場合は...」でとりあえずは更新できました **質問5:** 最初にデータベースを作った、プロジェクトフォルダ直下のprojectA.mdfには、サーバーエクスプローラーからテーブルデータを表示して手入力しない限りデータは変わらない、という考えでいいのでしょうか? --- 以上ACCESSとの比較ばかりで、またうまく質問もできていないかもしれませんがよろしくお願いいたします。
回答: SurferOnWwwさんの支援的な回答です。 違う環境でシステムを作る際は、その環境で一般的な手法を身に着けてから使い方を決めましょう。でないと、ラーメン屋で、カレーを頼んで、カレー屋ほどうまくないと不満を持つようなことになるからです。 違いについて軽く説明します。 これは、ある程度のサイズのシステム開発では一般的な話ですが、システムはアプリケーションとデータベースに分けて開発します。更にデータベースはスキーマ(テーブルなどの定義)とデータに分けて考えます。(ただし、スキーマとデータはデータベースではセットで扱われるので、話は少しややこしいですが・・・) それぞれは密接に関係していますが、アプリケーションの変更とデータの保全(バックアップ/戻し)を安全に行うことが出来るようになります。(Accessの場合、ユーザーがデータごと吹っ飛ばす危険性があったり、システム変更の際にサービスを止めてコードorデータのコピペをしなければならなかったと思います。それとも同様にアプリケーション部分とデータ部分を別ファイルで運用していたりしていたのでしょうか?) VisualStudioには御存知の通りSQL Serverが付属されており、一般的にはシステム構築とは別にデータベースを構築し接続することになります。すでに試されているように、今回は1台のPCからしか利用する予定がない場合はデータベースをシステムの中に入れて配布するのもありですが、あまりやらない方法だと記憶しておくと良いでしょう。データベースが毎回削除されるという点も、やり方として一般的でない部分が影響しています。(この理由を詳しく書くには別の回答として書く必要がありそうです。) あと、なれてしまえはVisualStudioでの開発は、Accessのアプリケーション開発より時間がかかるということはありません。小規模なものでは同程度、大規模なものでは格段にVisualStudioが早いですので安心して開発して下さい。