簡単DBアプリ作成-サンプルデータベース
さて、簡単なデータベース接続アプリケーションを作成してみましょう。
まず、サンプルデータベースを用意します。これはローカルにインストールしてあるFirebird-2.1.3を使いました。
●データベース
Firebirdのインストールディレクトリにあるaliases.confに以下の内容を追加します
yakitori = c:\database\yakitori.21.fdb CREATE DATABASE 'yakitori' PAGE_SIZE=16384 DEFAULT CHARACTER SET UTF8;
●テーブル
CREATE TABLE menu( id INTEGER NOT NULL PRIMARY KEY, product VARCHAR(100), price INTEGER, seasoning CHAR(1) DEFAULT 'S' NOT NULL, start_date TIMESTAMP, enabled SMALLINT DEFAULT 1 NOT NULL, last_update TIMESTAMP DEFAULT 'NOW' );
●ジェネレータ
CREATE GENERATOR gen_menu_id;
●トリガー
SET TERM ^ ;CREATE TRIGGER trg_bi_menu FOR menu ACTIVE BEFORE INSERT OR UPDATE POSITION 0 AS BEGIN if (INSERTING AND (NEW.id IS NULL)) THEN NEW.id = GEN_ID(gen_menu_id,1); if (UPDATING AND (NEW.last_update = OLD.last_update)) THEN NEW.last_update = CURRENT_TIMESTAMP; END^ SET TERM ; ^
●サンプルデータ
INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'もも', 126, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'もも', 126, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'もも', 126, 'H', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '砂肝', 147, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '砂肝', 147, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '皮', 126, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '皮', 126, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '三角', 147, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '三角', 147, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'つくね', 157, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'つくね', 157, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'つくね', 157, 'H', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'ねぎま', 157, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'ねぎま', 157, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'ねぎま', 157, 'H', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'ささみ', 147, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'ささみ', 147, 'T', '2009/7/1');
簡単DBアプリ作成-メインフォーム
まず、新しくメインメニューから新しいアプリケーションを作成します。フォームが1つできるので、そこにボタンを3つとDataSourceの各コンポーネントを配置します。また、DBGridを1つ配置しましょう。それぞれのプロパティを以下のように変更します。
●メインフォーム
- Caption = Simple DB App
- DocType = dtXHTML_1_0_Strict
- Encoding = Unicode(UTF-8)
- Name = form_main
●DataSource
- DataSet = dm_main.qry(データモジュールの設定が完了してから指定して下さい)
- Name = ds
●DBGrid
- DataSource = ds
- ReadOnly = true
●Button1
- Caption = Connect
●Button2
- Caption = Add new
●Button3
- Caption = Modify
簡単DBアプリ作成-データモジュール
次に、メインメニューから[ファイル]-[新規作成]-[データモジュール]を実行して、データモジュールを追加します。
データモジュールは、フォームと違ってWebブラウザには表示されませんが、非ビジュアルコンポーネントを配置することができるコンテナになるものです。名前のとおり、データベース関連のコンポーネントやメソッドはここへ追加していった方が使い易いでしょう。
Delphi for Windowsとは違い、フォームを相互に参照する場合には、そのままだとインクルードした方のフォームも表示されてしまいます。これを回避する方法もあるのですが、はっきりいって面倒なのでフォームを相互に参照するのはできるだけ避けて、データモジュールをうまく使いましょう。
fom_mainの方からは、メインメニューの[ファイル]-[ユニットを使う]でデータモジュールを参照するようにします。
さて、このデータモジュールにIBDatabaseを1つ、IBQueryを3つ追加して、各コンポーネントを以下のように設定します。
●データモジュール
- Name = dm_main
●IBDatabase
- Charset = utf8
- DatabaseName = yakitori
- Host = localhost
- Name = db
- UserName = sysdba (有効なFirebirdユーザー名)
- UserPassword = ******** (有効なパスワード)
●IBQuery1
- Database = db
- LimitCount = -1
- LimitStart = -1
- Name = qry
- SQL = select
id,
product,
price,
case seasoning
when 'S' then '塩'
when 'T' then 'たれ'
when 'H' then 'ハーブ'
end seasoning,
start_date
from menu
●IBQuery2
- Database = db
- LimitCount = -1
- LimitStart = -1
- Name = qry_insert
- SQL = insert into menu
(product, price, seasoning, start_date)
values
(?, ?, ?, ?)
●IBQuery3
- Database = db
- LimitCount = -1
- LimitStart = -1
- Name = qry_update
- SQL = update menu
set
product = ?,
price = ?,
seasoning = ?,
start_date = ?
where
id = ?
簡単DBアプリ作成-コーディング
ここまでの準備ができたら、Button1をダブルクリックしてform_mainにボタンのイベントハンドラを追加して、ここに以下のコードを追加します。
データモジュールの各コンポーネントおよびメソッドには、[ユニットを使う]でdm_mainをrequire_once()した上で、各イベントハンドラ内で利用するたびに、global宣言してアクセスします。
function Button1Click($sender, $params) { global $dm_main; if($dm_main->db->Connected == false) { $dm_main->db->Open(); $dm_main->qry->open(); $this->Button1->Caption = 'DisConnect'; } else { $dm_main->qry->close(); $dm_main->db->Close(); $this->Button1->Caption = 'Connect'; } }
とりあえずこれだけで、データベースに接続してDBGridに内容を表示したり、切断したりできるようになりました。

