概要スタンドアロンのアプリケーションでも、少しデータの件数が多かったりデータ構造が複雑だったりすると、データをDBで管理したくなってくる。そのために??わざわざDBサーバまでインストールしたくない、とにかくアプリケーションから簡単に利用したい、他の言語やプラットフォームからもアクセスしたい??というようなときに便利なのがSQLiteである。いうわけで、ここではC++BuilderでFireDACを用いてSQLiteへ接続する流れを取り上げる。Windows」をx86またはx64で入手する。sqlite-dll-win32-x86-3080802.zipをダウンロードして解凍しdllをD:\sqlite3.dllなどに配置する。DBを操作するシェルを使いたい場合などは同様に入手しておく。SQLiteを使用する。いうわけで、同ツールをダウンロードしてインストールする。SQLiteを起動したら以下のようにDBとテーブルを作成する。Database]をクリックしてD:\sample.dbなどと指定。表示されるTableの新規作成ダイアログを以下のように作成して[OK]ボタンをクリックする。(SQL文の併記される辺りが何気に便利。Data]タブをクリックすればテーブルを参照できる。Changes]ボタンをクリックしてデータを保存する。ちなみにSQLiteで使用する文字コードはUTF8(BOMなし)となる。これでDB側の準備は完了。C++Builderからデータエクスプローラを使ったり、アプリケーション中からSQL文を発行することも可能である。[ファイル]-[新規作成]-[VCLフォームアプリケーション]で、フォームに以下のコンポーネントを張り付ける。(待機カーソル)上記3つは必須。後はアプリケーション次第だが、とりあえずここでは以下を使う。(ボタン)そして、各コンポーネントのプロパティ類を以下でセットする。ここでは触れないが、当然ながら実行時の指定も可能である。customer」などと指定DataSource1DataSetプロパティにTFDQuery1を指定DBGrid1DataSourceプロパティにDataSource1を指定DBMemo1DataSourceプロパティにDataSource1を指定DataFieldプロパティにnameフィールドを指定Button1ボタンをダブルクリックしてOnClickイベントハンドラに以下のコードを追加。ちなみにConnectedやActiveプロパティは設計時にも変更できるので、DBGridに特定のフィールドだけ表示させたいような場合に便利。}}これで[F9]してアプリケーションを実行したらButton1をクリックするとDBに接続し、クエリの結果がDBGridとDBMemoに表示される。DBGridで2列目を選ぶとDBMemoの内容が対象レコードのnameフィールドの値に変更される。レコードの追加と更新とこれだけでは何なので、ついでにレコードの追加と更新までやってみる。先に既存のコンポーネントで以下を変更する。TFDConnectionの接続エディタでLockingModeとSynchronousをNormalにする。locked」でエラーになった。)また、TFDQueryのCacheedUpdatesプロパティをTrueにする。(TrueにしないとApplyUpdates()が使えない。)それからボタンを2つ追加して、それぞれのOnClickイベントハンドラに以下を記述する。}}リビルドして実行したら、Button1クリック後に、Button2でレコードを追加してDBTextに何か書いてButton3をクリックすると結果が保存される。任意のレコードのDBTextを書き換えてButton3をクリックしても結果が保存される。その他、データセットに対する主な操作として、レコードの絞り込みはSQL文またはFilterプロパティ、レコードの削除はDelete()、変更の取消はCancelUpdates()、コピーはCloneCursor()などのメソッドでできる。First()、Next()、Last()などでデータセット内を移動し、各レコードのフィールド値にはFieldByName("フィールド名")->AsStringなどでアクセスできる。DBGrid上でSQLiteのTEXT型が(WIDEMEMO)となっているのは、TFDQueryを右クリックして[フィールドエディタ]で表示内容を制御したいフィールドを移動後、該当フィールドのオブジェクトインスペクタにあるOnGetTextイベントハンドラに以下のように記述すると、直接DBGridのセルに文字列を表示できる。逆にいうと、DBの文字列データ型がCHAR(M)でないと、文字列を直接表示できない。C++Builder)からDBにアクセスする手段は数が多く、大昔のBDEとか、自前で持つDBMSであるInterbaseも含めて、もっと開発者に対してすっきりさせてほしいところではある。私は今までDBアクセスにはdbExpressを使ってきたが、dbExpressは単方向という最大の特徴が、良くも悪くもメリットでありデメリットでもあると感じていた。(高速かもしれないが、TClientDataSetやTDataSetProviderとセットで常にキャッシュを意識しているイメージ。)その点、シンプルさという意味でFireDACは悪くないと思う。ちなみにSQLiteの本家からソースをダウンロードして.h、.c(これまた一つずつ)をプロジェクトに追加してコンパイルすれば、低レベルにSQLiteを操作することもできる。VC++やCygwin用のmakefileはあってもbcc用は見捨てられていることの多い昨今、オリジナルのソースコードをそのまま流用できるのは貴重だと思う。FireDAC側の.hppと競合するので同時には使用できないし、コード量を激減できるので開発効率からいってもFireDACを使うべきだと思う。1.0アカウントnamepass読書ノートの全文を読むにはログインが必要です。