![]() |
2/3 |
![]() |
Index | |
データベースコンポーネントの使い方 | |
Page1 データベースコンポーネント ネイティブか、それとも汎用か、それが問題だ! InterBaseコンポーネントの機能追加 |
|
![]() |
Page2 簡単DBアプリ作成-サンプルデータベース 簡単DBアプリ作成-メインフォーム 簡単DBアプリ作成-データモジュール 簡単DBアプリ作成-コーディング |
Page3 簡単DBアプリ作成-レコードの追加(1) 簡単DBアプリ作成-レコードの追加(2) 簡単DBアプリ作成-レコードの追加(3) |
![]() |
Delphi for PHPを使い倒す! |
Coding Edgeお勧め記事 |
![]() |
いまさらアルゴリズムを学ぶ意味 コーディングに役立つ! アルゴリズムの基本(1) コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう |
![]() |
Zope 3の魅力に迫る Zope 3とは何ぞや?(1) Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか? |
![]() |
貧弱環境プログラミングのススメ 柴田 淳のコーディング天国 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く? |
![]() |
Haskellプログラミングの楽しみ方 のんびりHaskell(1) 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう |
![]() |
ちょっと変わったLisp入門 Gaucheでメタプログラミング(1) Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう |

- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
![]() |
||
|
||
![]() |
Coding Edge 記事ランキング
- ローコードで「倉庫管理システム」を4カ月で内製リプレース 調味料メーカーのダイショーが語る、非エンジニア中心で成功に導けた理由、実践のポイント
- Visual Studioが「MCP」に正式対応 AIによる開発がさらに容易に
- GitHub CopilotをGitHub内のどこからでも呼び出せる「エージェントパネル」登場
- 「Gemini」にURLで情報を直結 「URLコンテキストツール」をGoogleが公開
- Gemini Code Assistが大幅強化 複数ファイルを編集できる「Agent Mode」登場
- VBAでファイル名や拡張子を取得する方法、特殊フォルダを取得する方法
- 「Geminiアプリ」「Gemini CLI」「Google AI Studio」――Googleが示す、AIツールの選び方
- VS Codeで注目のMCPを実践 「SQLite MCP」「Playwright MCP」でデータとテストコードを生成する方法
- Python“独走時代”の裏で、ベテラン言語たちが息を吹き返す? 2025年7月版プログラミング言語人気ランキング
- セルのマクロが作りやすくなるExcelの「R1C1参照形式」
- 生成AI活用の落とし穴「精度」を上げる方法、プロンプト設計の失敗例とその対処法をDifyで学ぶ
- Visual Studioに「GPT-5」搭載 旧モデル「o1」「GPT-4.5」「o3-mini」「GPT-4o」は段階的に廃止
- 「Geminiアプリ」「Gemini CLI」「Google AI Studio」――Googleが示す、AIツールの選び方
- C言語とは? 5つの“学習するメリット”を分かりやすく解説
- Gemini Code Assistが大幅強化 複数ファイルを編集できる「Agent Mode」登場
- ローコードで「倉庫管理システム」を4カ月で内製リプレース 調味料メーカーのダイショーが語る、非エンジニア中心で成功に導けた理由、実践のポイント
- Visual Studioが「MCP」に正式対応 AIによる開発がさらに容易に
- 「Gemini」にURLで情報を直結 「URLコンテキストツール」をGoogleが公開
- エージェント型AIで開発はここまでできる
- OpenAIが「GPT-5」を発表 「Cursor」「Windsurf」「Codex CLI」などに最適化